chiark / gitweb /
progs/perftest.c: Use from Glibc syscall numbers.
[catacomb] / utils / genpgroup
1 #! /usr/bin/python
2
3 import mLib as M
4 import catacomb as C
5 from sys import argv
6 from os import environ
7
8 _, name, plen, qlen, seed = argv
9 plen = int(plen)
10 qlen = int(qlen)
11
12 if seed == '!':
13   seed = C.rmd160().hash(name).done()
14 else:
15   seed = M.base64_decode(seed)
16 rng = C.rmd160_mgfrand(seed)
17
18 dhi, ff = C.DHInfo.genlimlee(plen, qlen, rng = rng)
19
20 kf = C.KeyFile(environ.get('TMPDIR', '/tmp') + 'keyring', C.KOPEN_WRITE)
21 id = C.ReadBuffer(seed).getu32()
22 k = kf.newkey(id, 'dh-param')
23 k.data = C.KeyDataStructured({'p': C.KeyDataMP(dhi.p, 'shared'),
24                               'q': C.KeyDataMP(dhi.r, 'shared'),
25                               'g': C.KeyDataMP(dhi.g, 'shared')})
26 k.attr['factor'] = ', '.join([str(f) for f in ff])
27 k.attr['genseed'] = M.base64_encode(seed)
28 k.attr['seedalg'] = 'rmd160-mgf'
29
30 def words(buf):
31   buf = C.ReadBuffer(buf)
32   while not buf.endp:
33     yield buf.getu32()
34 h = C.rmd160()
35 k.fingerprint(h)
36 fprhex = '-'.join(['%x' % w for w in words(h.done())])
37
38 print '# --- %s ---' % name
39 print '#'
40 print '# keyid = %x' % id
41 print '# seed = %s' % M.base64_encode(seed)
42 print '# fingerprint = %s' % fprhex
43 print ''
44 print 'group %s' % name
45 print '  p %s' % dhi.p
46 print '  q %s' % dhi.r
47 print '  g %s' % dhi.g
48 for f in ff: print '#:factor %s' % f
49 print