summaryrefslogtreecommitdiffstats
path: root/libtommath/etc/2kprime.c
diff options
context:
space:
mode:
authorKevin B Kenny <kennykb@acm.org>2005-09-26 20:16:53 (GMT)
committerKevin B Kenny <kennykb@acm.org>2005-09-26 20:16:53 (GMT)
commit373059201f1050bc3de9db10d9e442ef29da530b (patch)
tree96f2c95cbb7fe740f88d8ced159e4a7b767c65cd /libtommath/etc/2kprime.c
parent0144fb44d945919277e8edf53d49380f39e977c6 (diff)
downloadtcl-373059201f1050bc3de9db10d9e442ef29da530b.zip
tcl-373059201f1050bc3de9db10d9e442ef29da530b.tar.gz
tcl-373059201f1050bc3de9db10d9e442ef29da530b.tar.bz2
Merge changes from HEAD, including libtommath 0.36
Diffstat (limited to 'libtommath/etc/2kprime.c')
-rw-r--r--libtommath/etc/2kprime.c84
1 files changed, 84 insertions, 0 deletions
diff --git a/libtommath/etc/2kprime.c b/libtommath/etc/2kprime.c
new file mode 100644
index 0000000..d2b4a88
--- /dev/null
+++ b/libtommath/etc/2kprime.c
@@ -0,0 +1,84 @@
+/* Makes safe primes of a 2k nature */
+#include <tommath.h>
+#include <time.h>
+
+int sizes[] = {256, 512, 768, 1024, 1536, 2048, 3072, 4096};
+
+int main(void)
+{
+ char buf[2000];
+ int x, y;
+ mp_int q, p;
+ FILE *out;
+ clock_t t1;
+ mp_digit z;
+
+ mp_init_multi(&q, &p, NULL);
+
+ out = fopen("2kprime.1", "w");
+ for (x = 0; x < (int)(sizeof(sizes) / sizeof(sizes[0])); x++) {
+ top:
+ mp_2expt(&q, sizes[x]);
+ mp_add_d(&q, 3, &q);
+ z = -3;
+
+ t1 = clock();
+ for(;;) {
+ mp_sub_d(&q, 4, &q);
+ z += 4;
+
+ if (z > MP_MASK) {
+ printf("No primes of size %d found\n", sizes[x]);
+ break;
+ }
+
+ if (clock() - t1 > CLOCKS_PER_SEC) {
+ printf("."); fflush(stdout);
+// sleep((clock() - t1 + CLOCKS_PER_SEC/2)/CLOCKS_PER_SEC);
+ t1 = clock();
+ }
+
+ /* quick test on q */
+ mp_prime_is_prime(&q, 1, &y);
+ if (y == 0) {
+ continue;
+ }
+
+ /* find (q-1)/2 */
+ mp_sub_d(&q, 1, &p);
+ mp_div_2(&p, &p);
+ mp_prime_is_prime(&p, 3, &y);
+ if (y == 0) {
+ continue;
+ }
+
+ /* test on q */
+ mp_prime_is_prime(&q, 3, &y);
+ if (y == 0) {
+ continue;
+ }
+
+ break;
+ }
+
+ if (y == 0) {
+ ++sizes[x];
+ goto top;
+ }
+
+ mp_toradix(&q, buf, 10);
+ printf("\n\n%d-bits (k = %lu) = %s\n", sizes[x], z, buf);
+ fprintf(out, "%d-bits (k = %lu) = %s\n", sizes[x], z, buf); fflush(out);
+ }
+
+ return 0;
+}
+
+
+
+
+
+
+/* $Source: /root/tcl/repos-to-convert/tcl/libtommath/etc/2kprime.c,v $ */
+/* $Revision: 1.1.1.1.2.1 $ */
+/* $Date: 2005/09/26 20:16:54 $ */