diff options
author | Kevin B Kenny <kennykb@acm.org> | 2005-09-26 20:16:53 (GMT) |
---|---|---|
committer | Kevin B Kenny <kennykb@acm.org> | 2005-09-26 20:16:53 (GMT) |
commit | 373059201f1050bc3de9db10d9e442ef29da530b (patch) | |
tree | 96f2c95cbb7fe740f88d8ced159e4a7b767c65cd /libtommath/etc/2kprime.c | |
parent | 0144fb44d945919277e8edf53d49380f39e977c6 (diff) | |
download | tcl-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.c | 84 |
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 $ */ |