New function BN_nist_mod_func which returns an appropriate function
authorDr. Stephen Henson <steve@openssl.org>
Mon, 14 Feb 2011 16:44:29 +0000 (16:44 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 14 Feb 2011 16:44:29 +0000 (16:44 +0000)
if the passed prime is a NIST prime.

crypto/bn/bn.h
crypto/bn/bn_nist.c

index 5897d2b..0a66a2e 100644 (file)
@@ -674,6 +674,8 @@ const BIGNUM *BN_get0_nist_prime_256(void);
 const BIGNUM *BN_get0_nist_prime_384(void);
 const BIGNUM *BN_get0_nist_prime_521(void);
 
+int (*BN_nist_mod_func(const BIGNUM *p))(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx);
+
 /* library internal functions */
 
 #define bn_expand(a,bits) ((((((bits+BN_BITS2-1))/BN_BITS2)) <= (a)->dmax)?\
index 2ca5b01..97f980a 100644 (file)
@@ -834,3 +834,18 @@ int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *field,
 
        return 1;
        }
+
+int (*BN_nist_mod_func(const BIGNUM *p))(BIGNUM *r, const BIGNUM *a, const BIGNUM *field, BN_CTX *ctx)
+       {
+       if (BN_ucmp(&_bignum_nist_p_192, p) == 0)
+               return BN_nist_mod_192;
+       if (BN_ucmp(&_bignum_nist_p_224, p) == 0)
+               return BN_nist_mod_224;
+       if (BN_ucmp(&_bignum_nist_p_256, p) == 0)
+               return BN_nist_mod_256;
+       if (BN_ucmp(&_bignum_nist_p_384, p) == 0)
+               return BN_nist_mod_384;
+       if (BN_ucmp(&_bignum_nist_p_521, p) == 0)
+               return BN_nist_mod_521;
+       return 0;
+       }