Commit | Line | Data |
---|---|---|
9b11cb9c MW |
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'), | |
45c0fd36 MW |
24 | 'q': C.KeyDataMP(dhi.r, 'shared'), |
25 | 'g': C.KeyDataMP(dhi.g, 'shared')}) | |
9b11cb9c MW |
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 | |
45c0fd36 MW |
45 | print ' p %s' % dhi.p |
46 | print ' q %s' % dhi.r | |
47 | print ' g %s' % dhi.g | |
9b11cb9c MW |
48 | for f in ff: print '#:factor %s' % f |
49 |