]> git.ipfire.org Git - thirdparty/nettle.git/commitdiff
New program eccparams.
authorNiels Möller <nisse@lysator.liu.se>
Sat, 10 Mar 2018 14:50:34 +0000 (15:50 +0100)
committerNiels Möller <nisse@lysator.liu.se>
Sat, 10 Mar 2018 14:50:34 +0000 (15:50 +0100)
ChangeLog
Makefile.in
eccparams.c [new file with mode: 0644]

index efe70d63e4937d6a03b38c6e8deecb02f4ea86d4..e682a2a5846cbb7c152d79607cecf6ed5f8fa565 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-10  Niels Möller  <nisse@lysator.liu.se>
+
+       * eccparams.c (main): New program, to list parameter alternatives
+       for Pippenger's algorithm.
+
 2018-02-20  Niels Möller  <nisse@lysator.liu.se>
 
        * testsuite/cmac-test.c (test_cmac_hash): Deallocate ctx properly.
index de12bb3f092fac69c7bb0e0b42c40435ecac1004..56992cfe321bb5e1d876186c22a87939837b0ed3 100644 (file)
@@ -305,6 +305,10 @@ eccdata$(EXEEXT_FOR_BUILD): eccdata.c mini-gmp.c mini-gmp.h
        $(CC_FOR_BUILD) `test -f eccdata.c || echo '$(srcdir)/'`eccdata.c \
        -o eccdata$(EXEEXT_FOR_BUILD)
 
+eccparams$(EXEEXT_FOR_BUILD): eccparams.c
+       $(CC_FOR_BUILD) `test -f eccparams.c || echo '$(srcdir)/'`eccparams.c \
+       -o eccparams$(EXEEXT_FOR_BUILD)
+
 # desCore rules
 # It seems using $(srcdir)/ doesn't work with GNU make 3.79.1
 # des_headers = $(srcdir)/rotors.h $(srcdir)/keymap.h 
diff --git a/eccparams.c b/eccparams.c
new file mode 100644 (file)
index 0000000..6082977
--- /dev/null
@@ -0,0 +1,38 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int
+main (int argc, char **argv)
+{
+  unsigned bits;
+  unsigned max;
+  unsigned c;
+  if (argc < 3)
+    {
+    usage:
+      fprintf(stderr, "Usage: %s: exp-bits max-entries\n", argv[0]);
+      return EXIT_FAILURE;
+    }
+  bits = atoi(argv[1]);
+  if (bits < 2)
+    goto usage;
+  max = atoi(argv[2]);
+  if ( max < 2)
+    goto usage;
+
+  for (c = 3; (1<<c) <= max; c++)
+    {
+      unsigned b;
+      for (b = 1;; b++)
+       {
+         unsigned s = (1<<c) * b;
+         unsigned k;
+         if (s > max)
+           break;
+         k = (bits + (c*b) - 1) / (c * b);
+         printf("k = %2u, c = %2u, S = %3u, T = %3u (%3u A + %2u D)\n",
+                k, c, s, (b+1)*k, b*k, k);
+       }
+    }
+  return 0;
+}