bugfix in bn_mp_kronecker.c, cleanup and formatting in div. files
This commit is contained in:
parent
e6f353b48d
commit
3ec93dab9e
@ -49,3 +49,7 @@ int mp_get_bit(const mp_int *a, int b)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ref: $Format:%D$ */
|
||||||
|
/* git commit: $Format:%H$ */
|
||||||
|
/* commit time: $Format:%ai$ */
|
||||||
|
@ -131,11 +131,15 @@ int mp_kronecker(const mp_int *a, const mp_int *p, int *c)
|
|||||||
LBL_KRON:
|
LBL_KRON:
|
||||||
mp_clear(&r);
|
mp_clear(&r);
|
||||||
LBL_KRON_1:
|
LBL_KRON_1:
|
||||||
mp_clear(&a1);
|
|
||||||
LBL_KRON_0:
|
|
||||||
mp_clear(&p1);
|
mp_clear(&p1);
|
||||||
|
LBL_KRON_0:
|
||||||
|
mp_clear(&a1);
|
||||||
|
|
||||||
return e;
|
return e;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ref: $Format:%D$ */
|
||||||
|
/* git commit: $Format:%H$ */
|
||||||
|
/* commit time: $Format:%ai$ */
|
||||||
|
@ -190,3 +190,7 @@ LBL_FU_ERR:
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ref: $Format:%D$ */
|
||||||
|
/* git commit: $Format:%H$ */
|
||||||
|
/* commit time: $Format:%ai$ */
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* portable integer log of two with small footprint */
|
/* portable integer log of two with small footprint */
|
||||||
static unsigned int floor_ilog2(int value)
|
static unsigned int s_floor_ilog2(int value)
|
||||||
{
|
{
|
||||||
unsigned int r = 0;
|
unsigned int r = 0;
|
||||||
while ((value >>= 1) != 0) {
|
while ((value >>= 1) != 0) {
|
||||||
@ -214,7 +214,7 @@ int mp_prime_is_prime(const mp_int *a, int t, int *result)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// for compatibility with the current API (well, compatible within a sign's width)
|
/* for compatibility with the current API (well, compatible within a sign's width) */
|
||||||
if (p_max < t) {
|
if (p_max < t) {
|
||||||
p_max = t;
|
p_max = t;
|
||||||
}
|
}
|
||||||
@ -252,8 +252,8 @@ int mp_prime_is_prime(const mp_int *a, int t, int *result)
|
|||||||
/*
|
/*
|
||||||
Assuming the General Rieman hypothesis (never thought to write that in a
|
Assuming the General Rieman hypothesis (never thought to write that in a
|
||||||
comment) the upper bound can be lowered to 2*(log a)^2.
|
comment) the upper bound can be lowered to 2*(log a)^2.
|
||||||
E. Bach, “Explicit bounds for primality testing and related problems,”
|
E. Bach, "Explicit bounds for primality testing and related problems,"
|
||||||
Math. Comp. 55 (1990), 355–380.
|
Math. Comp. 55 (1990), 355-380.
|
||||||
|
|
||||||
size_a = (size_a/10) * 7;
|
size_a = (size_a/10) * 7;
|
||||||
len = 2 * (size_a * size_a);
|
len = 2 * (size_a * size_a);
|
||||||
@ -262,7 +262,7 @@ int mp_prime_is_prime(const mp_int *a, int t, int *result)
|
|||||||
|
|
||||||
floor(2048/10)*7 = 1428
|
floor(2048/10)*7 = 1428
|
||||||
2 * 1428^2 = 4078368
|
2 * 1428^2 = 4078368
|
||||||
|
|
||||||
(would have been ~4030331.9962 with floats and natural log instead)
|
(would have been ~4030331.9962 with floats and natural log instead)
|
||||||
That number is smaller than 2^28, the default bit-size of mp_digit.
|
That number is smaller than 2^28, the default bit-size of mp_digit.
|
||||||
*/
|
*/
|
||||||
@ -288,7 +288,7 @@ int mp_prime_is_prime(const mp_int *a, int t, int *result)
|
|||||||
if ((err = mp_rand(&b, 1)) != MP_OKAY) {
|
if ((err = mp_rand(&b, 1)) != MP_OKAY) {
|
||||||
goto LBL_B;
|
goto LBL_B;
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* Reduce digit before casting because mp_digit might be bigger than
|
* Reduce digit before casting because mp_digit might be bigger than
|
||||||
* an unsigned int and "mask" on the other side is most probably not.
|
* an unsigned int and "mask" on the other side is most probably not.
|
||||||
*/
|
*/
|
||||||
|
@ -29,7 +29,7 @@
|
|||||||
* multiply bigint a with int d and put the result in c
|
* multiply bigint a with int d and put the result in c
|
||||||
* Like mp_mul_d() but with a signed long as the small input
|
* Like mp_mul_d() but with a signed long as the small input
|
||||||
*/
|
*/
|
||||||
static int mp_mul_si(const mp_int *a, long d, mp_int *c)
|
static int s_mp_mul_si(const mp_int *a, long d, mp_int *c)
|
||||||
{
|
{
|
||||||
mp_int t;
|
mp_int t;
|
||||||
int err, neg = 0;
|
int err, neg = 0;
|
||||||
@ -407,3 +407,7 @@ LBL_LS_ERR:
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ref: $Format:%D$ */
|
||||||
|
/* git commit: $Format:%H$ */
|
||||||
|
/* commit time: $Format:%ai$ */
|
||||||
|
@ -124,7 +124,7 @@ struct mp_kronecker_st {
|
|||||||
int c[21];
|
int c[21];
|
||||||
};
|
};
|
||||||
static struct mp_kronecker_st kronecker[] = {
|
static struct mp_kronecker_st kronecker[] = {
|
||||||
//-10, -9, -8, -7,-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
|
/*-10, -9, -8, -7,-6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10*/
|
||||||
{ -10, { 0, -1, 0, -1, 0, 0, 0, 1, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 1, 0 } },
|
{ -10, { 0, -1, 0, -1, 0, 0, 0, 1, 0, -1, 0, 1, 0, -1, 0, 0, 0, 1, 0, 1, 0 } },
|
||||||
{ -9, { -1, 0, -1, 1, 0, -1, -1, 0, -1, -1, 0, 1, 1, 0, 1, 1, 0, -1, 1, 0, 1 } },
|
{ -9, { -1, 0, -1, 1, 0, -1, -1, 0, -1, -1, 0, 1, 1, 0, 1, 1, 0, -1, 1, 0, 1 } },
|
||||||
{ -8, { 0, -1, 0, 1, 0, 1, 0, -1, 0, -1, 0, 1, 0, 1, 0, -1, 0, -1, 0, 1, 0 } },
|
{ -8, { 0, -1, 0, 1, 0, 1, 0, -1, 0, -1, 0, 1, 0, 1, 0, -1, 0, -1, 0, 1, 0 } },
|
||||||
@ -674,7 +674,7 @@ int main(void)
|
|||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
|
||||||
// strong Miller-Rabin pseudoprime to the first 200 primes (F. Arnault)
|
/* strong Miller-Rabin pseudoprime to the first 200 primes (F. Arnault) */
|
||||||
puts("Testing mp_prime_is_prime() with Arnault's pseudoprime 803...901 \n");
|
puts("Testing mp_prime_is_prime() with Arnault's pseudoprime 803...901 \n");
|
||||||
mp_read_radix(&a,"91xLNF3roobhzgTzoFIG6P13ZqhOVYSN60Fa7Cj2jVR1g0k89zdahO9/kAiRprpfO1VAp1aBHucLFV/qLKLFb+zonV7R2Vxp1K13ClwUXStpV0oxTNQVjwybmFb5NBEHImZ6V7P6+udRJuH8VbMEnS0H8/pSqQrg82OoQQ2fPpAk6G1hkjqoCv5s/Yr",64);
|
mp_read_radix(&a,"91xLNF3roobhzgTzoFIG6P13ZqhOVYSN60Fa7Cj2jVR1g0k89zdahO9/kAiRprpfO1VAp1aBHucLFV/qLKLFb+zonV7R2Vxp1K13ClwUXStpV0oxTNQVjwybmFb5NBEHImZ6V7P6+udRJuH8VbMEnS0H8/pSqQrg82OoQQ2fPpAk6G1hkjqoCv5s/Yr",64);
|
||||||
mp_prime_is_prime(&a, 8, &cnt);
|
mp_prime_is_prime(&a, 8, &cnt);
|
||||||
@ -682,7 +682,7 @@ int main(void)
|
|||||||
printf("Arnault's pseudoprime is not prime but mp_prime_is_prime says it is.\n");
|
printf("Arnault's pseudoprime is not prime but mp_prime_is_prime says it is.\n");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
// About the same size as Arnault's pseudoprime
|
/* About the same size as Arnault's pseudoprime */
|
||||||
puts("Testing mp_prime_is_prime() with certified prime 2^1119 + 53\n");
|
puts("Testing mp_prime_is_prime() with certified prime 2^1119 + 53\n");
|
||||||
mp_set(&a,1u);
|
mp_set(&a,1u);
|
||||||
mp_mul_2d(&a,1119,&a);
|
mp_mul_2d(&a,1119,&a);
|
||||||
|
@ -1,3 +1,16 @@
|
|||||||
|
/* LibTomMath, multiple-precision integer library -- Tom St Denis
|
||||||
|
*
|
||||||
|
* LibTomMath is a library that provides multiple-precision
|
||||||
|
* integer arithmetic as well as number theoretic functionality.
|
||||||
|
*
|
||||||
|
* The library was designed directly after the MPI library by
|
||||||
|
* Michael Fromberger but has been written from scratch with
|
||||||
|
* additional optimizations in place.
|
||||||
|
*
|
||||||
|
* The library is free for all purposes without any express
|
||||||
|
* guarantee it works.
|
||||||
|
*/
|
||||||
|
|
||||||
#if !(defined(LTM1) && defined(LTM2) && defined(LTM3))
|
#if !(defined(LTM1) && defined(LTM2) && defined(LTM3))
|
||||||
#if defined(LTM2)
|
#if defined(LTM2)
|
||||||
# define LTM3
|
# define LTM3
|
||||||
@ -1206,3 +1219,7 @@
|
|||||||
#else
|
#else
|
||||||
# define LTM_LAST
|
# define LTM_LAST
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* ref: $Format:%D$ */
|
||||||
|
/* git commit: $Format:%H$ */
|
||||||
|
/* commit time: $Format:%ai$ */
|
||||||
|
Loading…
Reference in New Issue
Block a user