--- /dev/null
+# $Id: group,v 1.1 2004/04/01 12:50:41 mdw Exp $
+#
+# Test group abstraction, and a bunch of other things.
+
+check {
+ "prime { 29, 7, 16 }" "ok";
+ "prime { 29, 6, 5 }" "not a subgroup";
+ "prime { 21, 2, 2 }" "p is not prime";
+ "prime { 29, 14, 9 }" "group order not prime";
+
+ "ec { secp224r1 }" "ok";
+
+ "prime { catacomb-g1024 }" "ok";
+
+ "ec {
+ prime:
+ 0xdb7c2abf62e35e668076bead208b
+ primeproj:
+ 0xdb7c2abf62e35e668076bead2088, 0x659ef8ba043916eede8911702b22
+ 0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500
+ 0xdb7c2abf62e35e7628dfac6561c5 * 1
+ }" "ok";
+
+ "ec {
+ prime:
+ 0xdb7c2abf62e35e668076bead208b
+ primeproj:
+ 0xdb7c2abf62e35e668076bead2088, 0x659ef8ba043916eede8911702b22
+ 0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500
+ 0xdb7c2abf62e35e7628dfac6561c5 * 2
+ }" "incorrect cofactor";
+
+ # --- This one's oakley-155 ---
+
+ "ec {
+ binpoly: 0x0800000000000000000000004000000000000001
+ binproj: 0, 0x7338F
+ 0xaa089ae4666a422e714651ad9372213fa65a93,
+ 0x12d29c630dda76010397809a6816be6d2ffa815
+ 0xaaaaaaaaaaaaaaaaaab1fcf1e206f421a3ea1b * 12
+ }" "cofactor out of range";
+
+}
+
+checkelt {
+ "prime { 29, 7, 16 }" 16 0;
+ "prime { 29, 7, 16 }" 2 -1;
+
+ "ec { secp112r1 } "
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500"
+ 0;
+
+ "ec {
+ binpoly: 0x0800000000000000000000004000000000000001
+ binproj: 0, 0x7338F
+ 0xaa089ae4666a422e714651ad9372213fa65a93,
+ 0x12d29c630dda76010397809a6816be6d2ffa815
+ 0xaaaaaaaaaaaaaaaaaab1fcf1e206f421a3ea1b * 12
+ }"
+ "0x7b, 0x1c8"
+ -1;
+
+}
+
+mul {
+ "prime { 29, 7, 16 }" 8 7 27;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ 32459289443738057373904596685867555624839649360339363831766212033645755638497600605981483758068704145575847399920657057013890131443911836862688141735006
+ 1926426135381827210395257472845875618319108487720857260583372274154852182951667715700282388176779441854588992736540698662997833538400244234146123792411051;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ "0xdafebf5828783f2ad35534631588a3f629a70fb16982a888,
+ 0xdd6bda0d993da0fa46b27bbc141b868f59331afa5c7e93ab"
+ "0x76e32a2557599e6edcd283201fb2b9aadfd0d359cbb263da,
+ 0x782c37e372ba4520aa62e0fed121d49ef3b543660cfd05fd";
+}
+
+sqr {
+ "prime { 29, 7, 16 }" 8 6;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ 4005285938812802884869056091732317348251189092239718246050415417461526884090403819686629744110427371766834314349639104763417430078158218519967583957470490;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ "0xdafebf5828783f2ad35534631588a3f629a70fb16982a888,
+ 0xdd6bda0d993da0fa46b27bbc141b868f59331afa5c7e93ab";
+}
+
+inv {
+ "prime { 29, 7, 16 }" 9 13;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ 4681416433015777166273237967077695060929667390767517698895765893629657943327105422863170288075976922965513789634412273770969873436435698540384711636714478;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0xf8e6d46a003725879cefee1294db32298c06885ee186b7ee";
+}
+
+div {
+ "prime { 29, 7, 16 }" 9 5 25;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ 1926426135381827210395257472845875618319108487720857260583372274154852182951667715700282388176779441854588992736540698662997833538400244234146123792411051
+ 4352638698811548340197747445538844858722300429607827242718336069934302793791666196485760252202755936738278388907467170248315316920551773058188278017435713;
+
+ "ec { nist-p192 }"
+ "0x76e32a2557599e6edcd283201fb2b9aadfd0d359cbb263da,
+ 0x782c37e372ba4520aa62e0fed121d49ef3b543660cfd05fd"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ "0xdafebf5828783f2ad35534631588a3f629a70fb16982a888,
+ 0xdd6bda0d993da0fa46b27bbc141b868f59331afa5c7e93ab";
+}
+
+exp {
+ "prime { 29, 7, 16 }" 3 12 16;
+
+ "prime { 29, 7, 16 }" 3 -12 20;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ 147362842169670001895012880214773009850
+ 2724858367444359999445242030177839616322236716074995568862882751673310120217819866527178352161554441906932468828696070184371718373894212895486594604883052;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ -147362842169670001895012880214773009850
+ 1787060841912191849220487080420238350817474901097656088582267726968757275201342587344406900935515285588366012828182975089444331616359162696826008378664956;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ 6277101735386680763835789423176059013767194773182842284081
+ inf;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ 3131675836296406071791252329528905062261497366991742517193
+ "0x7f55059a125dd0d2b40dc3a712248b2848a5e5fa11111f71,
+ 0xc6e91094cb34131e539c3db25f7f32670ef8dfe03a88b6fb";
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ 3131675836296406071791252329528905062261497366991742517193
+ "0x7f55059a125dd0d2b40dc3a712248b2848a5e5fa11111f71,
+ 0xc6e91094cb34131e539c3db25f7f32670ef8dfe03a88b6fb";
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ -3131675836296406071791252329528905062261497366991742517193
+ "0x7f55059a125dd0d2b40dc3a712248b2848a5e5fa11111f71,
+ 0x3916ef6b34cbece1ac63c24da080cd97f107201fc5774904";
+}
+
+mexp-1 {
+ "prime { 29, 7, 16 }" 3 12 16;
+ "prime { 29, 7, 16 }" 3 -12 20;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ 3131675836296406071791252329528905062261497366991742517193
+ "0x7f55059a125dd0d2b40dc3a712248b2848a5e5fa11111f71,
+ 0xc6e91094cb34131e539c3db25f7f32670ef8dfe03a88b6fb";
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ -3131675836296406071791252329528905062261497366991742517193
+ "0x7f55059a125dd0d2b40dc3a712248b2848a5e5fa11111f71,
+ 0x3916ef6b34cbece1ac63c24da080cd97f107201fc5774904";
+}
+
+mexp-2 {
+ "prime { 29, 7, 16 }" 3 12 8 2 9;
+ "prime { 29, 7, 16 }" 3 -12 8 2 4;
+
+ "prime { catacomb-g512 }"
+ 3344609493517948819439808013094817124423784439045485500527919676470975342917009634212031124646834193243018749323077268170586751415510015906107400678608590
+ -147362842169670001895012880214773009850
+ 130340428707563070626027539288099297037336608388990593367322442443880297841210613523501678207607756678300142264348927299637006055881968995671289567513600
+ 91626412351157168611316239052073981423
+ 1964042259347008051177500376636104488225042199152152977412099367647894431543835858678217073603604876847502133350210611462670145543437496436961938287223663;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ -3131675836296406071791252329528905062261497366991742517193
+ "0xea711858c23d92f9964655910bc90a197a915e90111cf11b,
+ 0x664189a1d8b2bb24f2b2ac64b19e2178118842e6ba9f4ad5"
+ 1110875761630725856340142297645383444629395595869672555585
+ "0xaa25bb0bf38b06821e8641c1afb8bc078dbe11c3cf9bc97,
+ 0xf1a4c09d621fb52736f6010ae90e9bc9771ac017a62098f9";
+}
+
+toint {
+ "prime { 29, 7, 16 }" 15 0 15;
+ "prime { 29, 7, 16 }" 0 0 0;
+
+ "ec { nist-p192 }" inf -1 0;
+
+ "ec { nist-p192 }"
+ "0x188da80eb03090f67cbf20eb43a18800f4ff0afd82ff1012,
+ 0x07192b95ffc8da78631011ed6b24cdd573f977a11e794811"
+ 0 602046282375688656758213480587526111916698976636884684818;
+}
+
+fromint {
+ "prime { 29, 7, 16 }" 15 0 15;
+ "prime { 29, 7, 16 }" 0 0 0;
+ "prime { 29, 7, 16 }" 39527306161272833161358334459 0 19;
+
+ "ec { nist-p192 }" 1 -1 inf;
+ "ec { nist-p192 }" 0
+ 0 "0, 0x8497a9fa119ff34c9c24a156ed0d44a0c5f5d1f19fc9f0ed";
+}
+
+toec {
+ "prime { 29, 7, 16 }" 0 -1 inf;
+ "ec { nist-p192 }" inf 0 inf;
+ "ec { secp112r1 }"
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500"
+ 0
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500";
+}
+
+fromec {
+ "prime { 29, 7, 16 }" inf -1 0;
+ "prime { 29, 7, 16 }" "39527306161272833161358334459, 9" 0 19;
+
+ "ec { secp112r1 }" inf 0 inf;
+ "ec { nist-p192 }" "1, 5" -1 inf;
+
+ "ec { secp112r1 }"
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500"
+ 0
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500";
+}
+
+tobuf {
+ "prime { 29, 7, 16}" 22 -1 "00";
+ "prime { 29, 7, 16}" 22 0 "000116";
+ "prime { 29, 7, 16}" 0 -1 "0000";
+ "prime { 29, 7, 16}" 0 0 "000100";
+
+ "ec { secp112r1 }" inf 0 "0000";
+ "ec { secp112r1 }"
+ "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500"
+ 0 "000e09487239995a5ee76b55f9c2f098000ea89ce5af8724c0a23e0e0ff77500";
+ "ec { nist-p192 }"
+ "0, 0x8497a9fa119ff34c9c24a156ed0d44a0c5f5d1f19fc9f0ed"
+ 0 "00010000188497a9fa119ff34c9c24a156ed0d44a0c5f5d1f19fc9f0ed";
+}
+
+frombuf {
+ "prime { 29, 7, 16}" "00" -1 0;
+ "prime { 29, 7, 16}" "000116" 3 22;
+ "prime { 29, 7, 16}" "00000e" 2 0;
+ "prime { 29, 7, 16}" "000100ff" 3 0;
+
+ "ec { secp112r1 }" "0000" 2 inf;
+ "ec { secp112r1 }"
+ "000e09487239995a5ee76b55f9c2f098000ea89ce5af8724c0a23e0e0ff77500f00d"
+ 32 "0x09487239995a5ee76b55f9c2f098, 0xa89ce5af8724c0a23e0e0ff77500";
+ "ec { secp112r1 }" "0001000001001ee7" -1 inf;
+ "ec { nist-p192 }"
+ "00010000188497a9fa119ff34c9c24a156ed0d44a0c5f5d1f19fc9f0eddead"
+ 29, "0, 0x8497a9fa119ff34c9c24a156ed0d44a0c5f5d1f19fc9f0ed";
+}