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