add BN_mod_mul

This commit is contained in:
Takashi Kojo 2017-05-26 10:01:33 +09:00
parent 8c15c65343
commit d967129581
3 changed files with 39 additions and 1 deletions

View File

@ -18497,6 +18497,31 @@ int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
return WOLFSSL_FAILURE; return WOLFSSL_FAILURE;
} }
/* r = (a * p) % m */
int wolfSSL_BN_mod_mul(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
const WOLFSSL_BIGNUM *p, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx)
{
int ret;
WOLFSSL_ENTER("wolfSSL_BN_mod_mul");
(void) ctx;
if (r == NULL || a == NULL || p == NULL || m == NULL) {
WOLFSSL_MSG("Bad Argument");
return SSL_FAILURE;
}
if ((ret = mp_mulmod((mp_int*)a->internal,(mp_int*)p->internal,
(mp_int*)m->internal, (mp_int*)r->internal)) == MP_OKAY) {
return SSL_SUCCESS;
}
WOLFSSL_LEAVE("wolfSSL_BN_mod_mul", ret);
(void)ret;
return SSL_FAILURE;
}
const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void) const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void)
{ {
static WOLFSSL_BIGNUM* bn_one = NULL; static WOLFSSL_BIGNUM* bn_one = NULL;

View File

@ -10293,7 +10293,17 @@ static void test_wolfSSL_BN(void)
/* check result 3^2 mod 5 */ /* check result 3^2 mod 5 */
value[0] = 0; value[0] = 0;
AssertIntEQ(BN_bn2bin(d, value), WOLFSSL_SUCCESS); AssertIntEQ(BN_bn2bin(d, value), WOLFSSL_SUCCESS);
AssertIntEQ((int)(value[0] & 0x04), 4); AssertIntEQ(BN_bn2bin(d, value), SSL_SUCCESS);
AssertIntEQ((int)(value[0]), 4);
/* a*b mod c = */
AssertIntEQ(BN_mod_mul(d, NULL, b, c, NULL), SSL_FAILURE);
AssertIntEQ(BN_mod_mul(d, a, b, c, NULL), SSL_SUCCESS);
/* check result 3*2 mod 5 */
value[0] = 0;
AssertIntEQ(BN_bn2bin(d, value), SSL_SUCCESS);
AssertIntEQ((int)(value[0]), 1);
/* BN_mod_inverse test */ /* BN_mod_inverse test */
value[0] = 0; value[0] = 0;

View File

@ -37,6 +37,8 @@ WOLFSSL_API int wolfSSL_BN_mod(WOLFSSL_BIGNUM*, const WOLFSSL_BIGNUM*,
const WOLFSSL_BIGNUM*, const WOLFSSL_BN_CTX*); const WOLFSSL_BIGNUM*, const WOLFSSL_BN_CTX*);
WOLFSSL_API int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a, WOLFSSL_API int wolfSSL_BN_mod_exp(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
const WOLFSSL_BIGNUM *p, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx); const WOLFSSL_BIGNUM *p, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx);
WOLFSSL_API int wolfSSL_BN_mod_mul(WOLFSSL_BIGNUM *r, const WOLFSSL_BIGNUM *a,
const WOLFSSL_BIGNUM *b, const WOLFSSL_BIGNUM *m, WOLFSSL_BN_CTX *ctx);
WOLFSSL_API const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void); WOLFSSL_API const WOLFSSL_BIGNUM* wolfSSL_BN_value_one(void);
@ -112,6 +114,7 @@ typedef WOLFSSL_BN_GENCB BN_GENCB;
#define BN_mod wolfSSL_BN_mod #define BN_mod wolfSSL_BN_mod
#define BN_mod_exp wolfSSL_BN_mod_exp #define BN_mod_exp wolfSSL_BN_mod_exp
#define BN_mod_mul wolfSSL_BN_mod_mul
#define BN_sub wolfSSL_BN_sub #define BN_sub wolfSSL_BN_sub
#define BN_value_one wolfSSL_BN_value_one #define BN_value_one wolfSSL_BN_value_one