#! /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()