chiark / gitweb /
catacomb-python.h: Don't inhibit 64-bit type detection any more.
[catacomb-python] / algorithms.py
CommitLineData
d7ab1bab 1## -*-python-*-
2
3def cross(*seq):
4 if not len(seq):
5 return [(),]
6 x = seq[0]
7 if type(x) is not tuple and type(x) is not list:
8 x = x,
9 r = []
10 for i in x:
11 for j in cross(*seq[1:]):
12 r.append((i,) + j)
13 return r
14
15prps = '''
16des desx des3 mars
17idea safer safersk
18blowfish twofish
19tea xtea
20rc2 rc5
21skipjack
22cast128 cast256
23square rijndael rijndael192 rijndael256
24serpent noekeon
25'''.split()
26pmodes = '''
27ecb cbc cfb ofb counter
28'''.split()
29streamciphers = '''
30rc4 seal
31'''.split()
3f4f64b8
MW
32latindances = '''
33salsa20 salsa20/12 salsa20/8 xsalsa20 xsalsa20/12 xsalsa20/8
34chacha20 chacha12 chacha8 xchacha20 xchacha12 xchacha8
35'''.split()
36streamciphers += map(lambda s: s.translate(None, '/'), latindances)
d7ab1bab 37hashes = '''
38md2 md4 md5 tiger has160
39sha sha224 sha256 sha384 sha512
40rmd128 rmd160 rmd256 rmd320
41whirlpool whirlpool256
42'''.split()
43hmodes = '''
44mgf hmac
45'''.split()
46
47print '/* algorithms.h [generated] */'
48print
49
50for i in prps:
51 print '#include <catacomb/%s.h>' % i
52 for j in pmodes:
53 print '#include <catacomb/%s-%s.h>' % (i, j)
54for i in streamciphers:
b2687a0a 55 print '#include <catacomb/%s.h>' % i
d7ab1bab 56print
57for i in hashes:
58 print '#include <catacomb/%s.h>' % i
59 for j in hmodes:
60 print '#include <catacomb/%s-%s.h>' % (i, j)
61print
62
03ed9abb 63print '#define PRPS(_) \\'
d7ab1bab 64for i in prps:
eb0f76ed
MW
65 print '\t_(%s, %s) \\' % (i.upper(), i)
66print '\t/* end */'
03ed9abb
MW
67print
68
69print '#define RNGS(_) \\'
70for i in (cross(prps, ['ofb', 'counter'])):
eb0f76ed 71 print ('\t_("%(prim)s-%(mode)s", %(prim)s_keysz, ' +
3f4f64b8 72 '%(prim)s_%(mode)srand, 0, 0) \\') % \
eb0f76ed 73 {'prim': i[0], 'mode': i[1]}
03ed9abb 74for i in (cross(hashes, 'mgf')):
eb0f76ed 75 print ('\t_("%(prim)s-%(mode)s", %(prim)s_%(mode)skeysz, ' +
3f4f64b8 76 '%(prim)s_%(mode)srand, 0, 0) \\') % \
eb0f76ed 77 {'prim': i[0], 'mode': i[1]}
3f4f64b8
MW
78print '\t_("rc4", rc4_keysz, rc4_rand, 0, 0) \\'
79print '\t_("seal", seal_keysz, seal_rand, RNGF_INT, 0) \\'
80for i in latindances:
81 for r in ['salsa20', 'xsalsa20', 'chacha', 'xchacha']:
82 if i.startswith(r):
83 root = r
84 break
85 else:
86 raise ValueError, 'failed to find root name for %s' % i
87 print ('\t_("%(name)s", %(root)s_keysz, %(id)s_rand, ' +
88 'RNGF_NONCE, %(ROOT)s_NONCESZ) \\') % \
89 {'name': i, 'id': i.translate(None, '/'),
90 'root': root, 'ROOT': root.upper()}
eb0f76ed 91print '\t/* end */'
d7ab1bab 92print