math descriptor: add parameter "b" to isprime()

This commit is contained in:
Steffen Jaeckel 2014-05-09 23:00:50 +02:00
parent 5d2fe0da8c
commit ca42862d52
4 changed files with 21 additions and 13 deletions

View File

@ -326,10 +326,11 @@ typedef struct {
/** Primality testing /** Primality testing
@param a The integer to test @param a The integer to test
@param b The destination of the result (FP_YES if prime) @param b The number of tests that shall be executed
@param c The destination of the result (FP_YES if prime)
@return CRYPT_OK on success @return CRYPT_OK on success
*/ */
int (*isprime)(void *a, int *b); int (*isprime)(void *a, int b, int *c);
/* ---- (optional) ecc point math ---- */ /* ---- (optional) ecc point math ---- */
@ -516,7 +517,7 @@ extern const ltc_math_descriptor gmp_desc;
#define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a) #define mp_montgomery_free(a) ltc_mp.montgomery_deinit(a)
#define mp_exptmod(a,b,c,d) ltc_mp.exptmod(a,b,c,d) #define mp_exptmod(a,b,c,d) ltc_mp.exptmod(a,b,c,d)
#define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, c) #define mp_prime_is_prime(a, b, c) ltc_mp.isprime(a, b, c)
#define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO) #define mp_iszero(a) (mp_cmp_d(a, 0) == LTC_MP_EQ ? LTC_MP_YES : LTC_MP_NO)
#define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO) #define mp_isodd(a) (mp_get_digit_count(a) > 0 ? (mp_get_digit(a, 0) & 1 ? LTC_MP_YES : LTC_MP_NO) : LTC_MP_NO)

View File

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

View File

@ -400,13 +400,16 @@ static int exptmod(void *a, void *b, void *c, void *d)
return mpi_to_ltc_error(mp_exptmod(a,b,c,d)); return mpi_to_ltc_error(mp_exptmod(a,b,c,d));
} }
static int isprime(void *a, int *b) static int isprime(void *a, int b, int *c)
{ {
int err; int err;
LTC_ARGCHK(a != NULL); LTC_ARGCHK(a != NULL);
LTC_ARGCHK(b != NULL); LTC_ARGCHK(c != NULL);
err = mpi_to_ltc_error(mp_prime_is_prime(a, 8, b)); if (b == 0) {
*b = (*b == MP_YES) ? LTC_MP_YES : LTC_MP_NO; b = 8;
} /* if */
err = mpi_to_ltc_error(mp_prime_is_prime(a, b, c));
*c = (*c == MP_YES) ? LTC_MP_YES : LTC_MP_NO;
return err; return err;
} }

View File

@ -413,11 +413,12 @@ static int exptmod(void *a, void *b, void *c, void *d)
return tfm_to_ltc_error(fp_exptmod(a,b,c,d)); return tfm_to_ltc_error(fp_exptmod(a,b,c,d));
} }
static int isprime(void *a, int *b) static int isprime(void *a, int b, int *c)
{ {
LTC_ARGCHK(a != NULL); LTC_ARGCHK(a != NULL);
LTC_ARGCHK(b != NULL); LTC_ARGCHK(c != NULL);
*b = (fp_isprime(a) == FP_YES) ? LTC_MP_YES : LTC_MP_NO; (void)b;
*c = (fp_isprime(a) == FP_YES) ? LTC_MP_YES : LTC_MP_NO;
return CRYPT_OK; return CRYPT_OK;
} }