forked from wolfSSL/wolfssl
remove stack reduction macros
This commit is contained in:
@ -2846,10 +2846,17 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
void* heap)
|
void* heap)
|
||||||
{
|
{
|
||||||
int typeH = 0, digestSz = 0, ret = 0;
|
int typeH = 0, digestSz = 0, ret = 0;
|
||||||
DECLARE_ARRAY(byte, digest, MAX_DIGEST_SIZE);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
byte* digest;
|
||||||
|
#else
|
||||||
|
byte digest[MAX_DIGEST_SIZE];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_ARRAY(byte, digest, MAX_DIGEST_SIZE))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
digest = (byte*)XMALLOC(MAX_DIGEST_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (digest == NULL)
|
||||||
return 0; /* not confirmed */
|
return 0; /* not confirmed */
|
||||||
|
#endif
|
||||||
|
|
||||||
(void)key;
|
(void)key;
|
||||||
(void)keySz;
|
(void)keySz;
|
||||||
@ -2916,7 +2923,9 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (typeH == 0) {
|
if (typeH == 0) {
|
||||||
DESTROY_ARRAY(digest);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(digest, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return 0; /* not confirmed */
|
return 0; /* not confirmed */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2927,30 +2936,55 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
word32 idx = 0;
|
word32 idx = 0;
|
||||||
int encodedSigSz, verifySz;
|
int encodedSigSz, verifySz;
|
||||||
byte* out;
|
byte* out;
|
||||||
DECLARE_VAR(RsaKey, pubKey);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
DECLARE_ARRAY(byte, plain, MAX_ENCODED_SIG_SZ);
|
RsaKey* pubKey;
|
||||||
DECLARE_ARRAY(byte, encodedSig, MAX_ENCODED_SIG_SZ);
|
byte* plain;
|
||||||
|
byte* encodedSig;
|
||||||
|
#else
|
||||||
|
RsaKey pubKey[1];
|
||||||
|
byte plain[MAX_ENCODED_SIG_SZ];
|
||||||
|
byte encodedSig[MAX_ENCODED_SIG_SZ];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
pubKey = (RsaKey*)XMALLOC(sizeof(RsaKey), NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
plain = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
encodedSig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|
||||||
|
if (pubKey == NULL || plain == NULL || encodedSig == NULL) {
|
||||||
|
CYASSL_MSG("Failed to allocate memory at ConfirmSignature");
|
||||||
|
|
||||||
|
if (pubKey)
|
||||||
|
XFREE(pubKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (plain)
|
||||||
|
XFREE(plain, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (encodedSig)
|
||||||
|
XFREE(encodedSig, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|
||||||
|
break; /* not confirmed */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (sigSz > MAX_ENCODED_SIG_SZ) {
|
if (sigSz > MAX_ENCODED_SIG_SZ) {
|
||||||
CYASSL_MSG("Verify Signautre is too big");
|
CYASSL_MSG("Verify Signautre is too big");
|
||||||
}
|
}
|
||||||
else if (!CREATE_VAR(RsaKey, pubKey)) {
|
|
||||||
CYASSL_MSG("Failed to allocate pubKey");
|
|
||||||
}
|
|
||||||
else if (InitRsaKey(pubKey, heap) != 0) {
|
else if (InitRsaKey(pubKey, heap) != 0) {
|
||||||
CYASSL_MSG("InitRsaKey failed");
|
CYASSL_MSG("InitRsaKey failed");
|
||||||
}
|
}
|
||||||
else if (RsaPublicKeyDecode(key, &idx, pubKey, keySz) < 0) {
|
else if (RsaPublicKeyDecode(key, &idx, pubKey, keySz) < 0) {
|
||||||
CYASSL_MSG("ASN Key decode error RSA");
|
CYASSL_MSG("ASN Key decode error RSA");
|
||||||
}
|
}
|
||||||
else if (CREATE_ARRAY(byte, plain, MAX_ENCODED_SIG_SZ)) {
|
else {
|
||||||
XMEMCPY(plain, sig, sigSz);
|
XMEMCPY(plain, sig, sigSz);
|
||||||
|
|
||||||
if ((verifySz = RsaSSL_VerifyInline(plain, sigSz, &out,
|
if ((verifySz = RsaSSL_VerifyInline(plain, sigSz, &out,
|
||||||
pubKey)) < 0) {
|
pubKey)) < 0) {
|
||||||
CYASSL_MSG("Rsa SSL verify error");
|
CYASSL_MSG("Rsa SSL verify error");
|
||||||
}
|
}
|
||||||
else if (CREATE_ARRAY(byte, encodedSig, MAX_ENCODED_SIG_SZ)) {
|
else {
|
||||||
/* make sure we're right justified */
|
/* make sure we're right justified */
|
||||||
encodedSigSz =
|
encodedSigSz =
|
||||||
EncodeSignature(encodedSig, digest, digestSz, typeH);
|
EncodeSignature(encodedSig, digest, digestSz, typeH);
|
||||||
@ -2986,16 +3020,17 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
}
|
}
|
||||||
#endif /* CYASSL_DEBUG_ENCODING */
|
#endif /* CYASSL_DEBUG_ENCODING */
|
||||||
|
|
||||||
DESTROY_ARRAY(encodedSig);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_ARRAY(plain);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pubKey) {
|
FreeRsaKey(pubKey);
|
||||||
FreeRsaKey(pubKey);
|
|
||||||
DESTROY_VAR(pubKey);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
}
|
XFREE(pubKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
XFREE(plain, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
XFREE(encodedSig, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* NO_RSA */
|
#endif /* NO_RSA */
|
||||||
@ -3003,12 +3038,22 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
case ECDSAk:
|
case ECDSAk:
|
||||||
{
|
{
|
||||||
int verify = 0;
|
int verify = 0;
|
||||||
DECLARE_VAR(ecc_key, pubKey);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
ecc_key* pubKey;
|
||||||
|
#else
|
||||||
|
ecc_key pubKey[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(ecc_key, pubKey)) {
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
pubKey = (ecc_key*)XMALLOC(sizeof(ecc_key), NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (pubKey == NULL) {
|
||||||
CYASSL_MSG("Failed to allocate pubKey");
|
CYASSL_MSG("Failed to allocate pubKey");
|
||||||
|
break; /* not confirmed */
|
||||||
}
|
}
|
||||||
else if (ecc_import_x963(key, keySz, pubKey) < 0) {
|
#endif
|
||||||
|
|
||||||
|
if (ecc_import_x963(key, keySz, pubKey) < 0) {
|
||||||
CYASSL_MSG("ASN Key import error ECC");
|
CYASSL_MSG("ASN Key import error ECC");
|
||||||
}
|
}
|
||||||
else if (ecc_verify_hash(sig, sigSz, digest, digestSz, &verify,
|
else if (ecc_verify_hash(sig, sigSz, digest, digestSz, &verify,
|
||||||
@ -3022,7 +3067,9 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
|
|
||||||
if (pubKey) {
|
if (pubKey) {
|
||||||
ecc_free(pubKey);
|
ecc_free(pubKey);
|
||||||
DESTROY_VAR(pubKey);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(pubKey, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ECC */
|
#endif /* HAVE_ECC */
|
||||||
@ -3030,7 +3077,10 @@ static int ConfirmSignature(const byte* buf, word32 bufSz,
|
|||||||
CYASSL_MSG("Verify Key type unknown");
|
CYASSL_MSG("Verify Key type unknown");
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_ARRAY(digest);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(digest, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5507,7 +5557,11 @@ static int MakeSignature(const byte* buffer, int sz, byte* sig, int sigSz,
|
|||||||
{
|
{
|
||||||
int encSigSz, digestSz, typeH = 0, ret = 0;
|
int encSigSz, digestSz, typeH = 0, ret = 0;
|
||||||
byte digest[SHA256_DIGEST_SIZE]; /* max size */
|
byte digest[SHA256_DIGEST_SIZE]; /* max size */
|
||||||
DECLARE_ARRAY(byte, encSig, MAX_ENCODED_DIG_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
byte* encSig;
|
||||||
|
#else
|
||||||
|
byte encSig[MAX_ENCODED_DIG_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ];
|
||||||
|
#endif
|
||||||
|
|
||||||
(void)digest;
|
(void)digest;
|
||||||
(void)digestSz;
|
(void)digestSz;
|
||||||
@ -5558,31 +5612,36 @@ static int MakeSignature(const byte* buffer, int sz, byte* sig, int sigSz,
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
if (!CREATE_ARRAY(byte, encSig, MAX_ENCODED_DIG_SZ +
|
#ifdef CYASSL_SMALL_STACK
|
||||||
MAX_ALGO_SZ + MAX_SEQ_SZ)) {
|
encSig = (byte*)XMALLOC(MAX_ENCODED_DIG_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
|
||||||
|
NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (encSig == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
#endif
|
||||||
|
|
||||||
|
ret = ALGO_ID_E;
|
||||||
|
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
else if (rsaKey) {
|
if (rsaKey) {
|
||||||
/* signature */
|
/* signature */
|
||||||
encSigSz = EncodeSignature(encSig, digest, digestSz, typeH);
|
encSigSz = EncodeSignature(encSig, digest, digestSz, typeH);
|
||||||
ret = RsaSSL_Sign(encSig, encSigSz, sig, sigSz, rsaKey, rng);
|
ret = RsaSSL_Sign(encSig, encSigSz, sig, sigSz, rsaKey, rng);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
else if (eccKey) {
|
if (!rsaKey && eccKey) {
|
||||||
word32 outSz = sigSz;
|
word32 outSz = sigSz;
|
||||||
ret = ecc_sign_hash(digest, digestSz, sig, &outSz, rng, eccKey);
|
ret = ecc_sign_hash(digest, digestSz, sig, &outSz, rng, eccKey);
|
||||||
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
ret = outSz;
|
ret = outSz;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_ECC */
|
#endif
|
||||||
else {
|
|
||||||
ret = ALGO_ID_E;
|
|
||||||
}
|
|
||||||
|
|
||||||
DESTROY_ARRAY(encSig);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(encSig, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -5622,12 +5681,19 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
const byte* ntruKey, word16 ntruSz)
|
const byte* ntruKey, word16 ntruSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
DECLARE_VAR(DerCert, der);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
DerCert* der;
|
||||||
|
#else
|
||||||
|
DerCert der[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
cert->keyType = eccKey ? ECC_KEY : (rsaKey ? RSA_KEY : NTRU_KEY);
|
cert->keyType = eccKey ? ECC_KEY : (rsaKey ? RSA_KEY : NTRU_KEY);
|
||||||
|
|
||||||
if (!CREATE_VAR(DerCert, der))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
der = (DerCert*)XMALLOC(sizeof(DerCert), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (der == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = EncodeCert(cert, der, rsaKey, eccKey, rng, ntruKey, ntruSz);
|
ret = EncodeCert(cert, der, rsaKey, eccKey, rng, ntruKey, ntruSz);
|
||||||
|
|
||||||
@ -5638,7 +5704,9 @@ static int MakeAnyCert(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
ret = cert->bodySz = WriteCertBody(der, derBuffer);
|
ret = cert->bodySz = WriteCertBody(der, derBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(der);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -5837,12 +5905,19 @@ int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
RsaKey* rsaKey, ecc_key* eccKey)
|
RsaKey* rsaKey, ecc_key* eccKey)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
DECLARE_VAR(DerCert, der);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
DerCert* der;
|
||||||
|
#else
|
||||||
|
DerCert der[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
cert->keyType = eccKey ? ECC_KEY : RSA_KEY;
|
cert->keyType = eccKey ? ECC_KEY : RSA_KEY;
|
||||||
|
|
||||||
if (!CREATE_VAR(DerCert, der))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
der = (DerCert*)XMALLOC(sizeof(DerCert), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (der == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = EncodeCertReq(cert, der, rsaKey, eccKey);
|
ret = EncodeCertReq(cert, der, rsaKey, eccKey);
|
||||||
|
|
||||||
@ -5853,7 +5928,9 @@ int MakeCertReq(Cert* cert, byte* derBuffer, word32 derSz,
|
|||||||
ret = cert->bodySz = WriteCertReqBody(der, derBuffer);
|
ret = cert->bodySz = WriteCertReqBody(der, derBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(der);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(der, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -5865,13 +5942,20 @@ int SignCert(int requestSz, int sType, byte* buffer, word32 buffSz,
|
|||||||
RsaKey* rsaKey, ecc_key* eccKey, RNG* rng)
|
RsaKey* rsaKey, ecc_key* eccKey, RNG* rng)
|
||||||
{
|
{
|
||||||
int sigSz;
|
int sigSz;
|
||||||
DECLARE_ARRAY(byte, sig, MAX_ENCODED_SIG_SZ);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
byte* sig;
|
||||||
|
#else
|
||||||
|
byte sig[MAX_ENCODED_SIG_SZ];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (requestSz < 0)
|
if (requestSz < 0)
|
||||||
return requestSz;
|
return requestSz;
|
||||||
|
|
||||||
if (!CREATE_ARRAY(byte, sig, MAX_ENCODED_SIG_SZ))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
sig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sig == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
sigSz = MakeSignature(buffer, requestSz, sig, MAX_ENCODED_SIG_SZ, rsaKey,
|
sigSz = MakeSignature(buffer, requestSz, sig, MAX_ENCODED_SIG_SZ, rsaKey,
|
||||||
eccKey, rng, sType);
|
eccKey, rng, sType);
|
||||||
@ -5883,7 +5967,9 @@ int SignCert(int requestSz, int sType, byte* buffer, word32 buffSz,
|
|||||||
sigSz = AddSignature(buffer, requestSz, sig, sigSz, sType);
|
sigSz = AddSignature(buffer, requestSz, sig, sigSz, sType);
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_ARRAY(sig);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(sig, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return sigSz;
|
return sigSz;
|
||||||
}
|
}
|
||||||
@ -5906,13 +5992,21 @@ int MakeSelfCert(Cert* cert, byte* buffer, word32 buffSz, RsaKey* key, RNG* rng)
|
|||||||
static int SetAltNamesFromCert(Cert* cert, const byte* der, int derSz)
|
static int SetAltNamesFromCert(Cert* cert, const byte* der, int derSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
DECLARE_VAR(DecodedCert, decoded);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
DecodedCert* decoded;
|
||||||
|
#else
|
||||||
|
DecodedCert decoded[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (derSz < 0)
|
if (derSz < 0)
|
||||||
return derSz;
|
return derSz;
|
||||||
|
|
||||||
if (!CREATE_VAR(DecodedCert, decoded))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
decoded = (DecodedCert*)XMALLOC(sizeof(DecodedCert), NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (decoded == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
||||||
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
||||||
@ -5981,7 +6075,9 @@ static int SetAltNamesFromCert(Cert* cert, const byte* der, int derSz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FreeDecodedCert(decoded);
|
FreeDecodedCert(decoded);
|
||||||
DESTROY_VAR(decoded);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(decoded, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret < 0 ? ret : 0;
|
return ret < 0 ? ret : 0;
|
||||||
}
|
}
|
||||||
@ -5991,14 +6087,22 @@ static int SetAltNamesFromCert(Cert* cert, const byte* der, int derSz)
|
|||||||
static int SetDatesFromCert(Cert* cert, const byte* der, int derSz)
|
static int SetDatesFromCert(Cert* cert, const byte* der, int derSz)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
DECLARE_VAR(DecodedCert, decoded);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
DecodedCert* decoded;
|
||||||
|
#else
|
||||||
|
DecodedCert decoded[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
CYASSL_ENTER("SetDatesFromCert");
|
CYASSL_ENTER("SetDatesFromCert");
|
||||||
if (derSz < 0)
|
if (derSz < 0)
|
||||||
return derSz;
|
return derSz;
|
||||||
|
|
||||||
if (!CREATE_VAR(DecodedCert, decoded))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
decoded = (DecodedCert*)XMALLOC(sizeof(DecodedCert), NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (decoded == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
||||||
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
||||||
@ -6024,7 +6128,10 @@ static int SetDatesFromCert(Cert* cert, const byte* der, int derSz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FreeDecodedCert(decoded);
|
FreeDecodedCert(decoded);
|
||||||
DESTROY_VAR(decoded);
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(decoded, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret < 0 ? ret : 0;
|
return ret < 0 ? ret : 0;
|
||||||
}
|
}
|
||||||
@ -6037,13 +6144,21 @@ static int SetDatesFromCert(Cert* cert, const byte* der, int derSz)
|
|||||||
static int SetNameFromCert(CertName* cn, const byte* der, int derSz)
|
static int SetNameFromCert(CertName* cn, const byte* der, int derSz)
|
||||||
{
|
{
|
||||||
int ret, sz;
|
int ret, sz;
|
||||||
DECLARE_VAR(DecodedCert, decoded);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
DecodedCert* decoded;
|
||||||
|
#else
|
||||||
|
DecodedCert decoded[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (derSz < 0)
|
if (derSz < 0)
|
||||||
return derSz;
|
return derSz;
|
||||||
|
|
||||||
if (!CREATE_VAR(DecodedCert, decoded))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
decoded = (DecodedCert*)XMALLOC(sizeof(DecodedCert), NULL,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (decoded == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
InitDecodedCert(decoded, (byte*)der, derSz, 0);
|
||||||
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
ret = ParseCertRelative(decoded, CA_TYPE, NO_VERIFY, 0);
|
||||||
@ -6110,7 +6225,10 @@ static int SetNameFromCert(CertName* cn, const byte* der, int derSz)
|
|||||||
}
|
}
|
||||||
|
|
||||||
FreeDecodedCert(decoded);
|
FreeDecodedCert(decoded);
|
||||||
DESTROY_VAR(decoded);
|
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(decoded, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret < 0 ? ret : 0;
|
return ret < 0 ? ret : 0;
|
||||||
}
|
}
|
||||||
@ -6297,9 +6415,13 @@ int EccPrivateKeyDecode(const byte* input, word32* inOutIdx, ecc_key* key,
|
|||||||
int privSz, pubSz;
|
int privSz, pubSz;
|
||||||
byte b;
|
byte b;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DECLARE_ARRAY(byte, priv, ECC_MAXSIZE);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
DECLARE_ARRAY(byte, pub, ECC_MAXSIZE * 2 + 1); /* public key has two parts
|
byte* priv;
|
||||||
plus header */
|
byte* pub;
|
||||||
|
#else
|
||||||
|
byte priv[ECC_MAXSIZE];
|
||||||
|
byte pub[ECC_MAXSIZE * 2 + 1]; /* public key has two parts plus header */
|
||||||
|
#endif
|
||||||
|
|
||||||
if (input == NULL || inOutIdx == NULL || key == NULL || inSz == 0)
|
if (input == NULL || inOutIdx == NULL || key == NULL || inSz == 0)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
@ -6320,10 +6442,19 @@ int EccPrivateKeyDecode(const byte* input, word32* inOutIdx, ecc_key* key,
|
|||||||
if (GetLength(input, inOutIdx, &length, inSz) < 0)
|
if (GetLength(input, inOutIdx, &length, inSz) < 0)
|
||||||
return ASN_PARSE_E;
|
return ASN_PARSE_E;
|
||||||
|
|
||||||
/* priv key */
|
#ifdef CYASSL_SMALL_STACK
|
||||||
if (!CREATE_ARRAY(byte, priv, ECC_MAXSIZE))
|
priv = (byte*)XMALLOC(ECC_MAXSIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (priv == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
|
||||||
|
pub = (byte*)XMALLOC(ECC_MAXSIZE * 2 + 1, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (pub == NULL) {
|
||||||
|
XFREE(priv, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
return MEMORY_E;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* priv key */
|
||||||
privSz = length;
|
privSz = length;
|
||||||
XMEMCPY(priv, &input[*inOutIdx], privSz);
|
XMEMCPY(priv, &input[*inOutIdx], privSz);
|
||||||
*inOutIdx += length;
|
*inOutIdx += length;
|
||||||
@ -6386,8 +6517,6 @@ int EccPrivateKeyDecode(const byte* input, word32* inOutIdx, ecc_key* key,
|
|||||||
if (b != 0x00) {
|
if (b != 0x00) {
|
||||||
ret = ASN_EXPECT_0_E;
|
ret = ASN_EXPECT_0_E;
|
||||||
}
|
}
|
||||||
else if (!CREATE_ARRAY(byte, pub, ECC_MAXSIZE * 2 + 1))
|
|
||||||
ret = MEMORY_E;
|
|
||||||
else {
|
else {
|
||||||
/* pub key */
|
/* pub key */
|
||||||
pubSz = length - 1; /* null prefix */
|
pubSz = length - 1; /* null prefix */
|
||||||
@ -6396,14 +6525,15 @@ int EccPrivateKeyDecode(const byte* input, word32* inOutIdx, ecc_key* key,
|
|||||||
*inOutIdx += length;
|
*inOutIdx += length;
|
||||||
|
|
||||||
ret = ecc_import_private_key(priv, privSz, pub, pubSz, key);
|
ret = ecc_import_private_key(priv, privSz, pub, pubSz, key);
|
||||||
|
|
||||||
DESTROY_ARRAY(pub);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_ARRAY(priv);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(priv, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
XFREE(pub, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -254,25 +254,6 @@
|
|||||||
#define XREALLOC yaXREALLOC
|
#define XREALLOC yaXREALLOC
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
|
||||||
#define DECLARE_ARRAY(type, var, size) \
|
|
||||||
type* var = NULL
|
|
||||||
|
|
||||||
#define CREATE_ARRAY(type, var, size) \
|
|
||||||
(var = (type*)XMALLOC(sizeof(type) * size, NULL, \
|
|
||||||
DYNAMIC_TYPE_TMP_BUFFER))
|
|
||||||
|
|
||||||
#define DESTROY_ARRAY(var) \
|
|
||||||
XFREE(var, NULL, DYNAMIC_TYPE_TMP_BUFFER)
|
|
||||||
#else
|
|
||||||
#define DECLARE_ARRAY(type, var, size) type var[size]
|
|
||||||
#define CREATE_ARRAY(type, var, size) 1
|
|
||||||
#define DESTROY_ARRAY(var)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DECLARE_VAR(type, var) DECLARE_ARRAY(type, var, 1)
|
|
||||||
#define CREATE_VAR(type, var) CREATE_ARRAY(type, var, 1)
|
|
||||||
#define DESTROY_VAR(var) DESTROY_ARRAY(var)
|
|
||||||
|
|
||||||
#ifdef FREERTOS
|
#ifdef FREERTOS
|
||||||
#ifndef NO_WRITEV
|
#ifndef NO_WRITEV
|
||||||
|
Reference in New Issue
Block a user