Merge branch 'master' of git+ssh://metalzone.distorted.org.uk/~mdw/public-git/catacomb/
authorMark Wooding <mdw@ncipher.com>
Wed, 22 Nov 2006 11:38:39 +0000 (11:38 +0000)
committerMark Wooding <mdw@ncipher.com>
Wed, 22 Nov 2006 11:38:39 +0000 (11:38 +0000)
keyutil.c
noise.c
ptab.in
utils/genpgroup [new file with mode: 0755]
utils/genpgroups [new file with mode: 0755]

index 1adb840..9bfc6bc 100644 (file)
--- a/keyutil.c
+++ b/keyutil.c
@@ -941,6 +941,7 @@ static int cmd_add(int argc, char *argv[])
 {
   key_file f;
   time_t exp = KEXP_EXPIRE;
+  uint32 kid = rand_global.ops->word(&rand_global);
   const char *tag = 0, *ptag = 0;
   const char *c = 0;
   keyalg *alg = algtab;
@@ -962,6 +963,7 @@ static int cmd_add(int argc, char *argv[])
       { "comment",     OPTF_ARGREQ,    0,      'c' },
       { "tag",         OPTF_ARGREQ,    0,      't' },
       { "rand-id",     OPTF_ARGREQ,    0,      'R' },
+      { "key-id",      OPTF_ARGREQ,    0,      'I' },
       { "curve",       OPTF_ARGREQ,    0,      'C' },
       { "seedalg",     OPTF_ARGREQ,    0,      'A' },
       { "seed",                OPTF_ARGREQ,    0,      's' },
@@ -973,7 +975,7 @@ static int cmd_add(int argc, char *argv[])
       { "kcdsa",       0,              0,      'K' },
       { 0,             0,              0,      0 }
     };
-    int i = mdwopt(argc, argv, "+a:b:B:p:e:c:t:R:C:A:s:n:lqrLKS",
+    int i = mdwopt(argc, argv, "+a:b:B:p:e:c:t:R:I:C:A:s:n:lqrLKS",
                   opt, 0, 0, 0);
     if (i < 0)
       break;
@@ -1118,6 +1120,19 @@ static int cmd_add(int argc, char *argv[])
        seed = d.buf;
        k.r = sa->gen(p, n);
       } break;
+
+      /* --- Key id --- */
+
+      case 'I': {
+       char *p;
+       unsigned long id;
+
+       errno = 0;
+       id = strtoul(optarg, &p, 16);
+       if (errno || *p || id > MASK32)
+         die(EXIT_FAILURE, "bad key-id `%s'", optarg);
+       kid = id;
+      } break;
        
       /* --- Other flags --- */
 
