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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user