mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
Merge pull request #6165 from SparkiDev/bn_move
BN compatibility API: move implementation out to separate API
This commit is contained in:
@ -18,8 +18,9 @@ MAINTAINERCLEANFILES+= $(FIPS_FILES)
|
||||
|
||||
EXTRA_DIST += src/bio.c
|
||||
EXTRA_DIST += src/conf.c
|
||||
EXTRA_DIST += src/ssl_misc.c
|
||||
EXTRA_DIST += src/pk.c
|
||||
EXTRA_DIST += src/ssl_bn.c
|
||||
EXTRA_DIST += src/ssl_misc.c
|
||||
EXTRA_DIST += src/x509.c
|
||||
EXTRA_DIST += src/x509_str.c
|
||||
|
||||
|
@ -24514,7 +24514,8 @@ int SetCipherList(WOLFSSL_CTX* ctx, Suites* suites, const char* list)
|
||||
if (XSTRCMP(substrCurrent, "ECDHE") == 0 ||
|
||||
XSTRCMP(substrCurrent, "RSA") == 0 ||
|
||||
XSTRCMP(substrCurrent, "DHE") == 0) {
|
||||
XMEMCPY(name, substrCurrent, length);
|
||||
if (name != substrCurrent)
|
||||
XMEMMOVE(name, substrCurrent, length);
|
||||
name[length] = '\0';
|
||||
break;
|
||||
}
|
||||
|
159
src/pk.c
159
src/pk.c
@ -764,53 +764,6 @@ static int wolfssl_der_length(const unsigned char* seq, int len)
|
||||
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
|
||||
#if !defined(NO_RSA) || !defined(NO_DH) || defined(HAVE_ECC)
|
||||
/* Too many defines to check explicitly - prototype it and always include
|
||||
* for RSA and DH. */
|
||||
WC_RNG* wolfssl_make_rng(WC_RNG* rng, int* local);
|
||||
|
||||
/* Make a random number generator or get global if possible.
|
||||
*
|
||||
* Global may not be available and NULL will be returned.
|
||||
*
|
||||
* @param [in, out] rng Local random number generator.
|
||||
* @param [out] local Local random number generator returned.
|
||||
* @return NULL on failure.
|
||||
* @return A random number generator object.
|
||||
*/
|
||||
WC_RNG* wolfssl_make_rng(WC_RNG* rng, int* local)
|
||||
{
|
||||
WC_RNG* ret = NULL;
|
||||
|
||||
/* Assume not local until one created. */
|
||||
*local = 0;
|
||||
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
/* Allocate RNG object . */
|
||||
rng = (WC_RNG*)XMALLOC(sizeof(WC_RNG), NULL, DYNAMIC_TYPE_RNG);
|
||||
#endif
|
||||
/* Check we have a local RNG object and initialize. */
|
||||
if ((rng != NULL) && (wc_InitRng(rng) == 0)) {
|
||||
ret = rng;
|
||||
*local = 1;
|
||||
}
|
||||
if (ret == NULL) {
|
||||
#ifdef HAVE_GLOBAL_RNG
|
||||
WOLFSSL_MSG("Bad RNG Init, trying global");
|
||||
#endif
|
||||
ret = wolfssl_make_global_rng();
|
||||
}
|
||||
|
||||
if (ret != rng) {
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
XFREE(rng, NULL, DYNAMIC_TYPE_RNG);
|
||||
#endif
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*******************************************************************************
|
||||
* START OF RSA API
|
||||
******************************************************************************/
|
||||
@ -2464,13 +2417,13 @@ int SetRsaExternal(WOLFSSL_RSA* rsa)
|
||||
RsaKey* key = (RsaKey*)rsa->internal;
|
||||
|
||||
/* Copy modulus. */
|
||||
ret = SetIndividualExternal(&rsa->n, &key->n);
|
||||
ret = wolfssl_bn_set_value(&rsa->n, &key->n);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa n error");
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Copy public exponent. */
|
||||
ret = SetIndividualExternal(&rsa->e, &key->e);
|
||||
ret = wolfssl_bn_set_value(&rsa->e, &key->e);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa e error");
|
||||
}
|
||||
@ -2479,21 +2432,21 @@ int SetRsaExternal(WOLFSSL_RSA* rsa)
|
||||
if (key->type == RSA_PRIVATE) {
|
||||
if (ret == 1) {
|
||||
/* Copy private exponent. */
|
||||
ret = SetIndividualExternal(&rsa->d, &key->d);
|
||||
ret = wolfssl_bn_set_value(&rsa->d, &key->d);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa d error");
|
||||
}
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Copy first prime. */
|
||||
ret = SetIndividualExternal(&rsa->p, &key->p);
|
||||
ret = wolfssl_bn_set_value(&rsa->p, &key->p);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa p error");
|
||||
}
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Copy second prime. */
|
||||
ret = SetIndividualExternal(&rsa->q, &key->q);
|
||||
ret = wolfssl_bn_set_value(&rsa->q, &key->q);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa q error");
|
||||
}
|
||||
@ -2501,21 +2454,21 @@ int SetRsaExternal(WOLFSSL_RSA* rsa)
|
||||
#ifndef RSA_LOW_MEM
|
||||
if (ret == 1) {
|
||||
/* Copy d mod p-1. */
|
||||
ret = SetIndividualExternal(&rsa->dmp1, &key->dP);
|
||||
ret = wolfssl_bn_set_value(&rsa->dmp1, &key->dP);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa dP error");
|
||||
}
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Copy d mod q-1. */
|
||||
ret = SetIndividualExternal(&rsa->dmq1, &key->dQ);
|
||||
ret = wolfssl_bn_set_value(&rsa->dmq1, &key->dQ);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa dq error");
|
||||
}
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Copy 1/q mod p. */
|
||||
ret = SetIndividualExternal(&rsa->iqmp, &key->u);
|
||||
ret = wolfssl_bn_set_value(&rsa->iqmp, &key->u);
|
||||
if (ret != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa u error");
|
||||
}
|
||||
@ -2562,14 +2515,14 @@ int SetRsaInternal(WOLFSSL_RSA* rsa)
|
||||
RsaKey* key = (RsaKey*)rsa->internal;
|
||||
|
||||
/* Copy down modulus if available. */
|
||||
if ((rsa->n != NULL) && (SetIndividualInternal(rsa->n, &key->n) != 1)) {
|
||||
if ((rsa->n != NULL) && (wolfssl_bn_get_value(rsa->n, &key->n) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa n key error");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
/* Copy down public exponent if available. */
|
||||
if ((ret == 1) && (rsa->e != NULL) &&
|
||||
(SetIndividualInternal(rsa->e, &key->e) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->e, &key->e) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa e key error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -2579,7 +2532,7 @@ int SetRsaInternal(WOLFSSL_RSA* rsa)
|
||||
|
||||
/* Copy down private exponent if available. */
|
||||
if ((ret == 1) && (rsa->d != NULL)) {
|
||||
if (SetIndividualInternal(rsa->d, &key->d) != 1) {
|
||||
if (wolfssl_bn_get_value(rsa->d, &key->d) != 1) {
|
||||
WOLFSSL_ERROR_MSG("rsa d key error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -2591,14 +2544,14 @@ int SetRsaInternal(WOLFSSL_RSA* rsa)
|
||||
|
||||
/* Copy down first prime if available. */
|
||||
if ((ret == 1) && (rsa->p != NULL) &&
|
||||
(SetIndividualInternal(rsa->p, &key->p) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->p, &key->p) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa p key error");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
/* Copy down second prime if available. */
|
||||
if ((ret == 1) && (rsa->q != NULL) &&
|
||||
(SetIndividualInternal(rsa->q, &key->q) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->q, &key->q) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa q key error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -2606,21 +2559,21 @@ int SetRsaInternal(WOLFSSL_RSA* rsa)
|
||||
#ifndef RSA_LOW_MEM
|
||||
/* Copy down d mod p-1 if available. */
|
||||
if ((ret == 1) && (rsa->dmp1 != NULL) &&
|
||||
(SetIndividualInternal(rsa->dmp1, &key->dP) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->dmp1, &key->dP) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa dP key error");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
/* Copy down d mod q-1 if available. */
|
||||
if ((ret == 1) && (rsa->dmp1 != NULL) &&
|
||||
(SetIndividualInternal(rsa->dmq1, &key->dQ) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->dmq1, &key->dQ) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa dQ key error");
|
||||
ret = -1;
|
||||
}
|
||||
|
||||
/* Copy down 1/q mod p if available. */
|
||||
if ((ret == 1) && (rsa->iqmp != NULL) &&
|
||||
(SetIndividualInternal(rsa->iqmp, &key->u) != 1)) {
|
||||
(wolfssl_bn_get_value(rsa->iqmp, &key->u) != 1)) {
|
||||
WOLFSSL_ERROR_MSG("rsa u key error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -4752,27 +4705,27 @@ int SetDsaExternal(WOLFSSL_DSA* dsa)
|
||||
|
||||
key = (DsaKey*)dsa->internal;
|
||||
|
||||
if (SetIndividualExternal(&dsa->p, &key->p) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->p, &key->p) != 1) {
|
||||
WOLFSSL_MSG("dsa p key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->q, &key->q) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->q, &key->q) != 1) {
|
||||
WOLFSSL_MSG("dsa q key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->g, &key->g) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->g, &key->g) != 1) {
|
||||
WOLFSSL_MSG("dsa g key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->pub_key, &key->y) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->pub_key, &key->y) != 1) {
|
||||
WOLFSSL_MSG("dsa y key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->priv_key, &key->x) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->priv_key, &key->x) != 1) {
|
||||
WOLFSSL_MSG("dsa x key error");
|
||||
return -1;
|
||||
}
|
||||
@ -4798,25 +4751,25 @@ int SetDsaInternal(WOLFSSL_DSA* dsa)
|
||||
key = (DsaKey*)dsa->internal;
|
||||
|
||||
if (dsa->p != NULL &&
|
||||
SetIndividualInternal(dsa->p, &key->p) != 1) {
|
||||
wolfssl_bn_get_value(dsa->p, &key->p) != 1) {
|
||||
WOLFSSL_MSG("rsa p key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dsa->q != NULL &&
|
||||
SetIndividualInternal(dsa->q, &key->q) != 1) {
|
||||
wolfssl_bn_get_value(dsa->q, &key->q) != 1) {
|
||||
WOLFSSL_MSG("rsa q key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dsa->g != NULL &&
|
||||
SetIndividualInternal(dsa->g, &key->g) != 1) {
|
||||
wolfssl_bn_get_value(dsa->g, &key->g) != 1) {
|
||||
WOLFSSL_MSG("rsa g key error");
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (dsa->pub_key != NULL) {
|
||||
if (SetIndividualInternal(dsa->pub_key, &key->y) != 1) {
|
||||
if (wolfssl_bn_get_value(dsa->pub_key, &key->y) != 1) {
|
||||
WOLFSSL_MSG("rsa pub_key error");
|
||||
return -1;
|
||||
}
|
||||
@ -4826,7 +4779,7 @@ int SetDsaInternal(WOLFSSL_DSA* dsa)
|
||||
}
|
||||
|
||||
if (dsa->priv_key != NULL) {
|
||||
if (SetIndividualInternal(dsa->priv_key, &key->x) != 1) {
|
||||
if (wolfssl_bn_get_value(dsa->priv_key, &key->x) != 1) {
|
||||
WOLFSSL_MSG("rsa priv_key error");
|
||||
return -1;
|
||||
}
|
||||
@ -5573,15 +5526,15 @@ WOLFSSL_DSA* wolfSSL_d2i_DSAparams(WOLFSSL_DSA** dsa, const unsigned char** der,
|
||||
err = GetInt(&internalKey->g, *der, &idx, (word32)derLen) != 0;
|
||||
}
|
||||
if (err == 0) {
|
||||
err = SetIndividualExternal(&ret->p, &internalKey->p)
|
||||
err = wolfssl_bn_set_value(&ret->p, &internalKey->p)
|
||||
!= 1;
|
||||
}
|
||||
if (err == 0) {
|
||||
err = SetIndividualExternal(&ret->q, &internalKey->q)
|
||||
err = wolfssl_bn_set_value(&ret->q, &internalKey->q)
|
||||
!= 1;
|
||||
}
|
||||
if (err == 0) {
|
||||
err = SetIndividualExternal(&ret->g, &internalKey->g)
|
||||
err = wolfssl_bn_set_value(&ret->g, &internalKey->g)
|
||||
!= 1;
|
||||
}
|
||||
if (err == 0 && dsa != NULL) {
|
||||
@ -6097,21 +6050,21 @@ WOLFSSL_DSA *wolfSSL_PEM_read_bio_DSAparams(WOLFSSL_BIO *bp, WOLFSSL_DSA **x,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->p, &key->p) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->p, &key->p) != 1) {
|
||||
WOLFSSL_MSG("dsa p key error");
|
||||
FreeDer(&pDer);
|
||||
wolfSSL_DSA_free(dsa);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->q, &key->q) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->q, &key->q) != 1) {
|
||||
WOLFSSL_MSG("dsa q key error");
|
||||
FreeDer(&pDer);
|
||||
wolfSSL_DSA_free(dsa);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dsa->g, &key->g) != 1) {
|
||||
if (wolfssl_bn_set_value(&dsa->g, &key->g) != 1) {
|
||||
WOLFSSL_MSG("dsa g key error");
|
||||
FreeDer(&pDer);
|
||||
wolfSSL_DSA_free(dsa);
|
||||
@ -6146,26 +6099,26 @@ WOLFSSL_DH *wolfSSL_DSA_dup_DH(const WOLFSSL_DSA *dsa)
|
||||
key = (DhKey*)dh->internal;
|
||||
|
||||
if (dsa->p != NULL &&
|
||||
SetIndividualInternal(((WOLFSSL_DSA*)dsa)->p, &key->p)
|
||||
wolfssl_bn_get_value(((WOLFSSL_DSA*)dsa)->p, &key->p)
|
||||
!= 1) {
|
||||
WOLFSSL_MSG("rsa p key error");
|
||||
wolfSSL_DH_free(dh);
|
||||
return NULL;
|
||||
}
|
||||
if (dsa->g != NULL &&
|
||||
SetIndividualInternal(((WOLFSSL_DSA*)dsa)->g, &key->g)
|
||||
wolfssl_bn_get_value(((WOLFSSL_DSA*)dsa)->g, &key->g)
|
||||
!= 1) {
|
||||
WOLFSSL_MSG("rsa g key error");
|
||||
wolfSSL_DH_free(dh);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (SetIndividualExternal(&dh->p, &key->p) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->p, &key->p) != 1) {
|
||||
WOLFSSL_MSG("dsa p key error");
|
||||
wolfSSL_DH_free(dh);
|
||||
return NULL;
|
||||
}
|
||||
if (SetIndividualExternal(&dh->g, &key->g) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->g, &key->g) != 1) {
|
||||
WOLFSSL_MSG("dsa g key error");
|
||||
wolfSSL_DH_free(dh);
|
||||
return NULL;
|
||||
@ -7749,21 +7702,21 @@ int SetDhExternal_ex(WOLFSSL_DH *dh, int elm)
|
||||
|
||||
if ((ret == 1) && (elm & ELEMENT_P)) {
|
||||
/* Set the prime. */
|
||||
if (SetIndividualExternal(&dh->p, &key->p) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->p, &key->p) != 1) {
|
||||
WOLFSSL_ERROR_MSG("dh param p error");
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
if ((ret == 1) && (elm & ELEMENT_G)) {
|
||||
/* Set the generator. */
|
||||
if (SetIndividualExternal(&dh->g, &key->g) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->g, &key->g) != 1) {
|
||||
WOLFSSL_ERROR_MSG("dh param g error");
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
if ((ret == 1) && (elm & ELEMENT_Q)) {
|
||||
/* Set the order. */
|
||||
if (SetIndividualExternal(&dh->q, &key->q) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->q, &key->q) != 1) {
|
||||
WOLFSSL_ERROR_MSG("dh param q error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -7771,14 +7724,14 @@ int SetDhExternal_ex(WOLFSSL_DH *dh, int elm)
|
||||
#ifdef WOLFSSL_DH_EXTRA
|
||||
if ((ret == 1) && (elm & ELEMENT_PRV)) {
|
||||
/* Set the private key. */
|
||||
if (SetIndividualExternal(&dh->priv_key, &key->priv) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->priv_key, &key->priv) != 1) {
|
||||
WOLFSSL_ERROR_MSG("No DH Private Key");
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
if ((ret == 1) && (elm & ELEMENT_PUB)) {
|
||||
/* Set the public key. */
|
||||
if (SetIndividualExternal(&dh->pub_key, &key->pub) != 1) {
|
||||
if (wolfssl_bn_set_value(&dh->pub_key, &key->pub) != 1) {
|
||||
WOLFSSL_ERROR_MSG("No DH Public Key");
|
||||
ret = -1;
|
||||
}
|
||||
@ -7839,20 +7792,20 @@ int SetDhInternal(WOLFSSL_DH* dh)
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Transfer prime. */
|
||||
if (SetIndividualInternal(dh->p, &key->p) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->p, &key->p) != 1) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
if (ret == 1) {
|
||||
/* Transfer generator. */
|
||||
if (SetIndividualInternal(dh->g, &key->g) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->g, &key->g) != 1) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
#ifdef HAVE_FFDHE_Q
|
||||
/* Transfer order if available. */
|
||||
if ((ret == 1) && (dh->q != NULL)) {
|
||||
if (SetIndividualInternal(dh->q, &key->q) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->q, &key->q) != 1) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
@ -7861,14 +7814,14 @@ int SetDhInternal(WOLFSSL_DH* dh)
|
||||
/* Transfer private key if available. */
|
||||
if ((ret == 1) && (dh->priv_key != NULL) &&
|
||||
(!wolfSSL_BN_is_zero(dh->priv_key))) {
|
||||
if (SetIndividualInternal(dh->priv_key, &key->priv) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->priv_key, &key->priv) != 1) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
/* Transfer public key if available. */
|
||||
if ((ret == 1) && (dh->pub_key != NULL) &&
|
||||
(!wolfSSL_BN_is_zero(dh->pub_key))) {
|
||||
if (SetIndividualInternal(dh->pub_key, &key->pub) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->pub_key, &key->pub) != 1) {
|
||||
ret = -1;
|
||||
}
|
||||
}
|
||||
@ -8100,7 +8053,7 @@ int wolfSSL_DH_set0_key(WOLFSSL_DH *dh, WOLFSSL_BIGNUM *pub_key,
|
||||
wolfSSL_BN_free(dh->pub_key);
|
||||
dh->pub_key = pub_key;
|
||||
#ifdef WOLFSSL_DH_EXTRA
|
||||
if (SetIndividualInternal(dh->pub_key, &key->pub) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->pub_key, &key->pub) != 1) {
|
||||
ret = 0;
|
||||
}
|
||||
#endif
|
||||
@ -8111,7 +8064,7 @@ int wolfSSL_DH_set0_key(WOLFSSL_DH *dh, WOLFSSL_BIGNUM *pub_key,
|
||||
wolfSSL_BN_clear_free(dh->priv_key);
|
||||
dh->priv_key = priv_key;
|
||||
#ifdef WOLFSSL_DH_EXTRA
|
||||
if (SetIndividualInternal(dh->priv_key, &key->priv) != 1) {
|
||||
if (wolfssl_bn_get_value(dh->priv_key, &key->priv) != 1) {
|
||||
ret = 0;
|
||||
}
|
||||
#endif
|
||||
@ -9457,18 +9410,18 @@ static int ec_point_internal_set(WOLFSSL_EC_POINT *p)
|
||||
ecc_point* point = (ecc_point*)p->internal;
|
||||
|
||||
/* Set X ordinate if available. */
|
||||
if ((p->X != NULL) && (SetIndividualInternal(p->X, point->x) != 1)) {
|
||||
if ((p->X != NULL) && (wolfssl_bn_get_value(p->X, point->x) != 1)) {
|
||||
WOLFSSL_MSG("ecc point X error");
|
||||
ret = -1;
|
||||
}
|
||||
/* Set Y ordinate if available. */
|
||||
if ((ret == 1) && (p->Y != NULL) && (SetIndividualInternal(p->Y,
|
||||
if ((ret == 1) && (p->Y != NULL) && (wolfssl_bn_get_value(p->Y,
|
||||
point->y) != 1)) {
|
||||
WOLFSSL_MSG("ecc point Y error");
|
||||
ret = -1;
|
||||
}
|
||||
/* Set Z ordinate if available. */
|
||||
if ((ret == 1) && (p->Z != NULL) && (SetIndividualInternal(p->Z,
|
||||
if ((ret == 1) && (p->Z != NULL) && (wolfssl_bn_get_value(p->Z,
|
||||
point->z) != 1)) {
|
||||
WOLFSSL_MSG("ecc point Z error");
|
||||
ret = -1;
|
||||
@ -9504,17 +9457,17 @@ static int ec_point_external_set(WOLFSSL_EC_POINT *p)
|
||||
ecc_point* point = (ecc_point*)p->internal;
|
||||
|
||||
/* Set X ordinate. */
|
||||
if (SetIndividualExternal(&p->X, point->x) != 1) {
|
||||
if (wolfssl_bn_set_value(&p->X, point->x) != 1) {
|
||||
WOLFSSL_MSG("ecc point X error");
|
||||
ret = -1;
|
||||
}
|
||||
/* Set Y ordinate. */
|
||||
if ((ret == 1) && (SetIndividualExternal(&p->Y, point->y) != 1)) {
|
||||
if ((ret == 1) && (wolfssl_bn_set_value(&p->Y, point->y) != 1)) {
|
||||
WOLFSSL_MSG("ecc point Y error");
|
||||
ret = -1;
|
||||
}
|
||||
/* Set Z ordinate. */
|
||||
if ((ret == 1) && (SetIndividualExternal(&p->Z, point->z) != 1)) {
|
||||
if ((ret == 1) && (wolfssl_bn_set_value(&p->Z, point->z) != 1)) {
|
||||
WOLFSSL_MSG("ecc point Z error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -12583,7 +12536,7 @@ int SetECKeyExternal(WOLFSSL_EC_KEY* eckey)
|
||||
|
||||
/* set the external privkey */
|
||||
if ((ret == 1) && (key->type == ECC_PRIVATEKEY) &&
|
||||
(SetIndividualExternal(&eckey->priv_key, &key->k) != 1)) {
|
||||
(wolfssl_bn_set_value(&eckey->priv_key, &key->k) != 1)) {
|
||||
WOLFSSL_MSG("ec priv key error");
|
||||
ret = -1;
|
||||
}
|
||||
@ -12654,7 +12607,7 @@ int SetECKeyInternal(WOLFSSL_EC_KEY* eckey)
|
||||
|
||||
/* set privkey */
|
||||
if ((ret == 1) && (eckey->priv_key != NULL)) {
|
||||
if (SetIndividualInternal(eckey->priv_key, &key->k) != 1) {
|
||||
if (wolfssl_bn_get_value(eckey->priv_key, &key->k) != 1) {
|
||||
WOLFSSL_MSG("ec key priv error");
|
||||
ret = -1;
|
||||
}
|
||||
|
2386
src/ssl_bn.c
Normal file
2386
src/ssl_bn.c
Normal file
File diff suppressed because it is too large
Load Diff
1171
tests/api.c
1171
tests/api.c
File diff suppressed because it is too large
Load Diff
@ -18158,13 +18158,18 @@ int sp_prime_is_prime_ex(const sp_int* a, int trials, int* result, WC_RNG* rng)
|
||||
if ((a == NULL) || (result == NULL) || (rng == NULL)) {
|
||||
err = MP_VAL;
|
||||
}
|
||||
|
||||
#ifdef WOLFSSL_SP_INT_NEGATIVE
|
||||
if ((err == MP_OKAY) && (a->sign == MP_NEG)) {
|
||||
err = MP_VAL;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Ensure trials is valid. Maximum based on number of small primes
|
||||
* available. */
|
||||
if ((err == MP_OKAY) && ((trials <= 0) || (trials > SP_PRIME_SIZE))) {
|
||||
err = MP_VAL;
|
||||
}
|
||||
|
||||
if ((err == MP_OKAY) && sp_isone(a)) {
|
||||
ret = MP_NO;
|
||||
haveRes = 1;
|
||||
|
@ -5090,6 +5090,8 @@ int mp_prime_is_prime_ex(mp_int* a, int t, int* result, WC_RNG* rng)
|
||||
return FP_VAL;
|
||||
if (a->sign == FP_NEG)
|
||||
return FP_VAL;
|
||||
if (t <= 0 || t > FP_PRIME_SIZE)
|
||||
return FP_VAL;
|
||||
|
||||
if (fp_isone(a)) {
|
||||
*result = FP_NO;
|
||||
|
@ -40,11 +40,7 @@
|
||||
typedef struct WOLFSSL_BIGNUM {
|
||||
int neg; /* openssh deference */
|
||||
void *internal; /* our big num */
|
||||
#if defined(WOLFSSL_SP_MATH) || defined(WOLFSSL_SP_MATH_ALL)
|
||||
sp_int fp;
|
||||
#elif defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
fp_int fp;
|
||||
#endif
|
||||
mp_int mpi;
|
||||
} WOLFSSL_BIGNUM;
|
||||
|
||||
#define WOLFSSL_BN_ULONG unsigned long
|
||||
@ -70,6 +66,15 @@ typedef struct WOLFSSL_BIGNUM {
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#define WOLFSSL_BN_RAND_TOP_ANY -1
|
||||
#define WOLFSSL_BN_RAND_TOP_ONE 0
|
||||
#define WOLFSSL_BN_RAND_TOP_TWO 1
|
||||
|
||||
#define WOLFSSL_BN_RAND_BOTTOM_ANY 0
|
||||
#define WOLFSSL_BN_RAND_BOTTOM_ODD 1
|
||||
|
||||
#define WOLFSSL_BN_MAX_VAL ((BN_ULONG)-1)
|
||||
|
||||
typedef struct WOLFSSL_BN_CTX WOLFSSL_BN_CTX;
|
||||
typedef struct WOLFSSL_BN_GENCB WOLFSSL_BN_GENCB;
|
||||
|
||||
@ -78,7 +83,7 @@ WOLFSSL_API void wolfSSL_BN_CTX_init(WOLFSSL_BN_CTX* ctx);
|
||||
WOLFSSL_API void wolfSSL_BN_CTX_free(WOLFSSL_BN_CTX* ctx);
|
||||
|
||||
WOLFSSL_API WOLFSSL_BIGNUM* wolfSSL_BN_new(void);
|
||||
#if defined(USE_FAST_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
#if !defined(USE_INTEGER_HEAP_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
WOLFSSL_API void wolfSSL_BN_init(WOLFSSL_BIGNUM* bn);
|
||||
#endif
|
||||
WOLFSSL_API void wolfSSL_BN_free(WOLFSSL_BIGNUM* bn);
|
||||
@ -179,6 +184,13 @@ WOLFSSL_API WOLFSSL_BIGNUM *wolfSSL_BN_mod_inverse(
|
||||
|
||||
#if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL)
|
||||
|
||||
#define BN_RAND_TOP_ANY WOLFSSL_BN_RAND_TOP_ANY
|
||||
#define BN_RAND_TOP_ONE WOLFSSL_BN_RAND_TOP_ONE
|
||||
#define BN_RAND_TOP_TWO WOLFSSL_BN_RAND_TOP_TWO
|
||||
|
||||
#define BN_RAND_BOTTOM_ANY WOLFSSL_BN_RAND_BOTTOM_ANY
|
||||
#define BN_RAND_BOTTOM_ODD WOLFSSL_BN_RAND_BOTTOM_ODD
|
||||
|
||||
typedef WOLFSSL_BIGNUM BIGNUM;
|
||||
typedef WOLFSSL_BN_CTX BN_CTX;
|
||||
typedef WOLFSSL_BN_GENCB BN_GENCB;
|
||||
@ -188,7 +200,9 @@ typedef WOLFSSL_BN_GENCB BN_GENCB;
|
||||
#define BN_CTX_free wolfSSL_BN_CTX_free
|
||||
|
||||
#define BN_new wolfSSL_BN_new
|
||||
#if !defined(USE_INTEGER_HEAP_MATH) && !defined(HAVE_WOLF_BIGINT)
|
||||
#define BN_init wolfSSL_BN_init
|
||||
#endif
|
||||
#define BN_free wolfSSL_BN_free
|
||||
#define BN_clear_free wolfSSL_BN_clear_free
|
||||
#define BN_clear wolfSSL_BN_clear
|
||||
|
Reference in New Issue
Block a user