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:
Steffen Jaeckel 2017-06-12 13:45:07 +02:00
parent 6f85293672
commit 7453eddae9
5 changed files with 15 additions and 7 deletions

View File

@ -24,6 +24,12 @@
typedef void rsa_key;
#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 */
typedef struct {
/** Name of the math provider */
@ -345,7 +351,7 @@ typedef struct {
/** Primality testing
@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)
@return CRYPT_OK on success
*/
@ -472,13 +478,13 @@ typedef struct {
int (*submod)(void *a, void *b, void *c, void *d);
/* ---- misc stuff ---- */
/** Make a pseudo-random mpi
@param a The mpi to make random
@param size The desired length
@return CRYPT_OK on success
*/
int (*rand)(void *a, int size);
} ltc_math_descriptor;
extern ltc_math_descriptor ltc_mp;

View File

@ -446,7 +446,7 @@ static int isprime(void *a, int b, int *c)
LTC_ARGCHK(a != NULL);
LTC_ARGCHK(c != NULL);
if (b == 0) {
b = 8;
b = LTC_MILLER_RABIN_REPS;
} /* if */
*c = mpz_probab_prime_p(a, b) > 0 ? LTC_MP_YES : LTC_MP_NO;
return CRYPT_OK;

View File

@ -404,7 +404,7 @@ static int isprime(void *a, int b, int *c)
LTC_ARGCHK(a != NULL);
LTC_ARGCHK(c != NULL);
if (b == 0) {
b = 8;
b = LTC_MILLER_RABIN_REPS;
} /* if */
err = mpi_to_ltc_error(mp_prime_is_prime(a, b, c));
*c = (*c == MP_YES) ? LTC_MP_YES : LTC_MP_NO;

View File

@ -66,7 +66,7 @@ int rand_prime(void *N, long len, prng_state *prng, int wprng)
}
/* 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);
return err;
}

View File

@ -415,8 +415,10 @@ static int isprime(void *a, int b, int *c)
{
LTC_ARGCHK(a != NULL);
LTC_ARGCHK(c != NULL);
(void)b;
*c = (fp_isprime(a) == FP_YES) ? LTC_MP_YES : LTC_MP_NO;
if (b == 0) {
b = LTC_MILLER_RABIN_REPS;
} /* if */
*c = (fp_isprime_ex(a, b) == FP_YES) ? LTC_MP_YES : LTC_MP_NO;
return CRYPT_OK;
}