summaryrefslogtreecommitdiff
path: root/tweetnacl.h.py
blob: 5f34b57d3a8fb726529a17c7d15bc68a78fdc2b0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
print '#ifndef TWEETNACL_H'
print '#define TWEETNACL_H'

for z in [
'auth:hmacsha512256/32/32:BYTES,KEYBYTES:,_verify:qpup,ppup',
'box:curve25519xsalsa20poly1305/32/32/32/24/32/16:PUBLICKEYBYTES,SECRETKEYBYTES,BEFORENMBYTES,NONCEBYTES,ZEROBYTES,BOXZEROBYTES:'
+ ',_open,_keypair,_beforenm,_afternm,_open_afternm:qpuppp,qpuppp,qq,qpp,qpupp,qpupp',
'core:salsa20/64/16/32/16,hsalsa20/32/16/32/16:OUTPUTBYTES,INPUTBYTES,KEYBYTES,CONSTBYTES::qppp',
'hashblocks:sha512/64/128,sha256/32/64:STATEBYTES,BLOCKBYTES::qpu',
'hash:sha512/64,sha256/32:BYTES::qpu',
'onetimeauth:poly1305/16/32:BYTES,KEYBYTES:,_verify:qpup,ppup',
'scalarmult:curve25519/32/32:BYTES,SCALARBYTES:,_base:qpp,qp',
'secretbox:xsalsa20poly1305/32/24/32/16:KEYBYTES,NONCEBYTES,ZEROBYTES,BOXZEROBYTES:,_open:qpupp,qpupp',
'sign:ed25519/64/32/64:BYTES,PUBLICKEYBYTES,SECRETKEYBYTES:,_open,_keypair:qvpup,qvpup,qq',
'stream:xsalsa20/32/24,salsa20/32/8:KEYBYTES,NONCEBYTES:,_xor:qupp,qpupp',
'verify:16/16,32/32:BYTES::pp'
]:
  x,q,s,f,g = [i.split(',') for i in z.split(':')]
  o = 'crypto_'+x[0]
  sel = 1
  for p in q:
    p = p.split('/')
    op = o+'_'+p[0]
    opi = op+'_'+'tweet'
    if sel:
      print '#define '+o+'_PRIMITIVE "'+p[0]+'"'
      for m in f+['_'+m for m in s+['IMPLEMENTATION','VERSION']]: print '#define '+o+m+' '+op+m
      sel = 0
    for j in range(len(s)): print '#define '+opi+'_'+s[j]+' '+str(p[j+1])
    for j in range(len(f)):
      a = g[j].replace('v','u *').replace('u',',unsigned long long').replace('q',',unsigned char *').replace('p',',const unsigned char *')
      print 'extern int '+opi+f[j]+'('+a[1:]+');'
    print '#define '+opi+'_VERSION "-"'
    for m in f+['_'+m for m in s+['VERSION']]: print '#define '+op+m+' '+opi+m
    print '#define '+op+'_IMPLEMENTATION "'+o+'/'+p[0]+'/tweet'+'"'

print '#endif'