Merge pull request #1709 from SparkiDev/rsa_low_mem_fix

Fix for RSA_LOW_MEM and other configurations
This commit is contained in:
toddouska
2018-07-23 16:15:28 -07:00
committed by GitHub
4 changed files with 17 additions and 16 deletions

View File

@ -746,7 +746,7 @@ int GetInt(mp_int* mpi, const byte* input, word32* inOutIdx, word32 maxIdx)
return 0;
}
#ifdef RSA_LOW_MEM
#if !defined(WOLFSSL_KEY_GEN) && !defined(OPENSSL_EXTRA) && defined(RSA_LOW_MEM)
#if !defined(NO_RSA) && !defined(HAVE_USER_RSA)
static int SkipInt(const byte* input, word32* inOutIdx, word32 maxIdx)
{
@ -2112,7 +2112,7 @@ int wc_RsaPrivateKeyDecode(const byte* input, word32* inOutIdx, RsaKey* key,
GetInt(&key->d, input, inOutIdx, inSz) < 0 ||
GetInt(&key->p, input, inOutIdx, inSz) < 0 ||
GetInt(&key->q, input, inOutIdx, inSz) < 0) return ASN_RSA_KEY_E;
#ifndef RSA_LOW_MEM
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
if (GetInt(&key->dP, input, inOutIdx, inSz) < 0 ||
GetInt(&key->dQ, input, inOutIdx, inSz) < 0 ||
GetInt(&key->u, input, inOutIdx, inSz) < 0 ) return ASN_RSA_KEY_E;
@ -2344,10 +2344,10 @@ int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der)
word32 keyIdx = 0;
#ifdef WOLFSSL_SMALL_STACK
a = XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
a = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
if (a == NULL)
return MEMORY_E;
b = XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
b = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
if (b == NULL) {
XFREE(a, NULL, DYNAMIC_TYPE_RSA);
return MEMORY_E;
@ -2415,10 +2415,10 @@ int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der)
word32 keyIdx = 0;
#ifdef WOLFSSL_SMALL_STACK
key_pair = XMALLOC(sizeof(ecc_key), NULL, DYNAMIC_TYPE_ECC);
key_pair = (ecc_key*)XMALLOC(sizeof(ecc_key), NULL, DYNAMIC_TYPE_ECC);
if (key_pair == NULL)
return MEMORY_E;
privDer = XMALLOC(MAX_ECC_BYTES, NULL, DYNAMIC_TYPE_TMP_BUFFER);
privDer = (byte*)XMALLOC(MAX_ECC_BYTES, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (privDer == NULL) {
XFREE(key_pair, NULL, DYNAMIC_TYPE_ECC);
return MEMORY_E;
@ -2477,7 +2477,8 @@ int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der)
word32 keyIdx = 0;
#ifdef WOLFSSL_SMALL_STACK
key_pair = XMALLOC(sizeof(ed25519_key), NULL, DYNAMIC_TYPE_ED25519);
key_pair = (ed25519_key*)XMALLOC(sizeof(ed25519_key), NULL,
DYNAMIC_TYPE_ED25519);
if (key_pair == NULL)
return MEMORY_E;
#endif

View File

@ -5078,10 +5078,10 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
r = r_lcl;
s = s_lcl;
#else
r = XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_ECC);
r = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_ECC);
if (r == NULL)
return MEMORY_E;
s = XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_ECC);
s = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_ECC);
if (s == NULL) {
XFREE(r, key->heap, DYNAMIC_TYPE_ECC);
return MEMORY_E;

View File

@ -276,7 +276,7 @@ int wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId)
if (ret != MP_OKAY)
return ret;
#ifdef RSA_LOW_MEM
#if !defined(WOLFSSL_KEY_GEN) && !defined(OPENSSL_EXTRA) && defined(RSA_LOW_MEM)
ret = mp_init_multi(&key->d, &key->p, &key->q, NULL, NULL, NULL);
#else
ret = mp_init_multi(&key->d, &key->p, &key->q, &key->dP, &key->dQ, &key->u);
@ -391,7 +391,7 @@ int wc_FreeRsaKey(RsaKey* key)
#endif
if (key->type == RSA_PRIVATE) {
#ifndef RSA_LOW_MEM
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
mp_forcezero(&key->u);
mp_forcezero(&key->dQ);
mp_forcezero(&key->dP);
@ -401,7 +401,7 @@ int wc_FreeRsaKey(RsaKey* key)
mp_forcezero(&key->d);
}
/* private part */
#ifndef RSA_LOW_MEM
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
mp_clear(&key->u);
mp_clear(&key->dQ);
mp_clear(&key->dP);
@ -1422,11 +1422,11 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
(void)rng;
#ifdef WOLFSSL_SMALL_STACK
tmp = XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_RSA);
tmp = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_RSA);
if (tmp == NULL)
return MEMORY_E;
#ifdef WC_RSA_BLINDING
rnd = XMALLOC(sizeof(mp_int) * 2, key->heap, DYNAMIC_TYPE_RSA);
rnd = (mp_int*)XMALLOC(sizeof(mp_int) * 2, key->heap, DYNAMIC_TYPE_RSA);
if (rnd == NULL) {
XFREE(tmp, key->heap, DYNAMIC_TYPE_RSA);
return MEMORY_E;
@ -1811,7 +1811,7 @@ int wc_RsaFunction(const byte* in, word32 inLen, byte* out,
#endif
#ifdef WOLFSSL_SMALL_STACK
c = XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_RSA);
c = (mp_int*)XMALLOC(sizeof(mp_int), key->heap, DYNAMIC_TYPE_RSA);
if (c == NULL)
ret = MEMORY_E;
#endif

View File

@ -114,7 +114,7 @@ enum {
/* RSA */
struct RsaKey {
mp_int n, e, d, p, q;
#if defined(WOLFSSL_KEY_GEN) || !defined(RSA_LOW_MEM)
#if defined(WOLFSSL_KEY_GEN) || defined(OPENSSL_EXTRA) || !defined(RSA_LOW_MEM)
mp_int dP, dQ, u;
#endif
void* heap; /* for user memory overrides */