chiark / gitweb /
Merge remote-tracking branch 'origin/HEAD'
[catacomb-python] / algorithms.py
index a2a468f46bf613fa8207079e0b6f63e19967e523..0fa434a32246d1471016339d570a05a1f913c1ac 100644 (file)
@@ -40,9 +40,10 @@ xchacha20 xchacha12 xchacha8
 streamciphers += map(lambda s: s.translate(None, '/'), latindances)
 hashes = '''
 md2 md4 md5 tiger has160
-sha sha224 sha256 sha384 sha512
+sha sha224 sha256 sha512/224 sha512/256 sha384 sha512
 rmd128 rmd160 rmd256 rmd320
 whirlpool whirlpool256
+sha3-224 sha3-256 sha3-384 sha3-512
 '''.split()
 hmodes = '''
 mgf hmac
@@ -52,16 +53,16 @@ print '/* algorithms.h [generated] */'
 print
 
 for i in prps:
-  print '#include <catacomb/%s.h>' % i
+  print '#include <catacomb/%s.h>' % i.replace('/', '-')
   for j in pmodes:
-    print '#include <catacomb/%s-%s.h>' % (i, j)
+    print '#include <catacomb/%s-%s.h>' % (i.replace('/', '-'), j)
 for i in streamciphers:
-  print '#include <catacomb/%s.h>' % i
+  print '#include <catacomb/%s.h>' % i.replace('/', '-')
 print
 for i in hashes:
-  print '#include <catacomb/%s.h>' % i
+  print '#include <catacomb/%s.h>' % i.replace('/', '-')
   for j in hmodes:
-    print '#include <catacomb/%s-%s.h>' % (i, j)
+    print '#include <catacomb/%s-%s.h>' % (i.replace('/', '-'), j)
 print
 
 print '#define PRPS(_) \\'
@@ -72,15 +73,17 @@ print
 
 print '#define RNGS(_) \\'
 for i in (cross(prps, ['ofb', 'counter'])):
-  print ('\t_("%(prim)s-%(mode)s", %(prim)s_keysz, ' +
-         '%(prim)s_%(mode)srand, 0, 0) \\') % \
-         {'prim': i[0], 'mode': i[1]}
+  print ('\t_("%(prim)s-%(mode)s", %(primid)s_keysz, ' +
+         '%(primid)s_%(mode)srand, RNG_PLAIN, 0) \\') % \
+         {'prim': i[0], 'mode': i[1],
+          'primid': i[0].replace('-', '_').replace('/', '_')}
 for i in (cross(hashes, 'mgf')):
-  print ('\t_("%(prim)s-%(mode)s", %(prim)s_%(mode)skeysz, ' +
-         '%(prim)s_%(mode)srand, 0, 0) \\') % \
-         {'prim': i[0], 'mode': i[1]}
+  print ('\t_("%(prim)s-%(mode)s", %(primid)s_%(mode)skeysz, ' +
+         '%(primid)s_%(mode)srand, RNG_PLAIN, 0) \\') % \
+         {'prim': i[0], 'mode': i[1],
+          'primid': i[0].replace('-', '_').replace('/', '_')}
 print '\t_("rc4", rc4_keysz, rc4_rand, 0, 0) \\'
-print '\t_("seal", seal_keysz, seal_rand, RNGF_INT, 0) \\'
+print '\t_("seal", seal_keysz, seal_rand, RNG_SEAL, 0) \\'
 for i in latindances:
   for r in ['salsa20', 'xsalsa20', 'chacha', 'xchacha']:
     if i.startswith(r):
@@ -90,8 +93,15 @@ for i in latindances:
     raise ValueError, 'failed to find root name for %s' % i
   if i.endswith('-ietf'): root += '_ietf'
   print ('\t_("%(name)s", %(root)s_keysz, %(id)s_rand, ' +
-         'RNGF_NONCE | RNGF_LATIN, %(ROOT)s_NONCESZ) \\') % \
+         'RNG_LATIN, %(ROOT)s_NONCESZ) \\') % \
       {'name': i, 'id': i.translate(None, '/').replace('-', '_'),
        'root': root, 'ROOT': root.upper()}
+for i in [128, 256]:
+  print ('\t_("shake%(w)d", shake%(w)d_keysz, cshake%(w)d_rand, ' +
+         'RNG_SHAKE, 0) \\') % \
+         {'w': i}
+  print ('\t_("kmac%(w)d", kmac%(w)d_keysz, kmac%(w)d_rand, ' +
+         'RNG_KMAC, 0) \\') % \
+         {'w': i}
 print '\t/* end */'
 print