+#! /usr/bin/python
+
+import catacomb as C
+import mLib as M
+from sys import stdin
+
+kf = C.KeyFile('pgroups.kr', C.KOPEN_WRITE)
+
+for line in stdin:
+ line = line.strip()
+ if line == '' or (line.startswith('#') and not line.startswith('#:')):
+ continue
+ F = line.split()
+ if F[0] == 'group':
+ name = F[1]
+ if not name.startswith('catacomb'):
+ continue
+ def snarf(what):
+ F = stdin.next().split()
+ assert F[0] == what
+ return F[1]
+ p = C.MP(snarf('p'))
+ q = C.MP(snarf('q'))
+ g = C.MP(snarf('g'))
+ ff = []
+ while True:
+ F = stdin.next().split()
+ if not F or F[0] != '#:factor':
+ break
+ ff.append(C.MP(F[1]))
+ seed = C.rmd160().hash(name).done()
+ k = kf.newkey(C.ReadBuffer(seed).getu32(), 'dh-param')
+ k.tag = name
+ k.data = C.KeyDataStructured({
+ 'p': C.KeyDataMP(p, 'shared'),
+ 'q': C.KeyDataMP(q, 'shared'),
+ 'g': C.KeyDataMP(g, 'shared')
+ })
+ k.attr['factor'] = ', '.join([f.tostring() for f in ff])
+ k.attr['genseed'] = M.base64_encode(seed)
+ k.attr['seedalg'] = 'rmd160-mgf'
+kf.save()