From eed6765fe99a3e239152ae58fb7435be6221cc15 Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Sat, 12 Jul 2003 14:31:43 +0000 Subject: [PATCH] added libtommath-0.23 --- bn.pdf | Bin 232773 -> 233136 bytes bn.tex | 2 +- bn_fast_mp_montgomery_reduce.c | 5 +- bn_fast_s_mp_mul_digs.c | 13 +- bn_fast_s_mp_mul_high_digs.c | 9 +- bn_fast_s_mp_sqr.c | 4 +- bn_mp_clear.c | 3 +- bn_mp_div_d.c | 44 ++++- bn_mp_exptmod_fast.c | 1 - bn_mp_montgomery_reduce.c | 4 +- bn_mp_mul_d.c | 2 +- bn_mp_prime_fermat.c | 5 + bn_mp_prime_is_prime.c | 6 +- bn_mp_prime_miller_rabin.c | 12 +- bn_mp_prime_next_prime.c | 144 +++++++++++++++-- bn_mp_read_unsigned_bin.c | 6 +- bn_mp_to_unsigned_bin.c | 6 +- bn_s_mp_mul_digs.c | 2 +- bn_s_mp_mul_high_digs.c | 2 +- bn_s_mp_sqr.c | 8 +- changes.txt | 18 +++ demo/demo.c | 28 +++- etc/2kprime.1 | 3 +- etc/drprime.c | 24 +-- etc/{drprimes.1 => drprimes.28} | 2 + etc/drprimes.txt | 17 +- logs/add.log | 16 ++ logs/sqr.log | 17 -- logs/sub.log | 32 ++-- makefile | 2 +- makefile.msvc | 4 +- poster.pdf | Bin 40790 -> 40822 bytes poster.tex | 72 ++++----- pre_gen/mpi.c | 276 ++++++++++++++++++++++++++------ test.c | 46 ------ tommath.h | 8 +- 36 files changed, 600 insertions(+), 243 deletions(-) rename etc/{drprimes.1 => drprimes.28} (99%) delete mode 100644 test.c diff --git a/bn.pdf b/bn.pdf index a0020996c9115e990ce0a832c808b79de031ab1a..8eac8d8c82285bd71686bbfb6afdeeea7480aba6 100644 GIT binary patch delta 80301 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
RD-5MPie;`O?>DgWhO6 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�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 delta 79952 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

e>p^Da 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 iy++) { - *_W++ += ((mp_word) mu) * ((mp_word) * tmpn++); + *_W++ += ((mp_word)mu) * ((mp_word)*tmpn++); } } @@ -101,7 +101,6 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } - { register mp_digit *tmpx; register mp_word *_W, *_W1; diff --git a/bn_fast_s_mp_mul_digs.c b/bn_fast_s_mp_mul_digs.c index d09489d..bca2a71 100644 --- a/bn_fast_s_mp_mul_digs.c +++ b/bn_fast_s_mp_mul_digs.c @@ -81,7 +81,7 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) pb = MIN (b->used, digs - ix); for (iy = 0; iy < pb; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } @@ -104,20 +104,27 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * from N*(N+N*c)==N**2 + c*N**2 to N**2 + N*c where c is the * cost of the shifting. On very small numbers this is slower * but on most cryptographic size numbers it is faster. + * + * In this particular implementation we feed the carries from + * behind which means when the loop terminates we still have one + * last digit to copy */ tmpc = c->dp; for (ix = 1; ix < digs; ix++) { + /* forward the carry from the previous temp */ W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* now extract the previous digit [below the carry] */ *tmpc++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } + /* fetch the last digit */ *tmpc++ = (mp_digit) (W[digs - 1] & ((mp_word) MP_MASK)); - /* clear unused */ + /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpc++ = 0; } } - mp_clamp (c); return MP_OKAY; } diff --git a/bn_fast_s_mp_mul_high_digs.c b/bn_fast_s_mp_mul_high_digs.c index 1cc1639..e0e9281 100644 --- a/bn_fast_s_mp_mul_high_digs.c +++ b/bn_fast_s_mp_mul_high_digs.c @@ -71,7 +71,7 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* compute column products for digits above the minimum */ for (; iy < pb; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word) tmpx) * ((mp_word)*tmpy++); } } } @@ -80,12 +80,15 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) oldused = c->used; c->used = newused; - /* now convert the array W downto what we need */ + /* now convert the array W downto what we need + * + * See comments in bn_fast_s_mp_mul_digs.c + */ for (ix = digs + 1; ix < newused; ix++) { W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); c->dp[ix - 1] = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } - c->dp[(pa + pb + 1) - 1] = (mp_digit) (W[(pa + pb + 1) - 1] & ((mp_word) MP_MASK)); + c->dp[newused - 1] = (mp_digit) (W[newused - 1] & ((mp_word) MP_MASK)); for (; ix < oldused; ix++) { c->dp[ix] = 0; diff --git a/bn_fast_s_mp_sqr.c b/bn_fast_s_mp_sqr.c index 74179ee..2c01cd0 100644 --- a/bn_fast_s_mp_sqr.c +++ b/bn_fast_s_mp_sqr.c @@ -68,7 +68,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) * for a particular column only once which means that * there is no need todo a double precision addition */ - W2[ix + ix] = ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + W2[ix + ix] = ((mp_word)a->dp[ix]) * ((mp_word)a->dp[ix]); { register mp_digit tmpx, *tmpy; @@ -86,7 +86,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* inner products */ for (iy = ix + 1; iy < pa; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } } diff --git a/bn_mp_clear.c b/bn_mp_clear.c index 8273ac9..bc31c42 100644 --- a/bn_mp_clear.c +++ b/bn_mp_clear.c @@ -19,7 +19,6 @@ void mp_clear (mp_int * a) { if (a->dp != NULL) { - /* first zero the digits */ memset (a->dp, 0, sizeof (mp_digit) * a->used); @@ -27,7 +26,7 @@ mp_clear (mp_int * a) free (a->dp); /* reset members to make debugging easier */ - a->dp = NULL; + a->dp = NULL; a->alloc = a->used = 0; } } diff --git a/bn_mp_div_d.c b/bn_mp_div_d.c index c721e6e..0f683a5 100644 --- a/bn_mp_div_d.c +++ b/bn_mp_div_d.c @@ -14,6 +14,19 @@ */ #include +static int s_is_power_of_two(mp_digit b, int *p) +{ + int x; + + for (x = 1; x < DIGIT_BIT; x++) { + if (b == (((mp_digit)1)<dp[0] & ((1<used)) != MP_OKAY) { return res; } diff --git a/bn_mp_exptmod_fast.c b/bn_mp_exptmod_fast.c index 567d614..8a5e565 100644 --- a/bn_mp_exptmod_fast.c +++ b/bn_mp_exptmod_fast.c @@ -82,7 +82,6 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) } } - /* determine and setup reduction code */ if (redmode == 0) { /* now setup montgomery */ diff --git a/bn_mp_montgomery_reduce.c b/bn_mp_montgomery_reduce.c index e422cf3..99a8a55 100644 --- a/bn_mp_montgomery_reduce.c +++ b/bn_mp_montgomery_reduce.c @@ -44,7 +44,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) for (ix = 0; ix < n->used; ix++) { /* mu = ai * m' mod b */ - mu = (x->dp[ix] * rho) & MP_MASK; + mu = ((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK; /* a = a + mu * m * b**i */ { @@ -61,7 +61,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Multiply and add in place */ for (iy = 0; iy < n->used; iy++) { - r = ((mp_word) mu) * ((mp_word) * tmpn++) + + r = ((mp_word)mu) * ((mp_word)*tmpn++) + ((mp_word) u) + ((mp_word) * tmpx); u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); diff --git a/bn_mp_mul_d.c b/bn_mp_mul_d.c index 1c22208..8379035 100644 --- a/bn_mp_mul_d.c +++ b/bn_mp_mul_d.c @@ -50,7 +50,7 @@ mp_mul_d (mp_int * a, mp_digit b, mp_int * c) u = 0; for (ix = 0; ix < pa; ix++) { /* compute product and carry sum for this term */ - r = ((mp_word) u) + ((mp_word) * tmpa++) * ((mp_word) b); + r = ((mp_word) u) + ((mp_word)*tmpa++) * ((mp_word)b); /* mask off higher bits to get a single digit */ *tmpc++ = (mp_digit) (r & ((mp_word) MP_MASK)); diff --git a/bn_mp_prime_fermat.c b/bn_mp_prime_fermat.c index 202f45a..b0e9746 100644 --- a/bn_mp_prime_fermat.c +++ b/bn_mp_prime_fermat.c @@ -31,6 +31,11 @@ mp_prime_fermat (mp_int * a, mp_int * b, int *result) /* default to fail */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* init t */ if ((err = mp_init (&t)) != MP_OKAY) { return err; diff --git a/bn_mp_prime_is_prime.c b/bn_mp_prime_is_prime.c index 1a782b3..f9cece9 100644 --- a/bn_mp_prime_is_prime.c +++ b/bn_mp_prime_is_prime.c @@ -17,7 +17,7 @@ /* performs a variable number of rounds of Miller-Rabin * * Probability of error after t rounds is no more than - * (1/4)^t when 1 <= t <= 256 + * (1/4)^t when 1 <= t <= PRIME_SIZE * * Sets result to 1 if probably prime, 0 otherwise */ @@ -31,7 +31,7 @@ mp_prime_is_prime (mp_int * a, int t, int *result) *result = 0; /* valid value of t? */ - if (t < 1 || t > PRIME_SIZE) { + if (t <= 0 || t > PRIME_SIZE) { return MP_VAL; } @@ -47,6 +47,8 @@ mp_prime_is_prime (mp_int * a, int t, int *result) if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { return err; } + + /* return if it was trivially divisible */ if (res == 1) { return MP_OKAY; } diff --git a/bn_mp_prime_miller_rabin.c b/bn_mp_prime_miller_rabin.c index 4a96674..f68ba75 100644 --- a/bn_mp_prime_miller_rabin.c +++ b/bn_mp_prime_miller_rabin.c @@ -30,6 +30,11 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) /* default */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* get n1 = a - 1 */ if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { return err; @@ -42,8 +47,13 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { goto __N1; } - + + /* count the number of least significant bits + * which are zero + */ s = mp_cnt_lsb(&r); + + /* now divide n - 1 by 2^s */ if ((err = mp_div_2d (&r, s, &r, NULL)) != MP_OKAY) { goto __R; } diff --git a/bn_mp_prime_next_prime.c b/bn_mp_prime_next_prime.c index cfebbe5..0dde42a 100644 --- a/bn_mp_prime_next_prime.c +++ b/bn_mp_prime_next_prime.c @@ -16,39 +16,151 @@ /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ -int mp_prime_next_prime(mp_int *a, int t) +int mp_prime_next_prime(mp_int *a, int t, int bbs_style) { - int err, res; + int err, res, x, y; + mp_digit res_tab[PRIME_SIZE], step, kstep; + mp_int b; - if (mp_iseven(a) == 1) { - /* force odd */ - if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { - return err; + /* ensure t is valid */ + if (t <= 0 || t > PRIME_SIZE) { + return MP_VAL; + } + + /* force positive */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + } + + /* simple algo if a is less than the largest prime in the table */ + if (mp_cmp_d(a, __prime_tab[PRIME_SIZE-1]) == MP_LT) { + /* find which prime it is bigger than */ + for (x = PRIME_SIZE - 2; x >= 0; x--) { + if (mp_cmp_d(a, __prime_tab[x]) != MP_LT) { + if (bbs_style == 1) { + /* ok we found a prime smaller or + * equal [so the next is larger] + * + * however, the prime must be + * congruent to 3 mod 4 + */ + if ((__prime_tab[x + 1] & 3) != 3) { + /* scan upwards for a prime congruent to 3 mod 4 */ + for (y = x + 1; y < PRIME_SIZE; y++) { + if ((__prime_tab[y] & 3) == 3) { + mp_set(a, __prime_tab[y]); + return MP_OKAY; + } + } + } + } else { + mp_set(a, __prime_tab[x + 1]); + return MP_OKAY; + } + } + } + /* at this point a maybe 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + mp_set(a, 2); + return MP_OKAY; + } + /* fall through to the sieve */ + } + + /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ + if (bbs_style == 1) { + kstep = 4; + } else { + kstep = 2; + } + + /* at this point we will use a combination of a sieve and Miller-Rabin */ + + if (bbs_style == 1) { + /* if a mod 4 != 3 subtract the correct value to make it so */ + if ((a->dp[0] & 3) != 3) { + if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { return err; }; } } else { - /* force to next odd number */ - if ((err = mp_add_d(a, 2, a)) != MP_OKAY) { + if (mp_iseven(a) == 1) { + /* force odd */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + return err; + } + } + } + + /* generate the restable */ + for (x = 1; x < PRIME_SIZE; x++) { + if ((err = mp_mod_d(a, __prime_tab[x], res_tab + x)) != MP_OKAY) { return err; } } + /* init temp used for Miller-Rabin Testing */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + for (;;) { + /* skip to the next non-trivially divisible candidate */ + step = 0; + do { + /* y == 1 if any residue was zero [e.g. cannot be prime] */ + y = 0; + + /* increase step to next odd */ + step += kstep; + + /* compute the new residue without using division */ + for (x = 1; x < PRIME_SIZE; x++) { + /* add the step to each residue */ + res_tab[x] += kstep; + + /* subtract the modulus [instead of using division] */ + if (res_tab[x] >= __prime_tab[x]) { + res_tab[x] -= __prime_tab[x]; + } + + /* set flag if zero */ + if (res_tab[x] == 0) { + y = 1; + } + } + } while (y == 1 && step < ((((mp_digit)1)<= ((((mp_digit)1)<dp[0] |= *b++; a->used += 1; - } else { +#else a->dp[0] = (*b & MP_MASK); a->dp[1] |= ((*b++ >> 7U) & 1); a->used += 2; - } +#endif } mp_clamp (a); return MP_OKAY; diff --git a/bn_mp_to_unsigned_bin.c b/bn_mp_to_unsigned_bin.c index 8f5eeb7..54e0739 100644 --- a/bn_mp_to_unsigned_bin.c +++ b/bn_mp_to_unsigned_bin.c @@ -27,11 +27,11 @@ mp_to_unsigned_bin (mp_int * a, unsigned char *b) x = 0; while (mp_iszero (&t) == 0) { - if (DIGIT_BIT != 7) { +#ifndef MP_8BIT b[x++] = (unsigned char) (t.dp[0] & 255); - } else { +#else b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); - } +#endif if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { mp_clear (&t); return res; diff --git a/bn_s_mp_mul_digs.c b/bn_s_mp_mul_digs.c index c126a0c..cb3dbd7 100644 --- a/bn_s_mp_mul_digs.c +++ b/bn_s_mp_mul_digs.c @@ -62,7 +62,7 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = 0; iy < pb; iy++) { /* compute the column as a mp_word */ r = ((mp_word) *tmpt) + - ((mp_word) tmpx) * ((mp_word) * tmpy++) + + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* the new column is the lower part of the result */ diff --git a/bn_s_mp_mul_high_digs.c b/bn_s_mp_mul_high_digs.c index bbe7378..a0c2c0e 100644 --- a/bn_s_mp_mul_high_digs.c +++ b/bn_s_mp_mul_high_digs.c @@ -55,7 +55,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = digs - ix; iy < pb; iy++) { /* calculate the double precision result */ - r = ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + ((mp_word) u); + r = ((mp_word) * tmpt) + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* get the lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); diff --git a/bn_s_mp_sqr.c b/bn_s_mp_sqr.c index bd4bc51..d45a00e 100644 --- a/bn_s_mp_sqr.c +++ b/bn_s_mp_sqr.c @@ -32,8 +32,8 @@ s_mp_sqr (mp_int * a, mp_int * b) for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ - r = ((mp_word) t.dp[2*ix]) + - ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + r = ((mp_word) t.dp[2*ix]) + + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); /* store lower part in result */ t.dp[2*ix] = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -49,12 +49,12 @@ s_mp_sqr (mp_int * a, mp_int * b) for (iy = ix + 1; iy < pa; iy++) { /* first calculate the product */ - r = ((mp_word) tmpx) * ((mp_word) a->dp[iy]); + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); /* now calculate the double precision result, note we use * addition instead of *2 since it's easier to optimize */ - r = ((mp_word) * tmpt) + r + r + ((mp_word) u); + r = ((mp_word) *tmpt) + r + r + ((mp_word) u); /* store lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); diff --git a/changes.txt b/changes.txt index 2dc77c8..be4869f 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,21 @@ +July 12th, 2003 +v0.23 -- Optimized mp_prime_next_prime() to not use mp_mod [via is_divisible()] in each + iteration. Instead now a smaller table is kept of the residues which can be updated + without division. + -- Fixed a bug in next_prime() where an input of zero would be treated as odd and + have two added to it [to move to the next odd]. + -- fixed a bug in prime_fermat() and prime_miller_rabin() which allowed the base + to be negative, zero or one. Normally the test is only valid if the base is + greater than one. + -- changed the next_prime() prototype to accept a new parameter "bbs_style" which + will find the next prime congruent to 3 mod 4. The default [bbs_style==0] will + make primes which are either congruent to 1 or 3 mod 4. + -- fixed mp_read_unsigned_bin() so that it doesn't include both code for + the case DIGIT_BIT < 8 and >= 8 + -- optimized div_d() to easy out on division by 1 [or if a == 0] and use + logical shifts if the divisor is a power of two. + -- the default DIGIT_BIT type was not int for non-default builds. Fixed. + July 2nd, 2003 v0.22 -- Fixed up mp_invmod so the result is properly in range now [was always congruent to the inverse...] -- Fixed up s_mp_exptmod and mp_exptmod_fast so the lower half of the pre-computed table isn't allocated diff --git a/demo/demo.c b/demo/demo.c index a60d112..e7b3fdb 100644 --- a/demo/demo.c +++ b/demo/demo.c @@ -65,6 +65,31 @@ int main(void) srand(time(NULL)); +#if 0 + for (;;) { + fgets(buf, sizeof(buf), stdin); + mp_read_radix(&a, buf, 10); + mp_prime_next_prime(&a, 5, 1); + mp_toradix(&a, buf, 10); + printf("%s, %lu\n", buf, a.dp[0] & 3); + } +#endif + +#if 0 +{ + mp_word aa, bb; + + for (;;) { + aa = abs(rand()) & MP_MASK; + bb = abs(rand()) & MP_MASK; + if (MULT(aa,bb) != (aa*bb)) { + printf("%llu * %llu == %llu or %llu?\n", aa, bb, (ulong64)MULT(aa,bb), (ulong64)(aa*bb)); + return 0; + } + } +} +#endif + #if 0 /* test mp_cnt_lsb */ mp_set(&a, 1); @@ -122,7 +147,6 @@ int main(void) /* test the DR reduction */ #if 0 - for (cnt = 2; cnt < 32; cnt++) { printf("%d digit modulus\n", cnt); mp_grow(&a, cnt); @@ -175,8 +199,6 @@ int main(void) fprintf(log, "%d %9llu\n", cnt*DIGIT_BIT, (((unsigned long long)rr)*CLOCKS_PER_SEC)/tt); } fclose(log); - - return 0; log = fopen("logs/sub.log", "w"); for (cnt = 8; cnt <= 128; cnt += 8) { diff --git a/etc/2kprime.1 b/etc/2kprime.1 index c41ded1..e1384db 100644 --- a/etc/2kprime.1 +++ b/etc/2kprime.1 @@ -1,2 +1 @@ -256-bits (k = 36113) = 115792089237316195423570985008687907853269984665640564039457584007913129603823 -512-bits (k = 38117) = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006045979 +259-bits (k = 17745) = 926336713898529563388567880069503262826159877325124512315660672063305037101743 diff --git a/etc/drprime.c b/etc/drprime.c index 157e358..2b561e3 100644 --- a/etc/drprime.c +++ b/etc/drprime.c @@ -1,7 +1,7 @@ /* Makes safe primes of a DR nature */ #include -const int sizes[] = { 8, 19, 28, 37, 55, 74, 110, 147 }; +int sizes[] = { 256/DIGIT_BIT, 512/DIGIT_BIT, 768/DIGIT_BIT, 1024/DIGIT_BIT, 2048/DIGIT_BIT, 4096/DIGIT_BIT }; int main(void) { int res, x, y; @@ -14,6 +14,7 @@ int main(void) out = fopen("drprimes.txt", "w"); 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); @@ -22,21 +23,26 @@ int main(void) } /* make a DR modulus */ - a.dp[0] = 1; + a.dp[0] = -1; a.used = sizes[x]; /* now loop */ - do { - fflush(stdout); - mp_prime_next_prime(&a, 3); - printf("."); + 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); - } while (res == 0); + if (res == 0) continue; + mp_prime_is_prime(&a, 3, &res); + if (res == 1) break; + } - if (mp_dr_is_modulus(&a) != 1) { - printf("Error not DR modulus\n"); + 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); diff --git a/etc/drprimes.1 b/etc/drprimes.28 similarity index 99% rename from etc/drprimes.1 rename to etc/drprimes.28 index e7cc366..9d438ad 100644 --- a/etc/drprimes.1 +++ b/etc/drprimes.28 @@ -1,3 +1,5 @@ +DR safe primes for 28-bit digits. + 224-bit prime: p == 26959946667150639794667015087019630673637144422540572481103341844143 diff --git a/etc/drprimes.txt b/etc/drprimes.txt index 6593cd5..717420d 100644 --- a/etc/drprimes.txt +++ b/etc/drprimes.txt @@ -1,6 +1,15 @@ -224-bit prime: -p == 26959946667150639794667015087019630673637144422540572481103341844143 +300-bit prime: +p == 2037035976334486086268445688409378161051468393665936250636140449354381299763336706183393387 -532-bit prime: -p == 14059105607947488696282932836518693308967803494693489478439861164411992439598399594747002144074658928593502845729752797260025831423419686528151609940203368691747 +510-bit prime: +p == 3351951982485649274893506249551461531869841455148098344430890360930441007518386744200468574541725856922507964546621512713438470702986642486608412251494847 + +765-bit prime: +p == 194064761537588616893622436057812819407110752139587076392381504753256369085797110791359801103580809743810966337141384150771447505514351798930535909380147642400556872002606238193783160703949805603157874899214558593861605856727005843 + +1740-bit prime: +p == 61971563797913992479098926650774597592238975917324828616370329001490282756182680310375299496755876376552390992409906202402580445340335946188208371182877207703039791403230793200138374588682414508868522097839706723444887189794752005280474068640895359332705297533442094790319040758184131464298255306336601284054032615054089107503261218395204931877449590906016855549287497608058070532126514935495184332288660623518513755499687752752528983258754107553298994358814410594621086881204713587661301862918471291451469190214535690028223 + +2145-bit prime: +p == 5120834017984591518147028606005386392991070803233539296225079797126347381640561714282620018633786528684625023495254338414266418034876748837569635527008462887513799703364491256252208677097644781218029521545625387720450034199300257983090290650191518075514440227307582827991892955933645635564359934476985058395497772801264225688705417270604479898255105628816161764712152286804906915652283101897505006786990112535065979412882966109410722156057838063961993103028819293481078313367826492291911499907219457764211473530756735049840415233164976184864760203928986194694093688479274544786530457604655777313274555786861719645260099496565700321073395329400403 diff --git a/logs/add.log b/logs/add.log index e69de29..1d02326 100644 --- a/logs/add.log +++ b/logs/add.log @@ -0,0 +1,16 @@ +224 12444616 +448 10412040 +672 8825112 +896 7519080 +1120 6428432 +1344 5794784 +1568 5242952 +1792 4737008 +2016 4434104 +2240 4132912 +2464 3827752 +2688 3589672 +2912 3350176 +3136 3180208 +3360 3014160 +3584 2847672 diff --git a/logs/sqr.log b/logs/sqr.log index 2fb2e98..e69de29 100644 --- a/logs/sqr.log +++ b/logs/sqr.log @@ -1,17 +0,0 @@ -896 415472 -1344 223736 -1792 141232 -2240 97624 -2688 71400 -3136 54800 -3584 16904 -4032 13528 -4480 10968 -4928 9128 -5376 7784 -5824 6672 -6272 5760 -6720 5056 -7168 4440 -7616 3952 -8064 3512 diff --git a/logs/sub.log b/logs/sub.log index 91c7d65..272c098 100644 --- a/logs/sub.log +++ b/logs/sub.log @@ -1,16 +1,16 @@ -224 9728504 -448 8573648 -672 7488096 -896 6714064 -1120 5950472 -1344 5457400 -1568 5038896 -1792 4683632 -2016 4384656 -2240 4105976 -2464 3871608 -2688 3650680 -2912 3463552 -3136 3290016 -3360 3135272 -3584 2993848 +224 10876088 +448 9103552 +672 7823536 +896 6724960 +1120 5993496 +1344 5278984 +1568 4947736 +1792 4478384 +2016 4108840 +2240 3838696 +2464 3604128 +2688 3402192 +2912 3166568 +3136 3090672 +3360 2946720 +3584 2781288 diff --git a/makefile b/makefile index ddfb64c..5ff6957 100644 --- a/makefile +++ b/makefile @@ -1,6 +1,6 @@ CFLAGS += -I./ -Wall -W -Wshadow -O3 -fomit-frame-pointer -funroll-loops -VERSION=0.22 +VERSION=0.23 default: libtommath.a diff --git a/makefile.msvc b/makefile.msvc index 619e2f0..0af7c89 100644 --- a/makefile.msvc +++ b/makefile.msvc @@ -2,7 +2,7 @@ # #Tom St Denis -CFLAGS = /I. /Ox /DWIN32 /W3 /WX +CFLAGS = /I. /Ox /DWIN32 /W3 default: library @@ -29,7 +29,5 @@ bn_mp_reduce_2k.obj bn_mp_reduce_is_2k.obj bn_mp_reduce_2k_setup.obj \ bn_mp_radix_smap.obj bn_mp_read_radix.obj bn_mp_toradix.obj bn_mp_radix_size.obj \ bn_mp_fread.obj bn_mp_fwrite.obj bn_mp_cnt_lsb.obj - - library: $(OBJECTS) lib /out:tommath.lib $(OBJECTS) diff --git a/poster.pdf b/poster.pdf index a37d2db402fbf3fbf5a474436d6e118c11070f6e..3d3377d3ae0ec373f15ea4f4256bab9ef25e6c43 100644 GIT binary patch delta 28607 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 ZVEqTkU;dM!^JU<<*$}9xB$cHQ{uhReSTWF(14 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 T<0-Qx;8?lgDJeze#o+%Jsp0J( diff --git a/poster.tex b/poster.tex index 83ff45f..64af993 100644 --- a/poster.tex +++ b/poster.tex @@ -1,36 +1,36 @@ -\documentclass[landscape,11pt]{article} -\usepackage{amsmath, amssymb} -\usepackage{hyperref} -\begin{document} - -\hspace*{-3in} -\begin{tabular}{llllll} -$c = a + b$ & {\tt mp\_add(\&a, \&b, \&c)} & $b = 2a$ & {\tt mp\_mul\_2(\&a, \&b)} & \\ -$c = a - b$ & {\tt mp\_sub(\&a, \&b, \&c)} & $b = a/2$ & {\tt mp\_div\_2(\&a, \&b)} & \\ -$c = ab $ & {\tt mp\_mul(\&a, \&b, \&c)} & $c = 2^ba$ & {\tt mp\_mul\_2d(\&a, b, \&c)} \\ -$b = a^2 $ & {\tt mp\_sqr(\&a, \&b)} & $c = a/2^b, d = a \mod 2^b$ & {\tt mp\_div\_2d(\&a, b, \&c, \&d)} \\ -$c = \lfloor a/b \rfloor, d = a \mod b$ & {\tt mp\_div(\&a, \&b, \&c, \&d)} & $c = a \mod 2^b $ & {\tt mp\_mod\_2d(\&a, b, \&c)} \\ - && \\ -$a = b $ & {\tt mp\_set\_int(\&a, b)} & $c = a \vee b$ & {\tt mp\_or(\&a, \&b, \&c)} \\ -$b = a $ & {\tt mp\_copy(\&a, \&b)} & $c = a \wedge b$ & {\tt mp\_and(\&a, \&b, \&c)} \\ - && $c = a \oplus b$ & {\tt mp\_xor(\&a, \&b, \&c)} \\ - & \\ -$b = -a $ & {\tt mp\_neg(\&a, \&b)} & $d = a + b \mod c$ & {\tt mp\_addmod(\&a, \&b, \&c, \&d)} \\ -$b = |a| $ & {\tt mp\_abs(\&a, \&b)} & $d = a - b \mod c$ & {\tt mp\_submod(\&a, \&b, \&c, \&d)} \\ - && $d = ab \mod c$ & {\tt mp\_mulmod(\&a, \&b, \&c, \&d)} \\ -Compare $a$ and $b$ & {\tt mp\_cmp(\&a, \&b)} & $c = a^2 \mod b$ & {\tt mp\_sqrmod(\&a, \&b, \&c)} \\ -Is Zero? & {\tt mp\_iszero(\&a)} & $c = a^{-1} \mod b$ & {\tt mp\_invmod(\&a, \&b, \&c)} \\ -Is Even? & {\tt mp\_iseven(\&a)} & $d = a^b \mod c$ & {\tt mp\_exptmod(\&a, \&b, \&c, \&d)} \\ -Is Odd ? & {\tt mp\_isodd(\&a)} \\ -&\\ -$\vert \vert a \vert \vert$ & {\tt mp\_unsigned\_bin\_size(\&a)} & $res$ = 1 if $a$ prime to $t$ rounds? & {\tt mp\_prime\_is\_prime(\&a, t, \&res)} \\ -$buf \leftarrow a$ & {\tt mp\_to\_unsigned\_bin(\&a, buf)} & Next prime after $a$ to $t$ rounds. & {\tt mp\_prime\_next\_prime(\&a, t)} \\ -$a \leftarrow buf[0..len-1]$ & {\tt mp\_read\_unsigned\_bin(\&a, buf, len)} \\ -&\\ -$b = \sqrt{a}$ & {\tt mp\_sqrt(\&a, \&b)} & $c = \mbox{gcd}(a, b)$ & {\tt mp\_gcd(\&a, \&b, \&c)} \\ -$c = a^{1/b}$ & {\tt mp\_n\_root(\&a, b, \&c)} & $c = \mbox{lcm}(a, b)$ & {\tt mp\_lcm(\&a, \&b, \&c)} \\ -&\\ -Greater Than & MP\_GT & Equal To & MP\_EQ \\ -Less Than & MP\_LT & Bits per digit & DIGIT\_BIT \\ -\end{tabular} -\end{document} \ No newline at end of file +\documentclass[landscape,11pt]{article} +\usepackage{amsmath, amssymb} +\usepackage{hyperref} +\begin{document} + +\hspace*{-3in} +\begin{tabular}{llllll} +$c = a + b$ & {\tt mp\_add(\&a, \&b, \&c)} & $b = 2a$ & {\tt mp\_mul\_2(\&a, \&b)} & \\ +$c = a - b$ & {\tt mp\_sub(\&a, \&b, \&c)} & $b = a/2$ & {\tt mp\_div\_2(\&a, \&b)} & \\ +$c = ab $ & {\tt mp\_mul(\&a, \&b, \&c)} & $c = 2^ba$ & {\tt mp\_mul\_2d(\&a, b, \&c)} \\ +$b = a^2 $ & {\tt mp\_sqr(\&a, \&b)} & $c = a/2^b, d = a \mod 2^b$ & {\tt mp\_div\_2d(\&a, b, \&c, \&d)} \\ +$c = \lfloor a/b \rfloor, d = a \mod b$ & {\tt mp\_div(\&a, \&b, \&c, \&d)} & $c = a \mod 2^b $ & {\tt mp\_mod\_2d(\&a, b, \&c)} \\ + && \\ +$a = b $ & {\tt mp\_set\_int(\&a, b)} & $c = a \vee b$ & {\tt mp\_or(\&a, \&b, \&c)} \\ +$b = a $ & {\tt mp\_copy(\&a, \&b)} & $c = a \wedge b$ & {\tt mp\_and(\&a, \&b, \&c)} \\ + && $c = a \oplus b$ & {\tt mp\_xor(\&a, \&b, \&c)} \\ + & \\ +$b = -a $ & {\tt mp\_neg(\&a, \&b)} & $d = a + b \mod c$ & {\tt mp\_addmod(\&a, \&b, \&c, \&d)} \\ +$b = |a| $ & {\tt mp\_abs(\&a, \&b)} & $d = a - b \mod c$ & {\tt mp\_submod(\&a, \&b, \&c, \&d)} \\ + && $d = ab \mod c$ & {\tt mp\_mulmod(\&a, \&b, \&c, \&d)} \\ +Compare $a$ and $b$ & {\tt mp\_cmp(\&a, \&b)} & $c = a^2 \mod b$ & {\tt mp\_sqrmod(\&a, \&b, \&c)} \\ +Is Zero? & {\tt mp\_iszero(\&a)} & $c = a^{-1} \mod b$ & {\tt mp\_invmod(\&a, \&b, \&c)} \\ +Is Even? & {\tt mp\_iseven(\&a)} & $d = a^b \mod c$ & {\tt mp\_exptmod(\&a, \&b, \&c, \&d)} \\ +Is Odd ? & {\tt mp\_isodd(\&a)} \\ +&\\ +$\vert \vert a \vert \vert$ & {\tt mp\_unsigned\_bin\_size(\&a)} & $res$ = 1 if $a$ prime to $t$ rounds? & {\tt mp\_prime\_is\_prime(\&a, t, \&res)} \\ +$buf \leftarrow a$ & {\tt mp\_to\_unsigned\_bin(\&a, buf)} & Next prime after $a$ to $t$ rounds. & {\tt mp\_prime\_next\_prime(\&a, t, bbs\_style)} \\ +$a \leftarrow buf[0..len-1]$ & {\tt mp\_read\_unsigned\_bin(\&a, buf, len)} \\ +&\\ +$b = \sqrt{a}$ & {\tt mp\_sqrt(\&a, \&b)} & $c = \mbox{gcd}(a, b)$ & {\tt mp\_gcd(\&a, \&b, \&c)} \\ +$c = a^{1/b}$ & {\tt mp\_n\_root(\&a, b, \&c)} & $c = \mbox{lcm}(a, b)$ & {\tt mp\_lcm(\&a, \&b, \&c)} \\ +&\\ +Greater Than & MP\_GT & Equal To & MP\_EQ \\ +Less Than & MP\_LT & Bits per digit & DIGIT\_BIT \\ +\end{tabular} +\end{document} diff --git a/pre_gen/mpi.c b/pre_gen/mpi.c index 9818cbe..5c09fbf 100644 --- a/pre_gen/mpi.c +++ b/pre_gen/mpi.c @@ -216,7 +216,7 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) * that W[ix-1] have the carry cleared (see after the inner loop) */ register mp_digit mu; - mu = (((mp_digit) (W[ix] & MP_MASK)) * rho) & MP_MASK; + mu = ((W[ix] & MP_MASK) * rho) & MP_MASK; /* a = a + mu * m * b**i * @@ -245,7 +245,7 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* inner loop */ for (iy = 0; iy < n->used; iy++) { - *_W++ += ((mp_word) mu) * ((mp_word) * tmpn++); + *_W++ += ((mp_word)mu) * ((mp_word)*tmpn++); } } @@ -253,7 +253,6 @@ fast_mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) W[ix + 1] += W[ix] >> ((mp_word) DIGIT_BIT); } - { register mp_digit *tmpx; register mp_word *_W, *_W1; @@ -383,7 +382,7 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) pb = MIN (b->used, digs - ix); for (iy = 0; iy < pb; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } @@ -406,20 +405,27 @@ fast_s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) * from N*(N+N*c)==N**2 + c*N**2 to N**2 + N*c where c is the * cost of the shifting. On very small numbers this is slower * but on most cryptographic size numbers it is faster. + * + * In this particular implementation we feed the carries from + * behind which means when the loop terminates we still have one + * last digit to copy */ tmpc = c->dp; for (ix = 1; ix < digs; ix++) { + /* forward the carry from the previous temp */ W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); + + /* now extract the previous digit [below the carry] */ *tmpc++ = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } + /* fetch the last digit */ *tmpc++ = (mp_digit) (W[digs - 1] & ((mp_word) MP_MASK)); - /* clear unused */ + /* clear unused digits [that existed in the old copy of c] */ for (; ix < olduse; ix++) { *tmpc++ = 0; } } - mp_clamp (c); return MP_OKAY; } @@ -500,7 +506,7 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) /* compute column products for digits above the minimum */ for (; iy < pb; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word) tmpx) * ((mp_word)*tmpy++); } } } @@ -509,12 +515,15 @@ fast_s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) oldused = c->used; c->used = newused; - /* now convert the array W downto what we need */ + /* now convert the array W downto what we need + * + * See comments in bn_fast_s_mp_mul_digs.c + */ for (ix = digs + 1; ix < newused; ix++) { W[ix] += (W[ix - 1] >> ((mp_word) DIGIT_BIT)); c->dp[ix - 1] = (mp_digit) (W[ix - 1] & ((mp_word) MP_MASK)); } - c->dp[(pa + pb + 1) - 1] = (mp_digit) (W[(pa + pb + 1) - 1] & ((mp_word) MP_MASK)); + c->dp[newused - 1] = (mp_digit) (W[newused - 1] & ((mp_word) MP_MASK)); for (; ix < oldused; ix++) { c->dp[ix] = 0; @@ -596,7 +605,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) * for a particular column only once which means that * there is no need todo a double precision addition */ - W2[ix + ix] = ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + W2[ix + ix] = ((mp_word)a->dp[ix]) * ((mp_word)a->dp[ix]); { register mp_digit tmpx, *tmpy; @@ -614,7 +623,7 @@ fast_s_mp_sqr (mp_int * a, mp_int * b) /* inner products */ for (iy = ix + 1; iy < pa; iy++) { - *_W++ += ((mp_word) tmpx) * ((mp_word) * tmpy++); + *_W++ += ((mp_word)tmpx) * ((mp_word)*tmpy++); } } } @@ -972,7 +981,6 @@ void mp_clear (mp_int * a) { if (a->dp != NULL) { - /* first zero the digits */ memset (a->dp, 0, sizeof (mp_digit) * a->used); @@ -980,7 +988,7 @@ mp_clear (mp_int * a) free (a->dp); /* reset members to make debugging easier */ - a->dp = NULL; + a->dp = NULL; a->alloc = a->used = 0; } } @@ -1724,6 +1732,19 @@ mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) */ #include +static int s_is_power_of_two(mp_digit b, int *p) +{ + int x; + + for (x = 1; x < DIGIT_BIT; x++) { + if (b == (((mp_digit)1)<dp[0] & ((1<used)) != MP_OKAY) { return res; } @@ -2186,7 +2232,6 @@ mp_exptmod_fast (mp_int * G, mp_int * X, mp_int * P, mp_int * Y, int redmode) } } - /* determine and setup reduction code */ if (redmode == 0) { /* now setup montgomery */ @@ -3666,7 +3711,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) for (ix = 0; ix < n->used; ix++) { /* mu = ai * m' mod b */ - mu = (x->dp[ix] * rho) & MP_MASK; + mu = ((mp_word)x->dp[ix]) * ((mp_word)rho) & MP_MASK; /* a = a + mu * m * b**i */ { @@ -3683,7 +3728,7 @@ mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) /* Multiply and add in place */ for (iy = 0; iy < n->used; iy++) { - r = ((mp_word) mu) * ((mp_word) * tmpn++) + + r = ((mp_word)mu) * ((mp_word)*tmpn++) + ((mp_word) u) + ((mp_word) * tmpx); u = (mp_digit)(r >> ((mp_word) DIGIT_BIT)); *tmpx++ = (mp_digit)(r & ((mp_word) MP_MASK)); @@ -4039,7 +4084,7 @@ mp_mul_d (mp_int * a, mp_digit b, mp_int * c) u = 0; for (ix = 0; ix < pa; ix++) { /* compute product and carry sum for this term */ - r = ((mp_word) u) + ((mp_word) * tmpa++) * ((mp_word) b); + r = ((mp_word) u) + ((mp_word)*tmpa++) * ((mp_word)b); /* mask off higher bits to get a single digit */ *tmpc++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -4415,6 +4460,11 @@ mp_prime_fermat (mp_int * a, mp_int * b, int *result) /* default to fail */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* init t */ if ((err = mp_init (&t)) != MP_OKAY) { return err; @@ -4506,7 +4556,7 @@ mp_prime_is_divisible (mp_int * a, int *result) /* performs a variable number of rounds of Miller-Rabin * * Probability of error after t rounds is no more than - * (1/4)^t when 1 <= t <= 256 + * (1/4)^t when 1 <= t <= PRIME_SIZE * * Sets result to 1 if probably prime, 0 otherwise */ @@ -4520,7 +4570,7 @@ mp_prime_is_prime (mp_int * a, int t, int *result) *result = 0; /* valid value of t? */ - if (t < 1 || t > PRIME_SIZE) { + if (t <= 0 || t > PRIME_SIZE) { return MP_VAL; } @@ -4536,6 +4586,8 @@ mp_prime_is_prime (mp_int * a, int t, int *result) if ((err = mp_prime_is_divisible (a, &res)) != MP_OKAY) { return err; } + + /* return if it was trivially divisible */ if (res == 1) { return MP_OKAY; } @@ -4599,6 +4651,11 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) /* default */ *result = 0; + /* ensure b > 1 */ + if (mp_cmp_d(b, 1) != MP_GT) { + return MP_VAL; + } + /* get n1 = a - 1 */ if ((err = mp_init_copy (&n1, a)) != MP_OKAY) { return err; @@ -4611,8 +4668,13 @@ mp_prime_miller_rabin (mp_int * a, mp_int * b, int *result) if ((err = mp_init_copy (&r, &n1)) != MP_OKAY) { goto __N1; } - + + /* count the number of least significant bits + * which are zero + */ s = mp_cnt_lsb(&r); + + /* now divide n - 1 by 2^s */ if ((err = mp_div_2d (&r, s, &r, NULL)) != MP_OKAY) { goto __R; } @@ -4677,40 +4739,152 @@ __N1:mp_clear (&n1); /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ -int mp_prime_next_prime(mp_int *a, int t) +int mp_prime_next_prime(mp_int *a, int t, int bbs_style) { - int err, res; + int err, res, x, y; + mp_digit res_tab[PRIME_SIZE], step, kstep; + mp_int b; - if (mp_iseven(a) == 1) { - /* force odd */ - if ((err = mp_add_d(a, 1, a)) != MP_OKAY) { - return err; + /* ensure t is valid */ + if (t <= 0 || t > PRIME_SIZE) { + return MP_VAL; + } + + /* force positive */ + if (a->sign == MP_NEG) { + a->sign = MP_ZPOS; + } + + /* simple algo if a is less than the largest prime in the table */ + if (mp_cmp_d(a, __prime_tab[PRIME_SIZE-1]) == MP_LT) { + /* find which prime it is bigger than */ + for (x = PRIME_SIZE - 2; x >= 0; x--) { + if (mp_cmp_d(a, __prime_tab[x]) != MP_LT) { + if (bbs_style == 1) { + /* ok we found a prime smaller or + * equal [so the next is larger] + * + * however, the prime must be + * congruent to 3 mod 4 + */ + if ((__prime_tab[x + 1] & 3) != 3) { + /* scan upwards for a prime congruent to 3 mod 4 */ + for (y = x + 1; y < PRIME_SIZE; y++) { + if ((__prime_tab[y] & 3) == 3) { + mp_set(a, __prime_tab[y]); + return MP_OKAY; + } + } + } + } else { + mp_set(a, __prime_tab[x + 1]); + return MP_OKAY; + } + } + } + /* at this point a maybe 1 */ + if (mp_cmp_d(a, 1) == MP_EQ) { + mp_set(a, 2); + return MP_OKAY; + } + /* fall through to the sieve */ + } + + /* generate a prime congruent to 3 mod 4 or 1/3 mod 4? */ + if (bbs_style == 1) { + kstep = 4; + } else { + kstep = 2; + } + + /* at this point we will use a combination of a sieve and Miller-Rabin */ + + if (bbs_style == 1) { + /* if a mod 4 != 3 subtract the correct value to make it so */ + if ((a->dp[0] & 3) != 3) { + if ((err = mp_sub_d(a, (a->dp[0] & 3) + 1, a)) != MP_OKAY) { return err; }; } } else { - /* force to next odd number */ - if ((err = mp_add_d(a, 2, a)) != MP_OKAY) { + if (mp_iseven(a) == 1) { + /* force odd */ + if ((err = mp_sub_d(a, 1, a)) != MP_OKAY) { + return err; + } + } + } + + /* generate the restable */ + for (x = 1; x < PRIME_SIZE; x++) { + if ((err = mp_mod_d(a, __prime_tab[x], res_tab + x)) != MP_OKAY) { return err; } } + /* init temp used for Miller-Rabin Testing */ + if ((err = mp_init(&b)) != MP_OKAY) { + return err; + } + for (;;) { + /* skip to the next non-trivially divisible candidate */ + step = 0; + do { + /* y == 1 if any residue was zero [e.g. cannot be prime] */ + y = 0; + + /* increase step to next odd */ + step += kstep; + + /* compute the new residue without using division */ + for (x = 1; x < PRIME_SIZE; x++) { + /* add the step to each residue */ + res_tab[x] += kstep; + + /* subtract the modulus [instead of using division] */ + if (res_tab[x] >= __prime_tab[x]) { + res_tab[x] -= __prime_tab[x]; + } + + /* set flag if zero */ + if (res_tab[x] == 0) { + y = 1; + } + } + } while (y == 1 && step < ((((mp_digit)1)<= ((((mp_digit)1)<dp[0] |= *b++; a->used += 1; - } else { +#else a->dp[0] = (*b & MP_MASK); a->dp[1] |= ((*b++ >> 7U) & 1); a->used += 2; - } +#endif } mp_clamp (a); return MP_OKAY; @@ -5756,11 +5930,11 @@ mp_to_unsigned_bin (mp_int * a, unsigned char *b) x = 0; while (mp_iszero (&t) == 0) { - if (DIGIT_BIT != 7) { +#ifndef MP_8BIT b[x++] = (unsigned char) (t.dp[0] & 255); - } else { +#else b[x++] = (unsigned char) (t.dp[0] | ((t.dp[1] & 0x01) << 7)); - } +#endif if ((res = mp_div_2d (&t, 8, &t, NULL)) != MP_OKAY) { mp_clear (&t); return res; @@ -6954,7 +7128,7 @@ s_mp_mul_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = 0; iy < pb; iy++) { /* compute the column as a mp_word */ r = ((mp_word) *tmpt) + - ((mp_word) tmpx) * ((mp_word) * tmpy++) + + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* the new column is the lower part of the result */ @@ -7036,7 +7210,7 @@ s_mp_mul_high_digs (mp_int * a, mp_int * b, mp_int * c, int digs) for (iy = digs - ix; iy < pb; iy++) { /* calculate the double precision result */ - r = ((mp_word) * tmpt) + ((mp_word) tmpx) * ((mp_word) * tmpy++) + ((mp_word) u); + r = ((mp_word) * tmpt) + ((mp_word)tmpx) * ((mp_word)*tmpy++) + ((mp_word) u); /* get the lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -7089,8 +7263,8 @@ s_mp_sqr (mp_int * a, mp_int * b) for (ix = 0; ix < pa; ix++) { /* first calculate the digit at 2*ix */ /* calculate double precision result */ - r = ((mp_word) t.dp[2*ix]) + - ((mp_word) a->dp[ix]) * ((mp_word) a->dp[ix]); + r = ((mp_word) t.dp[2*ix]) + + ((mp_word)a->dp[ix])*((mp_word)a->dp[ix]); /* store lower part in result */ t.dp[2*ix] = (mp_digit) (r & ((mp_word) MP_MASK)); @@ -7106,12 +7280,12 @@ s_mp_sqr (mp_int * a, mp_int * b) for (iy = ix + 1; iy < pa; iy++) { /* first calculate the product */ - r = ((mp_word) tmpx) * ((mp_word) a->dp[iy]); + r = ((mp_word)tmpx) * ((mp_word)a->dp[iy]); /* now calculate the double precision result, note we use * addition instead of *2 since it's easier to optimize */ - r = ((mp_word) * tmpt) + r + r + ((mp_word) u); + r = ((mp_word) *tmpt) + r + r + ((mp_word) u); /* store lower part */ *tmpt++ = (mp_digit) (r & ((mp_word) MP_MASK)); diff --git a/test.c b/test.c deleted file mode 100644 index 37f7e9c..0000000 --- a/test.c +++ /dev/null @@ -1,46 +0,0 @@ -#include -int main(int argc, char ** argv) { - - const unsigned int a = 65537; - char b[] = -"272621192922230283305477639564135351471136149273956463844361347729298759183125368038593484043149128512765280523210111782526587388894777249539002925324108547349408624093466297893486263619517809026841716115227596170065100354451708345238523975900663359145770823068375223714001310312030819080370340176730626251422070"; - char radix[1000]; - mp_int vala, valb, valc; - - if (mp_init(&vala) != MP_OKAY) { - fprintf(stderr, "failed to init vala\n"); - exit(1); - } - - if (mp_init(&valb) != MP_OKAY) { - fprintf(stderr, "failed to init valb\n"); - exit(1); - } - - if (mp_init(&valc) != MP_OKAY) { - fprintf(stderr, "failed to init valc\n"); - exit(1); - } - if (mp_set_int(&vala, 65537) != MP_OKAY) { - fprintf(stderr, "failed to set vala to 65537\n"); - exit(1); - } - - if (mp_read_radix(&valb, b, 10) != MP_OKAY) { - fprintf(stderr, "failed to set valb to %s\n", b); - exit(1); - } - - if (mp_invmod(&vala, &valb, &valc) != MP_OKAY) { - fprintf(stderr, "mp_invmod failed\n"); - exit(1); - } - - if (mp_toradix(&valc, radix, 10) != MP_OKAY) { - fprintf(stderr, "failed to convert value to radix 10\n"); - exit(1); - } - - fprintf(stderr, "a = %d\nb = %s\nc = %s\n", a, b, radix); - return 0; -} \ No newline at end of file diff --git a/tommath.h b/tommath.h index fe50906..e5e166b 100644 --- a/tommath.h +++ b/tommath.h @@ -85,12 +85,13 @@ extern "C" { #define DIGIT_BIT 31 #else #define DIGIT_BIT 28 + #define MP_28BIT #endif #endif /* otherwise the bits per digit is calculated automatically from the size of a mp_digit */ #ifndef DIGIT_BIT - #define DIGIT_BIT ((CHAR_BIT * sizeof(mp_digit) - 1)) /* bits per digit */ + #define DIGIT_BIT ((int)((CHAR_BIT * sizeof(mp_digit) - 1))) /* bits per digit */ #endif @@ -400,9 +401,10 @@ int mp_prime_is_prime(mp_int *a, int t, int *result); /* finds the next prime after the number "a" using "t" trials * of Miller-Rabin. + * + * bbs_style = 1 means the prime must be congruent to 3 mod 4 */ -int mp_prime_next_prime(mp_int *a, int t); - +int mp_prime_next_prime(mp_int *a, int t, int bbs_style); /* ---> radix conversion <--- */ int mp_count_bits(mp_int *a);