Various bugs and fixes. Add abstract group testing.
authormdw <mdw>
Thu, 1 Apr 2004 12:50:41 +0000 (12:50 +0000)
committermdw <mdw>
Thu, 1 Apr 2004 12:50:41 +0000 (12:50 +0000)
tests/group [new file with mode: 0644]
tests/mp
tests/mpbarrett
tests/mpmont
tests/mpx

diff --git a/tests/group b/tests/group
new file mode 100644 (file)
index 0000000..eb9c1fa
--- /dev/null
@@ -0,0 +1,284 @@
+# $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";
+}
index f66795e..34f16f8 100644 (file)
--- a/tests/mp
+++ b/tests/mp
@@ -1,6 +1,6 @@
 # Test vectors for MP functions
 #
-# $Id: mp,v 1.16 2003/10/12 15:03:35 mdw Exp $
+# $Id: mp,v 1.17 2004/04/01 12:50:41 mdw Exp $
 
 add {
   5 4 9; 5 -4 1; -5 4 -1; -5 -4 -9;
@@ -27,6 +27,9 @@ div {
   3131675836296406071791252329528905062261497366991742517193
     53
     59088223326347284373419855274130284193613157867768726739 26;
+  1552518092300708935130918131258481755631334049434514313202351194902966239949102107258669453876591642442910007680288864229150803718918046342632727613031282983744380820890196288509170691316593175367469551763119843371637221007210577919
+  776259046150354467565459065629240877815667024717257156601175597451483119974551053629334726938295821221455003840144432114575401859459023171316363806515641491872190410445098144254585345658296587683734775881559921685818610503605288959
+  2 1;
 }
 
 bin2c {
index 4ee624b..c3074d0 100644 (file)
@@ -1,6 +1,6 @@
 # Test vectors for Barrett modular reduction
 #
-# $Id: mpbarrett,v 1.3 2001/06/16 13:01:25 mdw Exp $
+# $Id: mpbarrett,v 1.4 2004/04/01 12:50:41 mdw Exp $
 
 mpbarrett-reduce {
   17 11 6;
@@ -52,6 +52,10 @@ mpbarrett-exp {
   8939489893434234331 1804289383 454353454354565 6139425926295484741;
   8939489893434234331 1804289383 8939489893434234330 1;
 
+  # --- Negative exponents ---
+
+  8939489893434234331 1804289383 -8939035539979879765 6139425926295484741;
+
   # --- DSA public key derivation ---
 
   0xc9c7feaeaedb16505389c5582df1858d0fdb3eecfe61c230d612661bef8c1bc5
@@ -110,4 +114,11 @@ mexp-2 {
   0x19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333
   0x821a926312e97adeabcc8d082b5278978a2df4b0
   0x2fc6cb9ac3be0eac3daf02eefb96fca3846708a28dd05730165fe50942f7f07edfef8e52fcb9369e3814aa24607e80475d0e61ad461d6b16b6cec5baae58946e;
+
+  0x8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80291
+  0x626d027839ea0a13413163a55b4cb500299d5522956cefcb3bff10f399ce2c2e71cb9de5fa24babf58e5b79521925c9cc42e9f6f464b088cc572af53e6d78802
+  0xbf655bd046f0b35ec791b004804afcbb8ef7d69d
+  0x19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333
+  -0x8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adabb090e849367fc31d4c6a97bac0b4be56a79a0de0
+  0x2fc6cb9ac3be0eac3daf02eefb96fca3846708a28dd05730165fe50942f7f07edfef8e52fcb9369e3814aa24607e80475d0e61ad461d6b16b6cec5baae58946e;
 }
index d7fc0af..389f2ed 100644 (file)
@@ -1,6 +1,6 @@
 # Test vectors for Montgomery reduction
 #
-# $Id: mpmont,v 1.6 2002/01/13 13:43:20 mdw Exp $
+# $Id: mpmont,v 1.7 2004/04/01 12:50:41 mdw Exp $
 
 create {
   340809809850981098423498794792349    # m
@@ -35,6 +35,10 @@ exp {
   8939489893434234331 1804289383 454353454354565 6139425926295484741;
   8939489893434234331 1804289383 8939489893434234330 1;
 
+  # --- Negative exponents ---
+
+  8939489893434234331 1804289383 -8939035539979879765 6139425926295484741;
+
   # --- DSA public key derivation ---
 
   0xc9c7feaeaedb16505389c5582df1858d0fdb3eecfe61c230d612661bef8c1bc5
@@ -100,4 +104,11 @@ mexp-2 {
   0x19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333
   0x821a926312e97adeabcc8d082b5278978a2df4b0
   0x2fc6cb9ac3be0eac3daf02eefb96fca3846708a28dd05730165fe50942f7f07edfef8e52fcb9369e3814aa24607e80475d0e61ad461d6b16b6cec5baae58946e;
+
+  0x8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adac32ab7aac49693dfbf83724c2ec0736ee31c80291
+  0x626d027839ea0a13413163a55b4cb500299d5522956cefcb3bff10f399ce2c2e71cb9de5fa24babf58e5b79521925c9cc42e9f6f464b088cc572af53e6d78802
+  0xbf655bd046f0b35ec791b004804afcbb8ef7d69d
+  0x19131871d75b1612a819f29d78d1b0d7346f7aa77bb62a859bfd6c5675da9d212d3a36ef1672ef660b8c7c255cc0ec74858fba33f44c06699630a76b030ee333
+  -0x8df2a494492276aa3d25759bb06869cbeac0d83afb8d0cf7cbb8324f0d7882e5d0762fc5b7210eafc2e9adabb090e849367fc31d4c6a97bac0b4be56a79a0de0
+  0x2fc6cb9ac3be0eac3daf02eefb96fca3846708a28dd05730165fe50942f7f07edfef8e52fcb9369e3814aa24607e80475d0e61ad461d6b16b6cec5baae58946e;
 }
index e54af08..7f6ff5e 100644 (file)
--- a/tests/mpx
+++ b/tests/mpx
@@ -1,6 +1,6 @@
 # Test vectors for low-level MP functions
 #
-# $Id: mpx,v 1.11 2003/05/16 09:09:24 mdw Exp $
+# $Id: mpx,v 1.12 2004/04/01 12:50:41 mdw Exp $
 
 # --- Load-store tests ---
 #
@@ -881,4 +881,8 @@ udiv {
   184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000
   0117d3db34ad005954459be9abedd0e5deb4ea0000000000000000
   00;
+
+  ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff
+  7fffffffffffffffe487ed5110b4611a62633145c06e0e68948127044533e63a0105df531d89cd9128a5043cc71a026ef7ca8cd9e69d218d98158536f92f8a1ba7f09ab6b6a8e122f242dabb312f3f637a262174d31d1b107fffffffffffffff
+  02 01;
 }