]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Deleted duplicate function point_zero_p. Support n == 0 in test_ecc_mul_h instead.
authorNiels Möller <nisse@lysator.liu.se>
Wed, 17 Sep 2014 19:43:19 +0000 (21:43 +0200)
committerNiels Möller <nisse@lysator.liu.se>
Wed, 17 Sep 2014 19:43:19 +0000 (21:43 +0200)
ChangeLog
testsuite/ecc-add-test.c
testsuite/ecc-dup-test.c
testsuite/testutils.c

index ea613b72eb80dd8fa99db628d4b43e9362114314..01f6cab744b61cd5bd35f008bc9fd723fa480679 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,13 +1,18 @@
 2014-09-17  Niels Möller  <nisse@lysator.liu.se>
 
+       * testsuite/testutils.c (ecc_curves): Include curve25519 in list.
+       (test_ecc_mul_a): Include reference points for curve25519 (with
+       Edwards coordinates). Allow n == 0 and n == 1, comparing to zero
+       and the generator, respectively.
+       * testsuite/ecc-add-test.c (point_zero_p): Deleted function.
+       (test_main): Replace calls to point_zero_p by calls to
+       test_ecc_mul_h with n == 0.
+       * testsuite/ecc-dup-test.c: Likewise.
+
        * testsuite/ecc-modinv-test.c (mpn_zero_p): Moved function, to...
        * testsuite/testutils.c (mpn_zero_p): New location. Also make
        non-static.
 
-       * testsuite/testutils.c (ecc_curves): Include curve25519 in list.
-       (test_ecc_mul_a): Include reference points for curve25519 (with
-       Edwards coordinates). Allow n == 1, and compare to the generator.
-
        * testsuite/ecdsa-keygen-test.c (ecc_valid_p): Add special case
        for curve25519.
 
index f17ea23ed48d19f748866e377d034a18f254b92a..0fccb71c823b4e554146ee118e55c7609d736874 100644 (file)
@@ -1,31 +1,5 @@
 #include "testutils.h"
 
-/* For curve25519 (or other edwards curves) only. */
-static int
-point_zero_p (const struct ecc_curve *ecc, const mp_limb_t *p)
-{  
-  mp_limb_t *d;
-  int ret;
-  mp_size_t i;
-
-  /* Zero point has Y = Z (mod p), or y = Y/Z = 1, which also implies
-     x == 0. */
-  d = xalloc_limbs (ecc->size);
-  ecc_modp_sub (ecc, d, p + ecc->size, p + 2*ecc->size);
-  while (mpn_cmp (d, ecc->p, ecc->size) >= 0)
-    mpn_sub_n (d, d, ecc->p, ecc->size);
-
-  for (i = 0, ret = 1; i < ecc->size; i++)
-    if (d[i])
-      {
-       ret = 0;
-       break;
-      }
-  
-  free (d);
-  return ret;
-}
-
 void
 test_main (void)
 {
@@ -50,12 +24,10 @@ test_main (void)
          ecc_a_to_j (ecc, g, ecc->g);
 
          ecc_add_ehh (ecc, p, z, z, scratch);
-         if (!point_zero_p (ecc, p))
-           die ("dup of zero point failed.\n");
+         test_ecc_mul_h (i, 0, p);
 
          ecc_add_eh (ecc, p, z, z, scratch);
-         if (!point_zero_p (ecc, p))
-           die ("dup of zero point failed.\n");
+         test_ecc_mul_h (i, 0, p);
 
          ecc_add_ehh (ecc, p, g, p, scratch);
          test_ecc_mul_h (i, 1, p);
index 4f426f8beec2cf56e2b4eba2859cce0dccafbedb..82c31e75cf7dbdd0b4aef360259dd8e1188c54b8 100644 (file)
@@ -1,31 +1,5 @@
 #include "testutils.h"
 
-/* For curve25519 (or other edwards curves) only. */
-static int
-point_zero_p (const struct ecc_curve *ecc, const mp_limb_t *p)
-{  
-  mp_limb_t *d;
-  int ret;
-  mp_size_t i;
-
-  /* Zero point has Y = Z (mod p), or y = Y/Z = 1, which also implies
-     x == 0. */
-  d = xalloc_limbs (ecc->size);
-  ecc_modp_sub (ecc, d, p + ecc->size, p + 2*ecc->size);
-  while (mpn_cmp (d, ecc->p, ecc->size) >= 0)
-    mpn_sub_n (d, d, ecc->p, ecc->size);
-
-  for (i = 0, ret = 1; i < ecc->size; i++)
-    if (d[i])
-      {
-       ret = 0;
-       break;
-      }
-  
-  free (d);
-  return ret;
-}
-
 void
 test_main (void)
 {
@@ -48,8 +22,7 @@ test_main (void)
          ecc_a_to_j (ecc, g, ecc->g);
 
          ecc_dup_eh (ecc, p, z, scratch);
-         if (!point_zero_p (ecc, p))
-           die ("dup of zero point failed.\n");
+         test_ecc_mul_h (i, 0, p);
 
          ecc_dup_eh (ecc, p, g, scratch);
          test_ecc_mul_h (i, 2, p);
index 71d64f018feae3acc7c9111eaf2798a749336f69..c6778e36305e80ea1f3bfa4269a1c39bcea6c2aa 100644 (file)
@@ -1387,8 +1387,26 @@ test_ecc_mul_a (unsigned curve, unsigned n, const mp_limb_t *p)
     }
   };
   assert (curve < 6);
-  assert (n >= 1 && n <= 4);
-  if (n == 1)
+  assert (n <= 4);
+  if (n == 0)
+    {
+      /* Makes sense for curve25519 only */
+      const struct ecc_curve *ecc = ecc_curves[curve];
+      assert (ecc->bit_size == 255);
+      if (!mpn_zero_p (p, ecc->size)
+         || mpn_cmp (p + ecc->size, ecc->unit, ecc->size) != 0)
+       {
+         fprintf (stderr, "Incorrect point (expected (0, 1))!\n"
+                  "got: x = ");
+         write_mpn (stderr, 16, p, ecc->size);
+         fprintf (stderr, "\n"
+                  "     y = ");
+         write_mpn (stderr, 16, p + ecc->size, ecc->size);
+         fprintf (stderr, "\n");
+         abort();
+       }
+    }
+  else if (n == 1)
     {
       const struct ecc_curve *ecc = ecc_curves[curve];
       if (mpn_cmp (p, ecc->g, 2*ecc->size) != 0)