chiark / gitweb /
General: Fix lots of whitespace issues.
[catacomb-python] / algorithms.py
1 ## -*-python-*-
2
3 def 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
15 prps = '''
16 des desx des3 mars
17 idea safer safersk
18 blowfish twofish
19 tea xtea
20 rc2 rc5
21 skipjack
22 cast128 cast256
23 square rijndael rijndael192 rijndael256
24 serpent noekeon
25 '''.split()
26 pmodes = '''
27 ecb cbc cfb ofb counter
28 '''.split()
29 streamciphers = '''
30 rc4 seal
31 '''.split()
32 hashes = '''
33 md2 md4 md5 tiger has160
34 sha sha224 sha256 sha384 sha512
35 rmd128 rmd160 rmd256 rmd320
36 whirlpool whirlpool256
37 '''.split()
38 hmodes = '''
39 mgf hmac
40 '''.split()
41
42 print '/* algorithms.h [generated] */'
43 print
44
45 for i in prps:
46   print '#include <catacomb/%s.h>' % i
47   for j in pmodes:
48     print '#include <catacomb/%s-%s.h>' % (i, j)
49 for i in streamciphers:
50   print '#include <catacomb/%s.h>' % i
51 print
52 for i in hashes:
53   print '#include <catacomb/%s.h>' % i
54   for j in hmodes:
55     print '#include <catacomb/%s-%s.h>' % (i, j)
56 print
57
58 print '#define PRPS(_) \\'
59 for i in prps:
60   print '  _(%s, %s) \\' % (i.upper(), i)
61 print '  /* end */'
62 print
63
64 print '#define RNGF_INT 1u'
65 print
66
67 print '#define RNGS(_) \\'
68 for i in (cross(prps, ['ofb', 'counter'])):
69   print ('  _("%(prim)s-%(mode)s", %(prim)s_keysz, ' +
70          '%(prim)s_%(mode)srand, 0) \\') % \
71          {'prim': i[0], 'mode': i[1]}
72 for i in (cross(hashes, 'mgf')):
73   print ('  _("%(prim)s-%(mode)s", %(prim)s_%(mode)skeysz, ' +
74          '%(prim)s_%(mode)srand, 0) \\') % \
75          {'prim': i[0], 'mode': i[1]}
76 print '  _("rc4", rc4_keysz, rc4_rand, 0) \\'
77 print '  _("seal", seal_keysz, seal_rand, RNGF_INT) \\'
78 print '  /* end */'
79 print