improve ltc_math_descriptor a bit
* introduce LTC_MILLER_RABIN_REPS which is used as default value in the isprime() implementations
This commit is contained in:
parent
6f85293672
commit
7453eddae9
@ -24,6 +24,12 @@
|
|||||||
typedef void rsa_key;
|
typedef void rsa_key;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef LTC_MILLER_RABIN_REPS
|
||||||
|
/* Number of rounds of the Miller-Rabin test
|
||||||
|
* "Reasonable values of reps are between 15 and 50." c.f. gmp doc of mpz_probab_prime_p() */
|
||||||
|
#define LTC_MILLER_RABIN_REPS 35
|
||||||
|
#endif
|
||||||
|
|
||||||
/** math descriptor */
|
/** math descriptor */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
/** Name of the math provider */
|
/** Name of the math provider */
|
||||||
@ -345,7 +351,7 @@ typedef struct {
|
|||||||
|
|
||||||
/** Primality testing
|
/** Primality testing
|
||||||
@param a The integer to test
|
@param a The integer to test
|
||||||
@param b The number of tests that shall be executed
|
@param b The number of Miller-Rabin tests that shall be executed
|
||||||
@param c The destination of the result (FP_YES if prime)
|
@param c The destination of the result (FP_YES if prime)
|
||||||
@return CRYPT_OK on success
|
@return CRYPT_OK on success
|
||||||
*/
|
*/
|
||||||
@ -472,13 +478,13 @@ typedef struct {
|
|||||||
int (*submod)(void *a, void *b, void *c, void *d);
|
int (*submod)(void *a, void *b, void *c, void *d);
|
||||||
|
|
||||||
/* ---- misc stuff ---- */
|
/* ---- misc stuff ---- */
|
||||||
|
|
||||||
/** Make a pseudo-random mpi
|
/** Make a pseudo-random mpi
|
||||||
@param a The mpi to make random
|
@param a The mpi to make random
|
||||||
@param size The desired length
|
@param size The desired length
|
||||||
@return CRYPT_OK on success
|
@return CRYPT_OK on success
|
||||||
*/
|
*/
|
||||||
int (*rand)(void *a, int size);
|
int (*rand)(void *a, int size);
|
||||||
|
|
||||||
} ltc_math_descriptor;
|
} ltc_math_descriptor;
|
||||||
|
|
||||||
extern ltc_math_descriptor ltc_mp;
|
extern ltc_math_descriptor ltc_mp;
|
||||||
|
@ -446,7 +446,7 @@ static int isprime(void *a, int b, int *c)
|
|||||||
LTC_ARGCHK(a != NULL);
|
LTC_ARGCHK(a != NULL);
|
||||||
LTC_ARGCHK(c != NULL);
|
LTC_ARGCHK(c != NULL);
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
b = 8;
|
b = LTC_MILLER_RABIN_REPS;
|
||||||
} /* if */
|
} /* if */
|
||||||
*c = mpz_probab_prime_p(a, b) > 0 ? LTC_MP_YES : LTC_MP_NO;
|
*c = mpz_probab_prime_p(a, b) > 0 ? LTC_MP_YES : LTC_MP_NO;
|
||||||
return CRYPT_OK;
|
return CRYPT_OK;
|
||||||
|
@ -404,7 +404,7 @@ static int isprime(void *a, int b, int *c)
|
|||||||
LTC_ARGCHK(a != NULL);
|
LTC_ARGCHK(a != NULL);
|
||||||
LTC_ARGCHK(c != NULL);
|
LTC_ARGCHK(c != NULL);
|
||||||
if (b == 0) {
|
if (b == 0) {
|
||||||
b = 8;
|
b = LTC_MILLER_RABIN_REPS;
|
||||||
} /* if */
|
} /* if */
|
||||||
err = mpi_to_ltc_error(mp_prime_is_prime(a, b, c));
|
err = mpi_to_ltc_error(mp_prime_is_prime(a, b, c));
|
||||||
*c = (*c == MP_YES) ? LTC_MP_YES : LTC_MP_NO;
|
*c = (*c == MP_YES) ? LTC_MP_YES : LTC_MP_NO;
|
||||||
|
@ -66,7 +66,7 @@ int rand_prime(void *N, long len, prng_state *prng, int wprng)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* test */
|
/* test */
|
||||||
if ((err = mp_prime_is_prime(N, 8, &res)) != CRYPT_OK) {
|
if ((err = mp_prime_is_prime(N, LTC_MILLER_RABIN_REPS, &res)) != CRYPT_OK) {
|
||||||
XFREE(buf);
|
XFREE(buf);
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
@ -415,8 +415,10 @@ static int isprime(void *a, int b, int *c)
|
|||||||
{
|
{
|
||||||
LTC_ARGCHK(a != NULL);
|
LTC_ARGCHK(a != NULL);
|
||||||
LTC_ARGCHK(c != NULL);
|
LTC_ARGCHK(c != NULL);
|
||||||
(void)b;
|
if (b == 0) {
|
||||||
*c = (fp_isprime(a) == FP_YES) ? LTC_MP_YES : LTC_MP_NO;
|
b = LTC_MILLER_RABIN_REPS;
|
||||||
|
} /* if */
|
||||||
|
*c = (fp_isprime_ex(a, b) == FP_YES) ? LTC_MP_YES : LTC_MP_NO;
|
||||||
return CRYPT_OK;
|
return CRYPT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user