From a82d02ad25e023c7fc40f503c4b89fd629ee6df8 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sat, 9 Dec 2017 20:05:20 +0100 Subject: [PATCH 01/10] remove useless include --- etc/tune.c | 1 - 1 file changed, 1 deletion(-) diff --git a/etc/tune.c b/etc/tune.c index 49fd0dd..b9191e0 100644 --- a/etc/tune.c +++ b/etc/tune.c @@ -3,7 +3,6 @@ * Tom St Denis, tstdenis82@gmail.com */ #include -#include #include /* how many times todo each size mult. Depends on your computer. For slow computers From c60eeb0bed7c86f411096254c67b30cbe4fe08ac Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sat, 9 Dec 2017 20:05:39 +0100 Subject: [PATCH 02/10] add missing include --- etc/mont.c | 1 + 1 file changed, 1 insertion(+) diff --git a/etc/mont.c b/etc/mont.c index e42c52b..368b1ca 100644 --- a/etc/mont.c +++ b/etc/mont.c @@ -1,5 +1,6 @@ /* tests the montgomery routines */ #include +#include int main(void) { From 80bb9e7b5259c22715e29fff71a0edf064cd9f43 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sun, 10 Dec 2017 09:35:50 +0100 Subject: [PATCH 03/10] add missing fclose --- etc/2kprime.c | 1 + 1 file changed, 1 insertion(+) diff --git a/etc/2kprime.c b/etc/2kprime.c index ad28430..f3f6b74 100644 --- a/etc/2kprime.c +++ b/etc/2kprime.c @@ -72,6 +72,7 @@ top: fprintf(out, "%d-bits (k = %lu) = %s\n", sizes[x], z, buf); fflush(out); } + fclose(out); return 0; } From 8a8659f283862804477362da9a9953f0cdc06def Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sat, 9 Dec 2017 21:08:08 +0100 Subject: [PATCH 04/10] remove useless variable --- demo/timing.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/demo/timing.c b/demo/timing.c index 1c1359f..41239e3 100644 --- a/demo/timing.c +++ b/demo/timing.c @@ -3,8 +3,6 @@ #include #include -uint64_t _tt; - #ifdef IOWNANATHLON #include #define SLEEP sleep(4) From d74f3d741a78061d701143628559ca5fd5616a14 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Thu, 1 Feb 2018 22:28:43 +0100 Subject: [PATCH 05/10] static variable & function --- demo/demo.c | 26 +++++++++++++++++--------- demo/timing.c | 6 +++--- etc/2kprime.c | 2 +- etc/drprime.c | 2 +- etc/mersenne.c | 6 +++--- etc/pprime.c | 10 +++++----- etc/tune.c | 10 +++++----- 7 files changed, 35 insertions(+), 27 deletions(-) diff --git a/demo/demo.c b/demo/demo.c index a95c768..d69426f 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -32,7 +32,7 @@ #include "tommath.h" -void ndraw(mp_int *a, char *name) +static void ndraw(mp_int *a, char *name) { char buf[16000]; @@ -50,10 +50,10 @@ static void draw(mp_int *a) } #endif +#if 0 +static unsigned long lfsr = 0xAAAAAAAAUL; -unsigned long lfsr = 0xAAAAAAAAUL; - -int lbit(void) +static int lbit(void) { if (lfsr & 0x80000000UL) { lfsr = ((lfsr << 1) ^ 0x8000001BUL) & 0xFFFFFFFFUL; @@ -63,11 +63,13 @@ int lbit(void) return 0; } } +#endif #if defined(LTM_DEMO_REAL_RAND) && !defined(_WIN32) static FILE *fd_urandom; #endif -int myrng(unsigned char *dst, int len, void *dat) +#if LTM_DEMO_TEST_VS_MTEST == 0 +static int myrng(unsigned char *dst, int len, void *dat) { int x; (void)dat; @@ -89,6 +91,7 @@ int myrng(unsigned char *dst, int len, void *dat) } return len; } +#endif #if LTM_DEMO_TEST_VS_MTEST != 0 static void _panic(int l) @@ -104,7 +107,7 @@ static void _panic(int l) if (!ret) { _panic(__LINE__); } \ } -mp_int a, b, c, d, e, f; +static mp_int a, b, c, d, e, f; static void _cleanup(void) { @@ -116,12 +119,13 @@ static void _cleanup(void) fclose(fd_urandom); #endif } +#if LTM_DEMO_TEST_VS_MTEST == 0 struct mp_sqrtmod_prime_st { unsigned long p; unsigned long n; mp_digit r; }; -struct mp_sqrtmod_prime_st sqrtmod_prime[] = { +static struct mp_sqrtmod_prime_st sqrtmod_prime[] = { { 5, 14, 3 }, { 7, 9, 4 }, { 113, 2, 62 } @@ -130,14 +134,18 @@ struct mp_jacobi_st { unsigned long n; int c[16]; }; -struct mp_jacobi_st jacobi[] = { +static struct mp_jacobi_st jacobi[] = { { 3, { 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1, -1, 0, 1 } }, { 5, { 0, 1, -1, -1, 1, 0, 1, -1, -1, 1, 0, 1, -1, -1, 1, 0 } }, { 7, { 1, -1, 1, -1, -1, 0, 1, 1, -1, 1, -1, -1, 0, 1, 1, -1 } }, { 9, { -1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1 } }, }; +#endif -char cmd[4096], buf[4096]; +#if LTM_DEMO_TEST_VS_MTEST != 0 +static char cmd[4096]; +#endif +static char buf[4096]; int main(void) { unsigned rr; diff --git a/demo/timing.c b/demo/timing.c index 41239e3..38561d4 100644 --- a/demo/timing.c +++ b/demo/timing.c @@ -17,7 +17,7 @@ #endif -void ndraw(mp_int *a, char *name) +static void ndraw(mp_int *a, char *name) { char buf[4096]; @@ -32,9 +32,9 @@ static void draw(mp_int *a) } -unsigned long lfsr = 0xAAAAAAAAUL; +static unsigned long lfsr = 0xAAAAAAAAUL; -int lbit(void) +static int lbit(void) { if (lfsr & 0x80000000UL) { lfsr = ((lfsr << 1) ^ 0x8000001BUL) & 0xFFFFFFFFUL; diff --git a/etc/2kprime.c b/etc/2kprime.c index f3f6b74..47c3b88 100644 --- a/etc/2kprime.c +++ b/etc/2kprime.c @@ -2,7 +2,7 @@ #include #include -int sizes[] = {256, 512, 768, 1024, 1536, 2048, 3072, 4096}; +static int sizes[] = {256, 512, 768, 1024, 1536, 2048, 3072, 4096}; int main(void) { diff --git a/etc/drprime.c b/etc/drprime.c index c683a5e..eb51dcc 100644 --- a/etc/drprime.c +++ b/etc/drprime.c @@ -1,7 +1,7 @@ /* Makes safe primes of a DR nature */ #include -int sizes[] = { 1+256/DIGIT_BIT, 1+512/DIGIT_BIT, 1+768/DIGIT_BIT, 1+1024/DIGIT_BIT, 1+2048/DIGIT_BIT, 1+4096/DIGIT_BIT }; +static int sizes[] = { 1+256/DIGIT_BIT, 1+512/DIGIT_BIT, 1+768/DIGIT_BIT, 1+1024/DIGIT_BIT, 1+2048/DIGIT_BIT, 1+4096/DIGIT_BIT }; int main(void) { diff --git a/etc/mersenne.c b/etc/mersenne.c index bdd819b..99babb1 100644 --- a/etc/mersenne.c +++ b/etc/mersenne.c @@ -5,7 +5,7 @@ #include #include -int is_mersenne(long s, int *pp) +static int is_mersenne(long s, int *pp) { mp_int n, u; int res, k; @@ -69,7 +69,7 @@ LBL_N: } /* square root of a long < 65536 */ -long i_sqrt(long x) +static long i_sqrt(long x) { long x1, x2; @@ -87,7 +87,7 @@ long i_sqrt(long x) } /* is the long prime by brute force */ -int isprime(long k) +static int isprime(long k) { long y, z; diff --git a/etc/pprime.c b/etc/pprime.c index a1681a8..fc2322a 100644 --- a/etc/pprime.c +++ b/etc/pprime.c @@ -7,8 +7,8 @@ #include #include "tommath.h" -int n_prime; -FILE *primes; +static int n_prime; +static FILE *primes; /* fast square root */ static mp_digit i_sqrt(mp_word x) @@ -152,7 +152,7 @@ static void gen_prime(void) fclose(out); } -void load_tab(void) +static void load_tab(void) { primes = fopen("pprime.dat", "rb"); if (primes == NULL) { @@ -163,7 +163,7 @@ void load_tab(void) n_prime = ftell(primes) / sizeof(mp_digit); } -mp_digit prime_digit(void) +static mp_digit prime_digit(void) { int n; mp_digit d; @@ -176,7 +176,7 @@ mp_digit prime_digit(void) /* makes a prime of at least k bits */ -int pprime(int k, int li, mp_int *p, mp_int *q) +static int pprime(int k, int li, mp_int *p, mp_int *q) { mp_int a, b, c, n, x, y, z, v; int res, ii; diff --git a/etc/tune.c b/etc/tune.c index b9191e0..82e1796 100644 --- a/etc/tune.c +++ b/etc/tune.c @@ -49,9 +49,9 @@ static uint64_t TIMFUNC(void) /* *INDENT-OFF* */ /* generic ISO C timer */ -uint64_t LBL_T; -void t_start(void) { LBL_T = TIMFUNC(); } -uint64_t t_read(void) { return TIMFUNC() - LBL_T; } +static uint64_t LBL_T; +static void t_start(void) { LBL_T = TIMFUNC(); } +static uint64_t t_read(void) { return TIMFUNC() - LBL_T; } /* *INDENT-ON* */ #else @@ -59,7 +59,7 @@ extern void t_start(void); extern uint64_t t_read(void); #endif -uint64_t time_mult(int size, int s) +static uint64_t time_mult(int size, int s) { unsigned long x; mp_int a, b, c; @@ -89,7 +89,7 @@ uint64_t time_mult(int size, int s) return t1; } -uint64_t time_sqr(int size, int s) +static uint64_t time_sqr(int size, int s) { unsigned long x; mp_int a, b; From 987911bd61c39a652927df8f5de4ca2aa43b647f Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sat, 9 Dec 2017 21:08:54 +0100 Subject: [PATCH 06/10] const parameter --- demo/demo.c | 2 +- demo/timing.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/demo/demo.c b/demo/demo.c index d69426f..c1fcfcd 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -32,7 +32,7 @@ #include "tommath.h" -static void ndraw(mp_int *a, char *name) +static void ndraw(mp_int *a, const char *name) { char buf[16000]; diff --git a/demo/timing.c b/demo/timing.c index 38561d4..9e7d03b 100644 --- a/demo/timing.c +++ b/demo/timing.c @@ -17,7 +17,7 @@ #endif -static void ndraw(mp_int *a, char *name) +static void ndraw(mp_int *a, const char *name) { char buf[4096]; From 31aac2cea7c902b16dd741c58e02f8e77a79efde Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sat, 9 Dec 2017 21:08:32 +0100 Subject: [PATCH 07/10] const variable --- demo/timing.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demo/timing.c b/demo/timing.c index 9e7d03b..e7959f7 100644 --- a/demo/timing.c +++ b/demo/timing.c @@ -222,7 +222,7 @@ int main(void) } { - char *primes[] = { + const char *primes[] = { /* 2K large moduli */ "179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586239334100047359817950870678242457666208137217", "32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638099733077152121140120031150424541696791951097529546801429027668869927491725169", From f5876db051ceef346ea1ca793bf1a9b176b7974b Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sun, 10 Dec 2017 09:45:29 +0100 Subject: [PATCH 08/10] fix format --- demo/demo.c | 8 ++++---- etc/pprime.c | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/demo/demo.c b/demo/demo.c index c1fcfcd..d60d559 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -723,14 +723,14 @@ printf("compare no compare!\n"); return EXIT_FAILURE; FGETS(buf, 4095, stdin); mp_read_radix(&a, buf, 64); FGETS(buf, 4095, stdin); - sscanf(buf, "%d", &rr); + sscanf(buf, "%u", &rr); FGETS(buf, 4095, stdin); mp_read_radix(&b, buf, 64); mp_mul_2d(&a, rr, &a); a.sign = b.sign; if (mp_cmp(&a, &b) != MP_EQ) { - printf("mul2d failed, rr == %d\n", rr); + printf("mul2d failed, rr == %u\n", rr); draw(&a); draw(&b); return EXIT_FAILURE; @@ -740,7 +740,7 @@ printf("compare no compare!\n"); return EXIT_FAILURE; FGETS(buf, 4095, stdin); mp_read_radix(&a, buf, 64); FGETS(buf, 4095, stdin); - sscanf(buf, "%d", &rr); + sscanf(buf, "%u", &rr); FGETS(buf, 4095, stdin); mp_read_radix(&b, buf, 64); @@ -750,7 +750,7 @@ printf("compare no compare!\n"); return EXIT_FAILURE; a.sign = b.sign = MP_ZPOS; } if (mp_cmp(&a, &b) != MP_EQ) { - printf("div2d failed, rr == %d\n", rr); + printf("div2d failed, rr == %u\n", rr); draw(&a); draw(&b); return EXIT_FAILURE; diff --git a/etc/pprime.c b/etc/pprime.c index fc2322a..ea77181 100644 --- a/etc/pprime.c +++ b/etc/pprime.c @@ -143,7 +143,7 @@ static void gen_prime(void) } while (x == 0); if (r > 31) { fwrite(&r, 1, sizeof(mp_digit), out); - printf("%9d\r", r); + printf("%9u\r", r); fflush(stdout); } if (r < 31) break; From 0dbea3b69ff9340dbec0c76c9553929a7cc58775 Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sun, 10 Dec 2017 10:19:11 +0100 Subject: [PATCH 09/10] explicit precedence operator with parenthesis --- demo/demo.c | 4 ++-- demo/timing.c | 6 +++--- etc/2kprime.c | 2 +- etc/mersenne.c | 4 ++-- etc/pprime.c | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/demo/demo.c b/demo/demo.c index d60d559..57afbaf 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -746,7 +746,7 @@ printf("compare no compare!\n"); return EXIT_FAILURE; mp_div_2d(&a, rr, &a, &e); a.sign = b.sign; - if (a.used == b.used && a.used == 0) { + if ((a.used == b.used) && (a.used == 0)) { a.sign = b.sign = MP_ZPOS; } if (mp_cmp(&a, &b) != MP_EQ) { @@ -847,7 +847,7 @@ printf("compare no compare!\n"); return EXIT_FAILURE; mp_read_radix(&d, buf, 64); mp_div(&a, &b, &e, &f); - if (mp_cmp(&c, &e) != MP_EQ || mp_cmp(&d, &f) != MP_EQ) { + if ((mp_cmp(&c, &e) != MP_EQ) || (mp_cmp(&d, &f) != MP_EQ)) { printf("div %lu %d, %d, failure!\n", div_n, mp_cmp(&c, &e), mp_cmp(&d, &f)); draw(&a); diff --git a/demo/timing.c b/demo/timing.c index e7959f7..9080723 100644 --- a/demo/timing.c +++ b/demo/timing.c @@ -179,7 +179,7 @@ int main(void) TOOM_SQR_CUTOFF = (ix == 2) ? old_toom_s : 9999; log = FOPEN((ix == 0) ? "logs/mult.log" : (ix == 1) ? "logs/mult_kara.log" : "logs/mult_toom.log", "w"); - for (cnt = 4; cnt <= 10240 / DIGIT_BIT; cnt += 2) { + for (cnt = 4; cnt <= (10240 / DIGIT_BIT); cnt += 2) { SLEEP; mp_rand(&a, cnt); mp_rand(&b, cnt); @@ -200,7 +200,7 @@ int main(void) FCLOSE(log); log = FOPEN((ix == 0) ? "logs/sqr.log" : (ix == 1) ? "logs/sqr_kara.log" : "logs/sqr_toom.log", "w"); - for (cnt = 4; cnt <= 10240 / DIGIT_BIT; cnt += 2) { + for (cnt = 4; cnt <= (10240 / DIGIT_BIT); cnt += 2) { SLEEP; mp_rand(&a, cnt); rr = 0; @@ -290,7 +290,7 @@ int main(void) } printf("Exponentiating\t%4d-bit => %9" PRIu64 "/sec, %9" PRIu64 " cycles\n", mp_count_bits(&a), CLK_PER_SEC / tt, tt); - FPRINTF(n < 4 ? logd : (n < 9) ? logc : (n < 16) ? logb : log, + FPRINTF((n < 4) ? logd : (n < 9) ? logc : (n < 16) ? logb : log, "%d %9" PRIu64 "\n", mp_count_bits(&a), tt); } } diff --git a/etc/2kprime.c b/etc/2kprime.c index 47c3b88..e84d499 100644 --- a/etc/2kprime.c +++ b/etc/2kprime.c @@ -32,7 +32,7 @@ top: break; } - if (clock() - t1 > CLOCKS_PER_SEC) { + if ((clock() - t1) > CLOCKS_PER_SEC) { printf("."); fflush(stdout); // sleep((clock() - t1 + CLOCKS_PER_SEC/2)/CLOCKS_PER_SEC); diff --git a/etc/mersenne.c b/etc/mersenne.c index 99babb1..75dd9d9 100644 --- a/etc/mersenne.c +++ b/etc/mersenne.c @@ -32,7 +32,7 @@ static int is_mersenne(long s, int *pp) mp_set(&u, 4); /* for k=1 to s-2 do */ - for (k = 1; k <= s - 2; k++) { + for (k = 1; k <= (s - 2); k++) { /* u = u^2 - 2 mod n */ if ((res = mp_sqr(&u, &u)) != MP_OKAY) { goto LBL_MU; @@ -79,7 +79,7 @@ static long i_sqrt(long x) x2 = x1 - ((x1 * x1) - x) / (2 * x1); } while (x1 != x2); - if (x1 * x1 > x) { + if ((x1 * x1) > x) { --x1; } diff --git a/etc/pprime.c b/etc/pprime.c index ea77181..b4058c2 100644 --- a/etc/pprime.c +++ b/etc/pprime.c @@ -21,7 +21,7 @@ static mp_digit i_sqrt(mp_word x) x2 = x1 - ((x1 * x1) - x) / (2 * x1); } while (x1 != x2); - if (x1 * x1 > x) { + if ((x1 * x1) > x) { --x1; } From 44d14a398d82ba47db9d919c9909c35e5fd624fb Mon Sep 17 00:00:00 2001 From: Francois Perrad Date: Sun, 10 Dec 2017 10:12:09 +0100 Subject: [PATCH 10/10] check fopen --- etc/2kprime.c | 94 ++++++++++++------------ etc/drprime.c | 74 +++++++++---------- etc/pprime.c | 194 +++++++++++++++++++++++++------------------------- 3 files changed, 184 insertions(+), 178 deletions(-) diff --git a/etc/2kprime.c b/etc/2kprime.c index e84d499..f8761fb 100644 --- a/etc/2kprime.c +++ b/etc/2kprime.c @@ -16,63 +16,65 @@ int main(void) mp_init_multi(&q, &p, NULL); out = fopen("2kprime.1", "w"); - for (x = 0; x < (int)(sizeof(sizes) / sizeof(sizes[0])); x++) { + if (out != NULL) { + 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; + mp_2expt(&q, sizes[x]); + mp_add_d(&q, 3, &q); + z = -3; - t1 = clock(); - for (;;) { - mp_sub_d(&q, 4, &q); - z += 4; + 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; + } - 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; + ++sizes[x]; + goto top; } - /* 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; + 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); } - - 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); + fclose(out); } - fclose(out); return 0; } diff --git a/etc/drprime.c b/etc/drprime.c index eb51dcc..42504b9 100644 --- a/etc/drprime.c +++ b/etc/drprime.c @@ -14,48 +14,50 @@ int main(void) mp_init(&b); out = fopen("drprimes.txt", "w"); - for (x = 0; x < (int)(sizeof(sizes)/sizeof(sizes[0])); x++) { + if (out != NULL) { + for (x = 0; x < (int)(sizeof(sizes)/sizeof(sizes[0])); x++) { top: - printf("Seeking a %d-bit safe prime\n", sizes[x] * DIGIT_BIT); - mp_grow(&a, sizes[x]); - mp_zero(&a); - for (y = 1; y < sizes[x]; y++) { - a.dp[y] = MP_MASK; - } + printf("Seeking a %d-bit safe prime\n", sizes[x] * DIGIT_BIT); + mp_grow(&a, sizes[x]); + mp_zero(&a); + for (y = 1; y < sizes[x]; y++) { + a.dp[y] = MP_MASK; + } - /* make a DR modulus */ - a.dp[0] = -1; - a.used = sizes[x]; + /* make a DR modulus */ + a.dp[0] = -1; + a.used = sizes[x]; - /* now loop */ - res = 0; - for (;;) { - a.dp[0] += 4; - if (a.dp[0] >= MP_MASK) break; - mp_prime_is_prime(&a, 1, &res); - if (res == 0) continue; - printf("."); - fflush(stdout); - mp_sub_d(&a, 1, &b); - mp_div_2(&b, &b); - mp_prime_is_prime(&b, 3, &res); - if (res == 0) continue; - mp_prime_is_prime(&a, 3, &res); - if (res == 1) break; - } + /* now loop */ + res = 0; + for (;;) { + a.dp[0] += 4; + if (a.dp[0] >= MP_MASK) break; + mp_prime_is_prime(&a, 1, &res); + if (res == 0) continue; + printf("."); + fflush(stdout); + mp_sub_d(&a, 1, &b); + mp_div_2(&b, &b); + mp_prime_is_prime(&b, 3, &res); + if (res == 0) continue; + mp_prime_is_prime(&a, 3, &res); + if (res == 1) break; + } - if (res != 1) { - printf("Error not DR modulus\n"); - sizes[x] += 1; - goto top; - } else { - mp_toradix(&a, buf, 10); - printf("\n\np == %s\n\n", buf); - fprintf(out, "%d-bit prime:\np == %s\n\n", mp_count_bits(&a), buf); - fflush(out); + if (res != 1) { + printf("Error not DR modulus\n"); + sizes[x] += 1; + goto top; + } else { + mp_toradix(&a, buf, 10); + printf("\n\np == %s\n\n", buf); + fprintf(out, "%d-bit prime:\np == %s\n\n", mp_count_bits(&a), buf); + fflush(out); + } } + fclose(out); } - fclose(out); mp_clear(&a); mp_clear(&b); diff --git a/etc/pprime.c b/etc/pprime.c index b4058c2..a0f9ba2 100644 --- a/etc/pprime.c +++ b/etc/pprime.c @@ -36,8 +36,9 @@ static void gen_prime(void) FILE *out; out = fopen("pprime.dat", "wb"); + if (out != NULL) { - /* write first set of primes */ + /* write first set of primes */ /* *INDENT-OFF* */ r = 3; fwrite(&r, 1, sizeof(mp_digit), out); r = 5; fwrite(&r, 1, sizeof(mp_digit), out); @@ -51,105 +52,106 @@ static void gen_prime(void) r = 31; fwrite(&r, 1, sizeof(mp_digit), out); /* *INDENT-ON* */ - /* get square root, since if 'r' is composite its factors must be < than this */ - y = i_sqrt(r); - next = (y + 1) * (y + 1); + /* get square root, since if 'r' is composite its factors must be < than this */ + y = i_sqrt(r); + next = (y + 1) * (y + 1); - for (;;) { - do { - r += 2; /* next candidate */ - r &= MP_MASK; + for (;;) { + do { + r += 2; /* next candidate */ + r &= MP_MASK; + if (r < 31) break; + + /* update sqrt ? */ + if (next <= r) { + ++y; + next = (y + 1) * (y + 1); + } + + /* loop if divisible by 3,5,7,11,13,17,19,23,29 */ + if ((r % 3) == 0) { + x = 0; + continue; + } + if ((r % 5) == 0) { + x = 0; + continue; + } + if ((r % 7) == 0) { + x = 0; + continue; + } + if ((r % 11) == 0) { + x = 0; + continue; + } + if ((r % 13) == 0) { + x = 0; + continue; + } + if ((r % 17) == 0) { + x = 0; + continue; + } + if ((r % 19) == 0) { + x = 0; + continue; + } + if ((r % 23) == 0) { + x = 0; + continue; + } + if ((r % 29) == 0) { + x = 0; + continue; + } + + /* now check if r is divisible by x + k={1,7,11,13,17,19,23,29} */ + for (x = 30; x <= y; x += 30) { + if ((r % (x + 1)) == 0) { + x = 0; + break; + } + if ((r % (x + 7)) == 0) { + x = 0; + break; + } + if ((r % (x + 11)) == 0) { + x = 0; + break; + } + if ((r % (x + 13)) == 0) { + x = 0; + break; + } + if ((r % (x + 17)) == 0) { + x = 0; + break; + } + if ((r % (x + 19)) == 0) { + x = 0; + break; + } + if ((r % (x + 23)) == 0) { + x = 0; + break; + } + if ((r % (x + 29)) == 0) { + x = 0; + break; + } + } + } while (x == 0); + if (r > 31) { + fwrite(&r, 1, sizeof(mp_digit), out); + printf("%9u\r", r); + fflush(stdout); + } if (r < 31) break; - - /* update sqrt ? */ - if (next <= r) { - ++y; - next = (y + 1) * (y + 1); - } - - /* loop if divisible by 3,5,7,11,13,17,19,23,29 */ - if ((r % 3) == 0) { - x = 0; - continue; - } - if ((r % 5) == 0) { - x = 0; - continue; - } - if ((r % 7) == 0) { - x = 0; - continue; - } - if ((r % 11) == 0) { - x = 0; - continue; - } - if ((r % 13) == 0) { - x = 0; - continue; - } - if ((r % 17) == 0) { - x = 0; - continue; - } - if ((r % 19) == 0) { - x = 0; - continue; - } - if ((r % 23) == 0) { - x = 0; - continue; - } - if ((r % 29) == 0) { - x = 0; - continue; - } - - /* now check if r is divisible by x + k={1,7,11,13,17,19,23,29} */ - for (x = 30; x <= y; x += 30) { - if ((r % (x + 1)) == 0) { - x = 0; - break; - } - if ((r % (x + 7)) == 0) { - x = 0; - break; - } - if ((r % (x + 11)) == 0) { - x = 0; - break; - } - if ((r % (x + 13)) == 0) { - x = 0; - break; - } - if ((r % (x + 17)) == 0) { - x = 0; - break; - } - if ((r % (x + 19)) == 0) { - x = 0; - break; - } - if ((r % (x + 23)) == 0) { - x = 0; - break; - } - if ((r % (x + 29)) == 0) { - x = 0; - break; - } - } - } while (x == 0); - if (r > 31) { - fwrite(&r, 1, sizeof(mp_digit), out); - printf("%9u\r", r); - fflush(stdout); } - if (r < 31) break; - } - fclose(out); + fclose(out); + } } static void load_tab(void)