forked from wolfSSL/wolfssl
Merge pull request #1709 from SparkiDev/rsa_low_mem_fix
Fix for RSA_LOW_MEM and other configurations
This commit is contained in:
@ -746,7 +746,7 @@ int GetInt(mp_int* mpi, const byte* input, word32* inOutIdx, word32 maxIdx)
|
|||||||
return 0;
|
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)
|
#if !defined(NO_RSA) && !defined(HAVE_USER_RSA)
|
||||||
static int SkipInt(const byte* input, word32* inOutIdx, word32 maxIdx)
|
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->d, input, inOutIdx, inSz) < 0 ||
|
||||||
GetInt(&key->p, input, inOutIdx, inSz) < 0 ||
|
GetInt(&key->p, input, inOutIdx, inSz) < 0 ||
|
||||||
GetInt(&key->q, input, inOutIdx, inSz) < 0) return ASN_RSA_KEY_E;
|
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 ||
|
if (GetInt(&key->dP, input, inOutIdx, inSz) < 0 ||
|
||||||
GetInt(&key->dQ, input, inOutIdx, inSz) < 0 ||
|
GetInt(&key->dQ, input, inOutIdx, inSz) < 0 ||
|
||||||
GetInt(&key->u, input, inOutIdx, inSz) < 0 ) return ASN_RSA_KEY_E;
|
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;
|
word32 keyIdx = 0;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
a = XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
|
a = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
|
||||||
if (a == NULL)
|
if (a == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
b = XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
|
b = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL, DYNAMIC_TYPE_RSA);
|
||||||
if (b == NULL) {
|
if (b == NULL) {
|
||||||
XFREE(a, NULL, DYNAMIC_TYPE_RSA);
|
XFREE(a, NULL, DYNAMIC_TYPE_RSA);
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
@ -2415,10 +2415,10 @@ int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der)
|
|||||||
word32 keyIdx = 0;
|
word32 keyIdx = 0;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#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)
|
if (key_pair == NULL)
|
||||||
return MEMORY_E;
|
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) {
|
if (privDer == NULL) {
|
||||||
XFREE(key_pair, NULL, DYNAMIC_TYPE_ECC);
|
XFREE(key_pair, NULL, DYNAMIC_TYPE_ECC);
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
@ -2477,7 +2477,8 @@ int wc_CheckPrivateKey(byte* key, word32 keySz, DecodedCert* der)
|
|||||||
word32 keyIdx = 0;
|
word32 keyIdx = 0;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#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)
|
if (key_pair == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
#endif
|
#endif
|
||||||
|
@ -5078,10 +5078,10 @@ int wc_ecc_verify_hash(const byte* sig, word32 siglen, const byte* hash,
|
|||||||
r = r_lcl;
|
r = r_lcl;
|
||||||
s = s_lcl;
|
s = s_lcl;
|
||||||
#else
|
#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)
|
if (r == NULL)
|
||||||
return MEMORY_E;
|
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) {
|
if (s == NULL) {
|
||||||
XFREE(r, key->heap, DYNAMIC_TYPE_ECC);
|
XFREE(r, key->heap, DYNAMIC_TYPE_ECC);
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
@ -276,7 +276,7 @@ int wc_InitRsaKey_ex(RsaKey* key, void* heap, int devId)
|
|||||||
if (ret != MP_OKAY)
|
if (ret != MP_OKAY)
|
||||||
return ret;
|
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);
|
ret = mp_init_multi(&key->d, &key->p, &key->q, NULL, NULL, NULL);
|
||||||
#else
|
#else
|
||||||
ret = mp_init_multi(&key->d, &key->p, &key->q, &key->dP, &key->dQ, &key->u);
|
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
|
#endif
|
||||||
|
|
||||||
if (key->type == RSA_PRIVATE) {
|
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->u);
|
||||||
mp_forcezero(&key->dQ);
|
mp_forcezero(&key->dQ);
|
||||||
mp_forcezero(&key->dP);
|
mp_forcezero(&key->dP);
|
||||||
@ -401,7 +401,7 @@ int wc_FreeRsaKey(RsaKey* key)
|
|||||||
mp_forcezero(&key->d);
|
mp_forcezero(&key->d);
|
||||||
}
|
}
|
||||||
/* private part */
|
/* 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->u);
|
||||||
mp_clear(&key->dQ);
|
mp_clear(&key->dQ);
|
||||||
mp_clear(&key->dP);
|
mp_clear(&key->dP);
|
||||||
@ -1422,11 +1422,11 @@ static int wc_RsaFunctionSync(const byte* in, word32 inLen, byte* out,
|
|||||||
(void)rng;
|
(void)rng;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#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)
|
if (tmp == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
#ifdef WC_RSA_BLINDING
|
#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) {
|
if (rnd == NULL) {
|
||||||
XFREE(tmp, key->heap, DYNAMIC_TYPE_RSA);
|
XFREE(tmp, key->heap, DYNAMIC_TYPE_RSA);
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
@ -1811,7 +1811,7 @@ int wc_RsaFunction(const byte* in, word32 inLen, byte* out,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#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)
|
if (c == NULL)
|
||||||
ret = MEMORY_E;
|
ret = MEMORY_E;
|
||||||
#endif
|
#endif
|
||||||
|
@ -114,7 +114,7 @@ enum {
|
|||||||
/* RSA */
|
/* RSA */
|
||||||
struct RsaKey {
|
struct RsaKey {
|
||||||
mp_int n, e, d, p, q;
|
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;
|
mp_int dP, dQ, u;
|
||||||
#endif
|
#endif
|
||||||
void* heap; /* for user memory overrides */
|
void* heap; /* for user memory overrides */
|
||||||
|
Reference in New Issue
Block a user