@@ -1175,9 +1190,8 @@ static int cmd_add(int argc, char *argv[])
   keyrand(&f, rtag);
 
   for (;;) {
-    uint32 id = rand_global.ops->word(&rand_global);
     int err;
-    if ((err = key_new(&f, id, argv[optind], exp, &k.k)) == 0)
+    if ((err = key_new(&f, kid, argv[optind], exp, &k.k)) == 0)
       break;
     else if (err != KERR_DUPID)
       die(EXIT_FAILURE, "error adding new key: %s", key_strerror(err));
@@ -2126,7 +2140,7 @@ Options:\n\
   { "add", cmd_add,
     "add [-OPTIONS] TYPE [ATTR...]\n\
        Options: [-lqrLKS] [-a ALG] [-bB BITS] [-p PARAM] [-R TAG]\n\
-                [-A SEEDALG] [-s SEED] [-n BITS]\n\
+                [-A SEEDALG] [-s SEED] [-n BITS] [-I KEYID]\n\
                 [-e EXPIRE] [-t TAG] [-c COMMENT]", "\
 Options:\n\
 \n\
@@ -2146,6 +2160,7 @@ Options:\n\
 -t, --tag=TAG          Tag the key with the name TAG.\n\
 -r, --retag            Untag any key currently with that tag.\n\
 -R, --rand-id=TAG      Use key named TAG for the random number generator.\n\
+-I, --key-id=ID                Force the key-id for the new key.\n\
 -l, --lock             Lock the generated key with a passphrase.\n\
 -q, --quiet            Don't give progress indicators while working.\n\
 -L, --lim-lee          Generate Lim-Lee primes for Diffie-Hellman groups.\n\
diff --git a/noise.c b/noise.c
index 9088930..c122506 100644 (file)
--- a/noise.c
+++ b/noise.c
@@ -390,7 +390,8 @@ int noise_freewheel(rand_pool *r)
 
 done:
   signal(SIGALRM, sigal);
-  TV_SUB(&oitv.it_value, &oitv.it_value, &itv.it_value);
+  if (oitv.it_value.tv_sec || oitv.it_value.tv_usec)
+    TV_SUB(&oitv.it_value, &oitv.it_value, &itv.it_value);
   setitimer(ITIMER_REAL, &oitv, 0);
   return (rc);
 }
diff --git a/ptab.in b/ptab.in
index dfcf63b..24151f9 100644 (file)
--- a/ptab.in
+++ b/ptab.in
@@ -48,86 +48,172 @@ group oakley8192
 
 #----- Lim-Lee groups generated by hand -------------------------------------
 #
-# I generated each of these using the `key' command, as follows:
+# I generated these using utils/genpgroups.  It took a rather long time.
+
+# --- catacomb-ll-128-512 ---
 #
-#   ./key add -adh-param -LS -b$b -B$B -Armd160-mgf -n160 -tg$b dhp
+# keyid = 3db35e07
+# seed = PbNeB774QFw0xJvLDEn3bUx6hJw=
+# fingerprint = fb47344e-9bfcd0e-e986c772-48edc231-861cb5fb
+
+group catacomb-ll-128-512
+  p 9749248307666198278625282069621029423614285873414870747628872221551255623823205551438908261067675576856742534707535779666498916029617598868013496631088223
+  q 271499434142083095503643289076442321059
+  g 572938290446952786361356734705597783874760982871814854106633812061613480394314443743197177265739535298268868306029572450131746639710824513310586144336987
+#:factor 271499434142083095503643289076442321059
+#:factor 251174382438405784142034780246853570853
+#:factor 259658226261043076610234546745792177763
+#:factor 275292752516630714214627215608643381611
+
+# --- catacomb-ll-160-1024 ---
 #
-# The seeds are printed so that they can be verified, for example by saying
+# keyid = 98f62cc8
+# seed = mPYsyKXF6PoNTkl5uZE64gKEf20=
+# fingerprint = 6ab1f087-5614561c-5d388443-b1f02eac-38248fe6
+
+group catacomb-ll-160-1024
+  p 69775951038073580217048751187698556149910661999359201823421066000439190288124938297116840422332973903349265313226189724474672148172906743149961449018143681316055777549225333684417216672046201528908637006946721694566251047975893301628540057123962444434130461052652526277961662241061299058137499738575071867183
+  q 741802303617786660769426556982216255271020758647
+  g 24031880137812767104513348688448999056754549625670167617628008814539123937598464069755252337842705625768270002772600104095116713027947418314704258588569425678035630653993833866258334547988915311887541947589468379164053328339235797437698686107421712042993209960764868024283667188725341401853595169622553906137
+#:factor 741802303617786660769426556982216255271020758647
+#:factor 1436145082693042410533997633791272917636904431479
+#:factor 1053371763883815722032496338163704236230178616951
+#:factor 1215995718665420681503927009463070333378310191827
+#:factor 1448192360714741582009673893725822727433041298541
+#:factor 17654251325616983743094122151298023764308424678047987263690296014551
+
+# --- catacomb-ll-192-1536 ---
 #
-#   for i in \
-#       512:128:V5DGdsaGc94mN9URH3I77nsNLIg= \
-#       1024:160:XRJk5bOOi3HLn4KjIzsR1lHYARk= \
-#       1536:192:xdavXXnfLHfzffaZUOpN4aJ4yUI= \
-#       2048:256:XaRFBJQ81wVVzq8qoBeIP3vqyuE; do
-#     set -- `echo $i | tr : " "`
-#     b=$1 B=$2 seed=$3
-#     key add -adh-param -LS -b$b -B$B -Armd160-mgf -s$seed -tg$b dhp
-#   done
-
-# --- catacomb-g512 ---
+# keyid = 7efe5c2c
+# seed = fv5cLMXgGO2voYGTQ5K525Xtf9E=
+# fingerprint = ae9d47b9-e303daa5-9677023d-764b338b-53f03c4e
+
+group catacomb-ll-192-1536
+  p 271163844483056215974969265313967454661676256266511940924304321373021958106999031565631233996938091358447023677706317722695337026864685384345663120704730255257202847527192911265950638087504732115876440997750045081880863038141607482083211725689822517898206821836185159703555104632867971994304356879518337226475272092974597967943366038800089283400183985773753490774687966167193456249452974119129018696293050595073100284829925638444204379135326678813960293114732959
+  q 3265942811645946563242629602041107481841853511350443184197
+  g 216185318413290469366405581500018842001794769819261149347277739848511992115259660705539911431188902360038442052949313200461450240469139278699145891151900315976816130082310914969548643710915174155521909660265659882527478738966654443422798664706090262812802264667406360583964285545011889176706871228354070760597031811706100156760441692822039947686308668974200473374152063439445019790248156400822413220452383963514887723177708643429977392740800552485785350546387634
+#:factor 3265942811645946563242629602041107481841853511350443184197
+#:factor 4203281750074745560664516895168522022509720946720609480259
+#:factor 5008750505930402098755083797499946811957880698185704286517
+#:factor 5437815993255342021982036827752826453901545498474314278259
+#:factor 3856915640937851719940744630159301063173277801391043813291
+#:factor 6054082443893470116716978196535076127652382149483455623509
+#:factor 4527580176039500642864307604310793340910014541817043735439
+#:factor 3430016280837410693307976287901159907499384818919106315351
+
+# --- catacomb-ll-224-2048 ---
 #
-# seed = V5DGdsaGc94mN9URH3I77nsNLIg=
-# fingerprint = f25bc8c6-617a09a1-754d2eaa-0522871a-760e610d
-
-group catacomb-g512
-  p 5118856347920954160378863232830631325889644197299799167911144300201784122094780184626197180489795089420405735367823610560615880134994605406941434667432423
-  q 305195864527308403703758000941688611143
-  g 3697266067523710036467093123816011201983155908266335624854330873142263159303630246637735938648226082958343061457343689503209448195311459584298640741102705
-#:factor 305195864527308403703758000941688611143
-#:factor 183466370120479092451878102554970138601
-#:factor 186700538408825324669801286998471418829
-#:factor 244828664101528731840410424550149964513
-
-# --- catacomb-g1024 ---
+# keyid = e2824699
+# seed = 4oJGmZFnxNgns4UExrPWJXJDQYY=
+# fingerprint = 5b3631f1-f388bca-554c1df1-3774fee9-cd46747c
+
+group catacomb-ll-224-2048
+  p 3113844893182469436423817481922802329154474934213986369565700235348098440269001480103560846535113493144522446351379349356211385191632945710341444495577638160076546999114567117877732507854868463110804063964212132228977417231690350182211790515961798314443291574015832300281633156990779527484905381392680532643288437519954295652416759988107781937077836044809781096660654460207183523575424301901443740349094152501352983589721328225459512044516684078781305909247963063040562914192132284695886353707336911126238203292592145886841905764429235683487108646920559740458905874135798982283901137307047131586817745416509850061963
+  q 18749474022970964965792505501868745784157349746475161167020805104727
+  g 1018599075350815414286530684646967825916370747779291600517646276513566802791874935821816063520500873842729343817973803895278528701892043836290994612088035311589900475691176610297248816678701309707300454643927577686742011376684351525767933769045470869869290385506108485669189456183746644562327923152628958690988304340204333382573235567919004822811151873260798098816157572583867825397056414990908538555039226503662448878536483457742053639607062687899859473980884756925814541061907505350254827583321961201313954703462583072253230646667723110441238195386606218014837851495231172030604130800244334912972408067680590879980
+#:factor 18749474022970964965792505501868745784157349746475161167020805104727
+#:factor 26459793266106143518700371316953986751950547842631163615799385478033
+#:factor 23385205652191135191327958583020476187937251160152256504448581299573
+#:factor 17287418736358368314036906794523064561326146990020019216549187737103
+#:factor 16800288948485454351848726052252844830400274721321174607061304165751
+#:factor 14817124042645057452868896146782513905071983176482538876644503596827
+#:factor 24089412810223523640445605527780074479098235298741910558499656689361
+#:factor 18919386933765812741111621380736732547216460099506859126765656541087
+#:factor 68423637472150676252123752731403397187923476268634988015857219241126016100451
+
+# --- catacomb-ll-256-3072 ---
 #
-# seed = XRJk5bOOi3HLn4KjIzsR1lHYARk=
-# fingerprint = 0dc1bdb6-538314cf-d7b87bff-b8bd7200-90605815
-
-group catacomb-g1024
-  p 78755935681003885419264728861345379637028906441022322413456415764939641783336851042588146268355482691146885408309655771050383114167622301018690564876497648546617048801723493306649269757534973720900588265521617407576647372939590696584279495709722074618640770310739210062851628263901598357589613375395797359959
-  q 1419054345488286019529284378621915381299017390711
-  g 58825919769364968331424947271593333019269386260261303735666667702229466489655563394667916806132064369818023847262687164133692606997345477915636979837490941743124378900249509898575176837060134280677725934918181696837395720729413369903126189903716658234076491410436114815588467963968699191062139234426829304874
-#:factor 1419054345488286019529284378621915381299017390711
-#:factor 808918575263122392359194885025533099598345595673
-#:factor 837447658428460194172640743162052526375779460247
-#:factor 1176506922641176986055037627440710388833031551637
-#:factor 1440893326598068230528326457570152914912523167631
-#:factor 24163813452665907844419927325562548942785722977403812563263504533577
-
-# --- catacomb-g1536 ---
+# keyid = e6a15ce1
+# seed = 5qFc4fL01gTjyvNMZH5BvwETZco=
+# fingerprint = 904df4e7-74941baa-40d589c8-fecad932-2b3b7c8d
+
+group catacomb-ll-256-3072
+  p 635937223373484887991140560420669529960468634418212194527199243018802509220923645480563049852948379631872315326364181219863391536284352632127476573990043945919830000350264391397346335414535975554209931971547284463207275833747975949070870172306582775948778222246682185331862354083029804303222690541851195763223409045953191584611635790362191424339883737168342809190665629632289528654983812904611647818546832860081714363504512892885600580448186423533085059295328609139522690627823102925150246378111221377628009667319528150747320084312110336288028683700603719073769314245952464113622780032073817850603131463761017417455806035107984621889773217138911836476354442521466189648565925624512100087534918369360007697883847802211797655614684090408428715299537509886614640500137409891381649298835563011151796284848165977247286439820050405175697064122759870661294968492275655767983096727976056361878300352234381528837008128941375285251387
+  q 89271282791461757245617785540129155142212959423277129581512553253419075634703
+  g 293025651734044707050351995205142657657141955131408425452312245943331353163428637443799381119408990271553007202915223601376791534187122912295000993316207089139736477148501917083144416322685925261624358336253378688806309805096283386698409139605996997308008266491782991490291726095895573563845937760385377670846794792328581579165150512160132493375389995617711312966986681865792948443127326586291576561351005982500369077653940283008076332825908419690031303502192009860824429031526378047535596212801179578879818504990773143072529887215206211778546705082334239130823956177702608427222251531070457604183947814624087379251368161182770323100074409926426428526795865215674068539423364010352920515052672366811052717283396264950182005583498061313136436293898863077084485762289185337928869086731032780517039420605615746259170222257438835029958473402842467194409561307509136616954789698181252705567549441508247668319257495617674881793988
+#:factor 89271282791461757245617785540129155142212959423277129581512553253419075634703
+#:factor 85831054040144766435760746678768685031101307134949905606966042252247846736739
+#:factor 106974241938861083915762659525277908624697359844432666343676471334975764276049
+#:factor 74188558205228235051388929541366735789893711666871143431413381703129034070571
+#:factor 64157908398727096384500697645883202842334928055247546726538359334678953374533
+#:factor 91888021786522811643506031866522514605588426773858897142365239694153824388723
+#:factor 86202112980065410413258705060295663522206392211838714986438313175672540034679
+#:factor 101718718485667336124248700072690338405530751717394437871691123315096947983183
+#:factor 86666452227843804499517643692692014159268339780015078349842908985056208435853
+#:factor 107755126504421076829573915729759110231793946298489260169446357640494497518059
+#:factor 106001951238340530179427922980522671485637210826387486585015951056665476348869
+#:factor 102183593360154313236939029184315018977616435836107396944951781361526011480879
+
+# --- catacomb-ll-384-7680 ---
 #
-# seed = xdavXXnfLHfzffaZUOpN4aJ4yUI=
-# fingerprint = 7c8395e0-30f0ba39-3fcf305f-8405e925-8f55ec8b
-
-group catacomb-g1536
-  p 383618801425631512639679010233494027298448169109547600059502705907371439271932758179471011100378234860612705323707696845632535293731854087134152787350527588865123205717061331587664013265527474950838320241277990361233998673285302400493519384019311459331115126650720227947194082175343397026404881513921942694130897583244878286078416071034663404900503607239216267234716848423157867865924627528541625976189517370222928416617890890711958913977705458641898019793137567
-  q 3275641213331577544956079882485798541293343355151947117267
-  g 75567102998973006819236434748343962916387173892100142148230797775334350230786915953451381035927889555810159538209392484334843275305619145381031766085998906461896047057459109982258943279745411432423432727058945662406099102428838108340486817276659663329224706868534013896950343046900915527691132454858703939255112356712430338179445362271271130771412736483434334076018336540519431066737658374108259585338553305483833520027492221617458503836640494191113432119200395
-#:factor 3275641213331577544956079882485798541293343355151947117267
-#:factor 5923907098009644577374814618329026695556706671262137178497
-#:factor 3844881227882828127330776567190990999774232184254041918229
-#:factor 5430347777844125846459785226421548800285951243451322854507
-#:factor 4579813319768104593696877908030851637284891613924119865649
-#:factor 5010386120883339072065025678004772865252492789176775057011
-#:factor 4450957002678134171264816926461631570727858852456021603561
-#:factor 4635348374228446290293078229669107374406520693763884412441
-
-# --- catacomb-g2048 ---
+# keyid = 5269085d
+# seed = UmkIXe0NUh9EHPOO8u8wF8mhLQE=
+# fingerprint = 79071929-98fc59d-90b7743e-c5c2b654-9bb79c2f
+
+group catacomb-ll-384-7680
+  p 216559231449171871041190135626382624797124950735238103903411263023444445882521628396323446917201544947387362748232352479621010825720892522010264595137021526116731147020276163999389935515909942333859243831227670403913428432731504427389273023004939424753052775358161721558889434984752937404659922107755872908503276779890720154023419646466364753857461405783464469564625360217138090672724105361675896756808274354930058114085554600822147968649870032508764648998263671769796991884663568970203225077040350146289614179408735323764473153776149414398483161820946251418283039309221276673125231280207218356527486085198155052448482264858753938528034551335541575510835605019724293894867922725429018142837363943168309374088743910487619039647758175469460668571266467909654776838430687432194443218576000354284573578578313918222270250431668826898042163427173702446261012188950489694384130788197898956349943432660613123480611964086340909829616693038723512697569973817087806925553170590595578662024721424212829104524679861074838515062614572669868082762235959143570965134389478420007029121452023331460602894158087970348076496609174310151629106271427215947168306439928345126945165118709319486831988505313790613950433545275492703644799196726129007271379101141097250063655345163597099147393517021524375283410477077887674889864364373504345856902602031627659096612965600880097793678105801528551273968273016116586602655943987294387646704481664853571904789295943497201543689680443816576374462034616478062083674538453821741357423160686683957869164976227205380757021506255070600142017516211729170052461889059117212201165174680435195480761191462787291840078314124775690821420091760461597315155088442641783854597704388729214697745034805817520117506496545607796864049406793174516710815917428415700817370248228453077064519820749224220930454265603643316849024708084260878037824529368824330161019279087245044637182254878850971615729695143996520927935652887799292993748602455597137301552603377186175439256163850872771856775561289081476860168359000521640192117573827877302113899996287468260783657370603418752653187994927154468272901154316379212588059218864942163650290968975838491996852452140839172227541162524444316754170785930872965059072588210184084993896704348797801907146398460530513820150529386362374102968643080903455218783795163739396580563
+  q 33126499307317576797871833023217004335728314922050873541842362900543256622519036793987373377351818708943025119171013
+  g 96859294361547047642162231787698695293269170366381491039992704638487946870512955047635144422727688206850890592577601738386271033615655069759857614095318767501569475658225621379418176050399654722867097565799361229947796756782330159878485797280010527792372818398073347477883450716624241650342576251700830368197267161507895940250335059430229713885285808307538641824823453590259949699610056770268667527819173674245700546468626735701216914339359142650715456068873883323510582206093162545301581421872580614739960541059105320799303366751068487975658774037067271201124075671594347915071804828018801863090776942278748696864666275555399479604564578677796647983816263014540144519577131864786690922226752900095101570448042330169808811588582992274222974333043374060077106932770817928804830739464113061207244668378493315384242428432594357567083170258903374723309088233501818385465347016865045003737737429798873421728939731524368763227995005635265743181878570394577251864081145075962862658667595276249717296728684048617249986325764929873684993115348889870151843083280953797610712542442651569528403369291638278579344023829005801861314384307223035852089456550106858884145475380292972702972023699980804060437666725813022897101316874650121913713231347979141680903702045096621935190730276560295174524297300767314797689155407477601193107232938299830541221417725759368288595613473097104008577963940594171976537149511040148774289702490489315160512871522386217608881824304091006999472822494018964857391111674528315676869116824677355671824612095554583261258648450847127015033139359148253652027620146044628375304786435643476708542206375787159378427699020092463186472971399347599749181816424274424067915825882710114752513444732397713670497772986582958901510359579133132479016445445133604454907255125008080844594331635493230874836372234145675198053154029087315214747182882002718722228763467363382722967777319004806095376893995711476881150741027724250087088999020456989167082293444606242846362570237792721708356293491203816603574491100293039203889820292140596922368098350519693304511861932465759110608906269402554390780611082681465359527185555358515709411662470414648813606479086286524570875988991968332315775966514438221552899748093614170849525785168229994381907745855683962639488177828929551456219770877454135407893035439949325975780350
+#:factor 33126499307317576797871833023217004335728314922050873541842362900543256622519036793987373377351818708943025119171013
+#:factor 39355538213779465581327905402419970362362827155309917911796788256581129259700838386618633466328785307910060598484089
+#:factor 24990988056514685939227489925894893740599480412356885556635114159485308445876939770393364881549529860169928180358751
+#:factor 29710393998736802825004025579677917729092552502321819764111039726208854433428942095508492913578932136133436765710137
+#:factor 30739990822741028562742164007270587796692423847729505877569973917995737943042778723217469119645159801429991709987411
+#:factor 38467104071408925475553899301420008676544897864238119086844380566779548268491996551153519861871328607592273248640063
+#:factor 26249202441547885968346939762119297860863007366370739789532392353072352597721946778221716140197625626869457398407943
+#:factor 35113510884533077462576668870689443131037411172656549819745724383911555364605887073198680214468558440325573744139273
+#:factor 22799521027155572453510717469170377645186972219918245680012037643676230864376926993221681405925996643835629140041553
+#:factor 35237903572957790995889936270089932531166269466107290813994448142778414605138387309936585467385466822473088271031989
+#:factor 27428052831286394078655137717030752972732374814011687175621160166365055343004612251793080304507732432129056200291727
+#:factor 20653805003557030567582482355924457431196786739428479408853799555350943953733271029133593962324338862058432369521581
+#:factor 20826184829221859923080357759745090302065026449606341016497732724141145977802307612276509411486570418197846062995143
+#:factor 26186565771074398017481590713676896769947111595943534554546789381717976098676902111563130714755073678247235508588839
+#:factor 25062273677906610062620640227124848504281876654137470308684277968100792708156285085199790540571827305085913619650939
+#:factor 28620246516918127020366359691491908359742867622666550018522929993024502416569436771205673472786682579926850748107811
+#:factor 37856943506407240881326721106883344091018942980536189030625919515240362253893275735656123073145875668656864714642553
+#:factor 22067087486134964177557541373312161142485654981859077450341811542291069526079170766664489890765256439946132722899891
+#:factor 23098926790257626751285008739153477597734517594763012574497649607286859624287080618144594023194033634778511868647877
+#:factor 29874082012645596638985309976826212131328113612069017684649166404247820505933961130580996098120522635385267888074961
+
+# --- catacomb-ll-512-15360 ---
 #
-# seed = XaRFBJQ81wVVzq8qoBeIP3vqyuE=
-# fingerprint = 83d4eccd-7ee749e0-08aa836d-f2db8476-8edd2936
-
-group catacomb-g2048
-  p 6566549572652120431689861127531558421330340455043793984482564709696337228812001308904952649568065583568587879772909497598656422677974007527961282502097075930845830281718567861929276323615100590300159375177078322480856459891862339310954032953912791719082743072006782706539621638332710884731210307201371592118143799018971643225573537115357866462994309593328388179007477192291502661723448576542875507556533074094050684884411874123801280281707321329428218433930422183253523330090184052067733393547530287435821953994285151790223917195811689888131012632526833728463264350844033754405413758744532430886373149124555575950119
-  q 85219291683194343311648709576647238772792814954178375461491931659867071278179
-  g 2712141723171795581488249576260576193761110477063764293591032009827968751431395523061136221268304777960574263879250629365586812866824369569874730255716068295729152411167722797556896531602052328323962128667798500023092663406604756526331182771005434060123484959167353575934888103970356821325588887453135264523934107731497158111619089910229366930643553779443872242586492810355327274464057143529561902987269668822923702637343147141226655673562552876847682549615031082304437898719857828585147298892788370396664494775578429846195466392714456810816881284814946617797677007757332068752054463579186298698714625622710684652210
-#:factor 85219291683194343311648709576647238772792814954178375461491931659867071278179
-#:factor 103405058914440135561022141060017648606740273177776645185302688502492969483241
-#:factor 113963865770422801273732150069066629221825734790590120001120039124679845832963
-#:factor 80265376580192980414321385617558188839311132409791112548764982795679972612671
-#:factor 85373177067927972620374408916798159155602932702094285590546968078635293574289
-#:factor 88343485680671092863800489383682034593775966659103995594051594606625920956031
-#:factor 66724081118319248356666248758604279507549823671133489207537165813489410099011
-#:factor 80938197596113813192367778019037224015451333736452277049313111439333946857553
+# keyid = eb8239f8
+# seed = 64I5+NMQg5J7WZeXPpo7dsXLiAs=
+# fingerprint = c9addb82-dd632399-3dc1de81-40bf1c07-8ca10f5f
+
+group catacomb-ll-512-15360
+  p 267737496760767722068079882470300794033605836807622482067410964171393411520919176256914869964612479175351332823409449521645606004586415623871847948375817498161847543702485018137658512658395575254789459353699345744602369381934625059696198589413369531883820496222659510755499199435844896264025524352060302680951373940575374076136832975200291005032514098640691398905405952695332479714616633295008654736506041813997134163987333741695846413097366684661344684616003601739167823328153896592432168889551779922529269033348086812310042261625165919052730860791202842844956446296689792441147970214424901342118997798159010536443797638756041327664696059380444566468860999953138675880647585649322318597258428498912095373426547986582540102395757192981849426353427220562438871461011279156327503538285028350335365137967747204548916792891345433172565689300894798309981237564346356082832141951952353587270953547648554401212070076679138112680602893278933373210074307452631417834131238872904464712762382727721405307974548332455937227001307804713345124421010621912271858653169426612004330651882144263970965845286327430353225544353979151213153918381850147302137013870443565447267408929820734324527586605299075224612369180273167439366180804630758969753426630886643792237194705165542753979443278245006454216061793688914453452033873682552924255069369382991399006219888447629091144761962816311838278453426744318329244891747907726689490072483441687762777514940810025483492250932938902924371182177616985098416863622505393245791898509271049937545780547703178646787153221220148776603371623990916784487761937997154509142207118563842540149656720890488789518041789234252783231203642923485126118874925205605743388337049290048102619379144553450612454492744292824661671019548713713568495220254740410669480812494122553523238166010275744321977341774600646768663036548131650974040647199495585196626323527740836162430085342052052727637724463434046775500298250476314587684591403987781101547180153540252142742428325763088665202774890061858211471865412555929191623058633649510807447665649697908545538433271811034260583364231115893882106660460362988412359863944207083315791203817813275002751650497247445133621959259165882426036642183903263726738720790482023621515505915532731458799675555130983697925269194130788271555917528320139537585237789448433361057472038619150612530155365282694361060208517945072413778375766282508764808188838406430261098030072276397680381934641479775177012533402001805227189560517281847643477431969193260714721511089510106902236389858739200666246366584470443084819740458839115330024642751710950508392249199171525940200641812690856715538273687610654143705053231753228288281925749573248819830807718047751291456635357252049651851428004843642993442708365926756086784864901619631645046021861362898457472437142021009316121209673296032419273205690055243737394068612057117222448137828274568145532165778912543711623225896980785464025683101674037519994362712933363700839222229325067956938417486554365785132752607665421070796369679950679278370647133471481601224482043380412158088958751348091674065435762606782309017939064656880665108380755999804750464216396676060064634049102602879726529064753147592949810279608808566906092860843406668537037778792512924649747927350781700804454803517161392276648064085521072720776995493746790698252658256127300427299712765912635964190588872362794322452414626926829451697570056145597909237733397993006318713907266282999209757835954408527578538863449022305050578740139814278853085620493082736691092281414370903171187358162080568284465302364244005694005210033241390491480461570699307912480038911233821105644446152512328525805707483171601688919032664561976430006629718308661207667153016502452884195148963125673969191706827403727809879672157011607257925720399770233625156155404482591336975116607711326594730647784392952199755924399936290034962258677008541859799419880022170446493041811273344503041707889648677394173861246482375736320283850849220544488123549088485079584855817373424359266678858651199243166073560382077730099987468377705636637242565948949985751205620857554830109239961545967537041510571588045286127240744618124771659845616409968497542978672000492769104999131872897737410994487787465125717465733543538344980281077012185860886320520255782307357238375948751409954873680258342250057671086544607706855079362474966284884466968233383764211808745671425930931575698296989086335739534025778159969392356967742191929914522690322438276604838230279525053780117636662663017876019549874233270026169569062088907790243918806941605480559016625665402398248013040463246716327424411605332836931485156524858341673845209004633198457099
+  q 10571951456907669779892620647342646690819262609396359690524502534177633120229168340667942575812279188027386527234551758107216468763903236115143427787743501
+  g 128598894907195188417229808251635947329739807715046258519185506584473330204570377688022234101083503575628247088869022751684161661116289139941422707052770784716284088672813457818076409289020116060576402861848262767893027233018967673188177319672220467630868456703363498829958429433052255385200803148036151824908127072135772477213206484282052574102804738136991255543544214210006836913841655431369354618035834267490750490209475650037611036969604510775085809840648347935149597993597050657382149424122551607765060905481452516927446598515527477247171478999535528834297030357374539135945862618225434749983777290822601640168801388457093291990583760394365529485898194260738109655976435021259260994433703250576566622543068851481307975157566559105117105696734982421364733215553702481282493676675415951561410801018648748202526310066348347675957920894052908634114299749835690825285958913309859395516637946391466247723186108045362984213928977339986546180336619120165000686737182828914686039307870836014970214762767616169050313307016785283407848979763838796901889533929991249262241241357085858440003100578599589303213283823231174826022087580289633445725655404503623057795603361275581688344479184031083934546255260431689248986625244613768138643274300512818504921212079442823382330541009102805040432664579664706843475903526712081265964789883073385412340566450530204050902742402634241295067292054198743776821135490852456571373786221834566840691504860631528594003016940806795952907191256706618335919348660172917691296581810487025804834121410117485699086165420315964836248122689453219355409068053887775439819365185836341867035959423656535221657069676936301160422526984733243805036094607065902991385803575050051402498313584896099087939918378394590246964040554542516556529955127714323667109459918696040305338316628605973670322139489914621903381403168134305230387553206034949296665589019458435333656497975595505186840554679289490725712215379119708936656398805481443817609780446044759428279250269061044353577054755809478942400511447476504959503019924384501854940670343756700595741830432409860516378561836547983052719529231317929703619794317736666240984610506873930809661048521360303804091987776920298335472932445807825891843426486417538296088228895526448505937443508396033850769937257926518277775854316505029339507246170910597358345642816471561799639718384521695469006324992746905242127842686811730217295508863843618253667094515294426385046337302700840651870607339402514793220932482394311605909804968180513732290422195401488734272875219573971965851758260974945420620612963750578280530090049561109078297429042230921153112538935821627493853510065306244811588574295137834903557863723543417221594934011392570967713979066781470665113263579679078346927299350593423807794432345965954214411279192997560913500420482135209761870894770590428753377060355446520714577823849327411455211803153798853005451969647921330963739815383804967938950844708859220970746343764387380686978388124365668599015606571832777646186264005031394838487124138566127931419400765659300590631175744824203747372760896426041038824093171455170878742081716134501047540584551546098074082811645710233649110893608312835114875022232159365133137870471783950558791394747886849817239478618258433146217414467845273035067690658728958244690182678308246002614307639728716544214919926387449699076757255860035522872191741413862595318802625699582434142963070125555096411118677017567085204173949296857347553686296332447084040218420742023614270285859547357310153777066869597179554114216347704995773693933927290606278271631839500986041846119745101489053876898923820486679517034985529967206488771012442386273647914758788794352696546007225147463040960836917540476556158171204978341050270842436674153236983839541594662370682859252061101201529771658391958638069866925173982823135401442054529882771497178435812973944610940759337374490667655762675502138898683030596178493879840530527200986100162672072577140966652435656059897085134772326082774218777784721364471952331014224241827859689552691557210912017591834455185827870287610792949837996937421382409243563221525985357912277040622211893182331275112628740300448802121194783069108322399073099060064264166221152635853834406853391568903009131371873111346754163371271208724745835028574196362705248110621990890004232459546556494832519339269358637289654972986665902221815201810894863582325166306449650465453223955176919686048223394344108072515484536428726902347665256053780647893633252440024422896973060032376625419596170725316577542832012274755089837231069989343909974684844834831911679673118788567527167638795212119760473587068197787346864147296908951760670987133395
+#:factor 10571951456907669779892620647342646690819262609396359690524502534177633120229168340667942575812279188027386527234551758107216468763903236115143427787743501
+#:factor 9012440645643314246834973626922261248430582884321541587438489180023988737512032104254581442848613136311423618140795155753411152808972231131191495364696113
+#:factor 11664407479888990184202139277551028676651013424643181979060212470678705307128063234525963058666093887020686441365922823734852909082402446828730382752979229
+#:factor 9087876611156307298284101521955646383324933273215705601366986444355710006473522774817841755272381080750837076062838195845188516807677339637355892566997161
+#:factor 7850875653648084112022472229380028253695299668265516016947697170686003077850514907765524197019907612330445487029463301633628025237963893050671557196181037
+#:factor 9811668747595937862696556986818901047696541620978343479470960055182987731849807766456487932153408355304918692734270804755894967739728440775732045253975867
+#:factor 6850528828310882434413759447618080765577150578105428774266564959349750426580886713871673166366380181300391220234049862529092166014652885149727426581950889
+#:factor 6821638102376526854453397172384749542254164092866952888824098621712040405559147454526516007481215285840029382069182522430838260284493396455708010177523951
+#:factor 9678671090017306504471193471606002503207329774194080688795341865275315066168913972420992866933767238945244749299859823721414058505077146271463652017042439
+#:factor 11393931156044806890317196442201195583808258792085050704419049073069764825659064050709401048990965128349659629815212528487569661791997378607235211682046767
+#:factor 9017010040179947675396805634091838536572796142622751259821087175550548949037522734269840576513891007984351108919567391192649737362028379518075599077332061
+#:factor 8471151817163912127252174076707115691748601873337141861143247343372659043906393812132481208054508793108003038614600545971718635646265794386795278691754067
+#:factor 13197493938382376428309109637837242582358905975783852842417135134626200360303237020546312789639222633029539785097700295596040150049781404432593082545583687
+#:factor 8575974070132361564362415034026161716899096825228901868850832979622821929082521380113628505749265007300639809003377137159593961387754096563405572654530453
+#:factor 10685309091824418682668636366538457951831463604934567645475353414106697701363236027779367582469465499678424648685247868794321185827903765405464064983847047
+#:factor 7832579167103862778682606390694147440819353518240318233355101493037014682039100415001767021498559727856779744520541030712369584582339760294936511514528613
+#:factor 11443136038500921044854720404653372565248054144656073888671297768218410197327711069816877279851418893039887799451033119855767890079711768713385653679344477
+#:factor 11688409215583921110956357044321797822832780718093563289058981511879157867538826225803418406379935887495839460956831051786990678735417867002006878510530001
+#:factor 8269373232168928931276034385529570570419130675409379232099124396037402056853784630410470739109999093193671624909979089535332341276117302614326085797220209
+#:factor 9186395703395988275207810642702730047142932136743815395858445937000755684133671310159954341948067614705752787518132853542049279332346920436340054839993081
+#:factor 6795425485592182949378541037739159131046423659599522629955532628051588695375698396588579193598504741404656736703919260744390720003440892800061391975968543
+#:factor 10396118888753141861444655191592919753341123585411878553552147287212817173935858961195926696707128865851883589958560492545922923504442555855283863684690883
+#:factor 9200414943820306382018413241324240995480578531923453792659897506893121059804164387167396258851931504929883516095987516319887977740512884087194394964391023
+#:factor 12530634260640146540037552613265173527563597551474945252217132553909981324169848692185513076985582524700624840690045385961239986165286808674599194021249909
+#:factor 11777196311833624813129143516165715650218942159782423895657055945748378658698548936802659687190537166673298770529607439929019151210938035218664232208577273
+#:factor 7348262210091125168844276092746402631926760996426639974638799774896265368458530624040379440531440039323922186709965290812433008147988187233036235954446539
+#:factor 7495895476596043082228459599736776072884975040533651752897223545444099013720437774241963953093854938504409948988231217421899198126781802901186687835439671
+#:factor 7552446094981741253426497231778914956993354256770700433779133501020398264257537810327407638749096379083785811976115762275583243733103646262540268854635459
+#:factor 11876032185719044257059947481606348236079583968867505900797840767914468036111126560459281957584518925180041310466390015937147792402479266081314053413722009
+#:factor 9583540052593144013269177059658457027998433819569867982260511279574493019496581755069425156501941108339618548765191994601041609651011729970172839875903479
 
 #----- That's all, folks ----------------------------------------------------
diff --git a/utils/genpgroup b/utils/genpgroup
new file mode 100755 (executable)
index 0000000..ed65303
--- /dev/null
@@ -0,0 +1,49 @@
+#! /usr/bin/python
+
+import mLib as M
+import catacomb as C
+from sys import argv
+from os import environ
+
+_, name, plen, qlen, seed = argv
+plen = int(plen)
+qlen = int(qlen)
+
+if seed == '!':
+  seed = C.rmd160().hash(name).done()
+else:
+  seed = M.base64_decode(seed)
+rng = C.rmd160_mgfrand(seed)
+
+dhi, ff = C.DHInfo.genlimlee(plen, qlen, rng = rng)
+
+kf = C.KeyFile(environ.get('TMPDIR', '/tmp') + 'keyring', C.KOPEN_WRITE)
+id = C.ReadBuffer(seed).getu32()
+k = kf.newkey(id, 'dh-param')
+k.data = C.KeyDataStructured({'p': C.KeyDataMP(dhi.p, 'shared'),
+                              'q': C.KeyDataMP(dhi.r, 'shared'),
+                              'g': C.KeyDataMP(dhi.g, 'shared')})
+k.attr['factor'] = ', '.join([str(f) for f in ff])
+k.attr['genseed'] = M.base64_encode(seed)
+k.attr['seedalg'] = 'rmd160-mgf'
+
+def words(buf):
+  buf = C.ReadBuffer(buf)
+  while not buf.endp:
+    yield buf.getu32()
+h = C.rmd160()
+k.fingerprint(h)
+fprhex = '-'.join(['%x' % w for w in words(h.done())])
+
+print '# --- %s ---' % name
+print '#'
+print '# keyid = %x' % id
+print '# seed = %s' % M.base64_encode(seed)
+print '# fingerprint = %s' % fprhex
+print ''
+print 'group %s' % name
+print '  p %s' % dhi.p
+print '  q %s' % dhi.r
+print '  g %s' % dhi.g
+for f in ff: print '#:factor %s' % f
+print
diff --git a/utils/genpgroups b/utils/genpgroups
new file mode 100755 (executable)
index 0000000..086cfd5
--- /dev/null
@@ -0,0 +1,15 @@
+#! /bin/sh
+
+set -e
+for i in \
+       512:128 \
+       1024:160 \
+       1536:192 \
+       2048:224 \
+       3072:256 \
+       7680:384 \
+       15360:512
+do 
+  set -- `echo $i | tr : " "`
+  utils/genpgroup catacomb-ll-$2-$1 $1 $2 !
+done