]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
Make eccdata warn about poor parameters.
authorNiels Möller <nisse@lysator.liu.se>
Sat, 10 Mar 2018 15:44:43 +0000 (16:44 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 10 Mar 2018 15:44:43 +0000 (16:44 +0100)
ChangeLog
eccdata.c

index e682a2a5846cbb7c152d79607cecf6ed5f8fa565..180633e171af381d65d73532405d42f8524b250b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
 2018-03-10  Niels Möller  <nisse@lysator.liu.se>
 
+       * eccdata.c (ecc_table_size): New helper function.
+       (ecc_pippenger_precompute): Display warning for poor parameters.
+
        * eccparams.c (main): New program, to list parameter alternatives
        for Pippenger's algorithm.
 
index 97a6194116e6f99ccce27c8bda3280e889ffaaaf..a4723f1ea399977ff82fa82c2818ddbbf37c14ef 100644 (file)
--- a/eccdata.c
+++ b/eccdata.c
@@ -611,18 +611,30 @@ ecc_curve_init (struct ecc_curve *ecc, unsigned bit_size)
   ecc->bit_size = bit_size;
 }
 
+static unsigned
+ecc_table_size(unsigned bits, unsigned k, unsigned c)
+{
+  unsigned p = (bits + k-1) / k;
+  unsigned M = (p + c-1)/c;
+  return M;
+}
+
 static void
 ecc_pippenger_precompute (struct ecc_curve *ecc, unsigned k, unsigned c)
 {
-  unsigned p = (ecc->bit_size + k-1) / k;
-  unsigned M = (p + c-1)/c;
+  unsigned M = ecc_table_size (ecc->bit_size, k, c);
   unsigned i, j;
 
+  if (M == ecc_table_size (ecc->bit_size, k-1, c))
+    fprintf(stderr,
+           "warn: Parameters k = %u, c = %d are suboptimal, could use smaller k\n",
+           k, c);
+
   ecc->pippenger_k = k;
   ecc->pippenger_c = c;
   ecc->table_size = M << c;
   ecc->table = ecc_alloc (ecc->table_size);
-  
+
   /* Compute the first 2^c entries */
   ecc_set_zero (&ecc->table[0]);
   ecc_set (&ecc->table[1], &ecc->g);