forked from wolfSSL/wolfssl
Merge branch 'master' into ti
This commit is contained in:
@@ -51,6 +51,9 @@
|
|||||||
#include "cavium_common.h"
|
#include "cavium_common.h"
|
||||||
#include "cavium_ioctl.h"
|
#include "cavium_ioctl.h"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NTRU
|
||||||
|
#include "ntru_crypto.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CYASSL_MDK_ARM)
|
#if defined(CYASSL_MDK_ARM)
|
||||||
extern FILE * CyaSSL_fopen(const char *fname, const char *mode) ;
|
extern FILE * CyaSSL_fopen(const char *fname, const char *mode) ;
|
||||||
@@ -101,6 +104,9 @@ void bench_dh(void);
|
|||||||
void bench_eccKeyGen(void);
|
void bench_eccKeyGen(void);
|
||||||
void bench_eccKeyAgree(void);
|
void bench_eccKeyAgree(void);
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef HAVE_NTRU
|
||||||
|
void bench_ntruKeyGen(void);
|
||||||
|
#endif
|
||||||
|
|
||||||
double current_time(int);
|
double current_time(int);
|
||||||
|
|
||||||
@@ -222,6 +228,10 @@ int benchmark_test(void *args)
|
|||||||
bench_rsaKeyGen();
|
bench_rsaKeyGen();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_NTRU
|
||||||
|
bench_ntruKeyGen();
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
bench_eccKeyGen();
|
bench_eccKeyGen();
|
||||||
bench_eccKeyAgree();
|
bench_eccKeyAgree();
|
||||||
@@ -1025,6 +1035,74 @@ void bench_rsaKeyGen(void)
|
|||||||
" iterations\n", milliEach, genTimes);
|
" iterations\n", milliEach, genTimes);
|
||||||
}
|
}
|
||||||
#endif /* CYASSL_KEY_GEN */
|
#endif /* CYASSL_KEY_GEN */
|
||||||
|
#ifdef HAVE_NTRU
|
||||||
|
byte GetEntropy(ENTROPY_CMD cmd, byte* out);
|
||||||
|
|
||||||
|
byte GetEntropy(ENTROPY_CMD cmd, byte* out)
|
||||||
|
{
|
||||||
|
if (cmd == INIT)
|
||||||
|
return (InitRng(&rng) == 0) ? 1 : 0;
|
||||||
|
|
||||||
|
if (out == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (cmd == GET_BYTE_OF_ENTROPY)
|
||||||
|
return (RNG_GenerateBlock(&rng, out, 1) == 0) ? 1 : 0;
|
||||||
|
|
||||||
|
if (cmd == GET_NUM_BYTES_PER_BYTE_OF_ENTROPY) {
|
||||||
|
*out = 1;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
void bench_ntruKeyGen(void)
|
||||||
|
{
|
||||||
|
double start, total, each, milliEach;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
byte public_key[5951]; /* 2048 key equivalent to rsa */
|
||||||
|
word16 public_key_len;
|
||||||
|
byte private_key[5951];
|
||||||
|
word16 private_key_len = sizeof(private_key);
|
||||||
|
|
||||||
|
DRBG_HANDLE drbg;
|
||||||
|
static uint8_t const pers_str[] = {
|
||||||
|
'C', 'y', 'a', 'S', 'S', 'L', ' ', 't', 'e', 's', 't'
|
||||||
|
};
|
||||||
|
|
||||||
|
word32 rc = ntru_crypto_drbg_instantiate(112, pers_str, sizeof(pers_str), GetEntropy, &drbg);
|
||||||
|
|
||||||
|
if(rc != DRBG_OK) {
|
||||||
|
printf("NTRU drbg instantiate failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
start = current_time(1);
|
||||||
|
|
||||||
|
for(i = 0; i < genTimes; i++) {
|
||||||
|
ntru_crypto_ntru_encrypt_keygen(drbg, NTRU_EES401EP2, &public_key_len,
|
||||||
|
public_key, &private_key_len, private_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
total = current_time(0) - start;
|
||||||
|
|
||||||
|
rc = ntru_crypto_drbg_uninstantiate(drbg);
|
||||||
|
|
||||||
|
if (rc != NTRU_OK) {
|
||||||
|
printf("NTRU drbg uninstantiate failed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
each = total / genTimes;
|
||||||
|
milliEach = each * 1000;
|
||||||
|
|
||||||
|
printf("\n");
|
||||||
|
printf("NTRU 112 key generation %6.3f milliseconds, avg over %d"
|
||||||
|
" iterations\n", milliEach, genTimes);
|
||||||
|
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_ECC
|
#ifdef HAVE_ECC
|
||||||
void bench_eccKeyGen(void)
|
void bench_eccKeyGen(void)
|
||||||
|
@@ -1677,15 +1677,14 @@ static int GetKey(DecodedCert* cert)
|
|||||||
byte* next = (byte*)key;
|
byte* next = (byte*)key;
|
||||||
word16 keyLen;
|
word16 keyLen;
|
||||||
word32 rc;
|
word32 rc;
|
||||||
|
word32 remaining = cert->maxIdx - cert->srcIdx;
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
byte* keyBlob = NULL;
|
byte* keyBlob = NULL;
|
||||||
#else
|
#else
|
||||||
byte keyBlob[MAX_NTRU_KEY_SZ];
|
byte keyBlob[MAX_NTRU_KEY_SZ];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rc = ntru_crypto_ntru_encrypt_subjectPublicKeyInfo2PublicKey(key,
|
rc = ntru_crypto_ntru_encrypt_subjectPublicKeyInfo2PublicKey(key,
|
||||||
&keyLen, NULL, &next);
|
&keyLen, NULL, &next, &remaining);
|
||||||
|
|
||||||
if (rc != NTRU_OK)
|
if (rc != NTRU_OK)
|
||||||
return ASN_NTRU_KEY_E;
|
return ASN_NTRU_KEY_E;
|
||||||
if (keyLen > MAX_NTRU_KEY_SZ)
|
if (keyLen > MAX_NTRU_KEY_SZ)
|
||||||
@@ -1699,7 +1698,7 @@ static int GetKey(DecodedCert* cert)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
rc = ntru_crypto_ntru_encrypt_subjectPublicKeyInfo2PublicKey(key,
|
rc = ntru_crypto_ntru_encrypt_subjectPublicKeyInfo2PublicKey(key,
|
||||||
&keyLen, keyBlob, &next);
|
&keyLen, keyBlob, &next, &remaining);
|
||||||
if (rc != NTRU_OK) {
|
if (rc != NTRU_OK) {
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
XFREE(keyBlob, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(keyBlob, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@@ -2861,10 +2860,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;
|
||||||
@@ -2931,7 +2937,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 */
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2942,30 +2950,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);
|
||||||
@@ -3001,16 +3034,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 */
|
||||||
@@ -3018,34 +3052,49 @@ 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,
|
||||||
pubKey) != 0) {
|
pubKey) != 0) {
|
||||||
CYASSL_MSG("ECC verify hash error");
|
CYASSL_MSG("ECC verify hash error");
|
||||||
}
|
}
|
||||||
else if (1 != verify) {
|
else if (1 != verify) {
|
||||||
CYASSL_MSG("ECC Verify didn't match");
|
CYASSL_MSG("ECC Verify didn't match");
|
||||||
} else
|
} else
|
||||||
ret = 1; /* match */
|
ret = 1; /* match */
|
||||||
|
|
||||||
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 */
|
||||||
default:
|
default:
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5522,7 +5571,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;
|
||||||
@@ -5573,31 +5626,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;
|
||||||
}
|
}
|
||||||
@@ -5637,12 +5695,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);
|
||||||
|
|
||||||
@@ -5653,7 +5718,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;
|
||||||
}
|
}
|
||||||
@@ -5852,12 +5919,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);
|
||||||
|
|
||||||
@@ -5868,7 +5942,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;
|
||||||
}
|
}
|
||||||
@@ -5880,13 +5956,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);
|
||||||
@@ -5898,7 +5981,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;
|
||||||
}
|
}
|
||||||
@@ -5921,13 +6006,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);
|
||||||
@@ -5996,7 +6089,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;
|
||||||
}
|
}
|
||||||
@@ -6006,14 +6101,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);
|
||||||
@@ -6039,7 +6142,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;
|
||||||
}
|
}
|
||||||
@@ -6052,13 +6158,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);
|
||||||
@@ -6125,7 +6239,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;
|
||||||
}
|
}
|
||||||
@@ -6312,9 +6429,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;
|
||||||
@@ -6335,10 +6456,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;
|
||||||
@@ -6401,8 +6531,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 */
|
||||||
@@ -6411,14 +6539,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;
|
||||||
}
|
}
|
||||||
|
@@ -3765,7 +3765,7 @@ int mp_sqrmod (mp_int * a, mp_int * b, mp_int * c)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#if defined(HAVE_ECC) || !defined(NO_PWDBASED) || defined(CYASSL_SNIFFER) || defined(CYASSL_HAVE_WOLFSCEP)
|
#if defined(HAVE_ECC) || !defined(NO_PWDBASED) || defined(CYASSL_SNIFFER) || defined(CYASSL_HAVE_WOLFSCEP) || defined(CYASSL_KEY_GEN)
|
||||||
|
|
||||||
/* single digit addition */
|
/* single digit addition */
|
||||||
int mp_add_d (mp_int* a, mp_digit b, mp_int* c)
|
int mp_add_d (mp_int* a, mp_digit b, mp_int* c)
|
||||||
|
@@ -132,16 +132,25 @@ void Md2Final(Md2* md2, byte* hash)
|
|||||||
|
|
||||||
int Md2Hash(const byte* data, word32 len, byte* hash)
|
int Md2Hash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
DECLARE_VAR(Md2, md2);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Md2* md2;
|
||||||
|
#else
|
||||||
|
Md2 md2[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Md2, md2))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
md2 = (Md2*)XMALLOC(sizeof(Md2), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (md2 == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
InitMd2(md2);
|
InitMd2(md2);
|
||||||
Md2Update(md2, data, len);
|
Md2Update(md2, data, len);
|
||||||
Md2Final(md2, hash);
|
Md2Final(md2, hash);
|
||||||
|
|
||||||
DESTROY_VAR(md2);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(md2, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -365,16 +365,25 @@ void Md5Final(Md5* md5, byte* hash)
|
|||||||
|
|
||||||
int Md5Hash(const byte* data, word32 len, byte* hash)
|
int Md5Hash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
DECLARE_VAR(Md5, md5);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Md5* md5;
|
||||||
|
#else
|
||||||
|
Md5 md5[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Md5, md5))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
md5 = (Md5*)XMALLOC(sizeof(Md5), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (md5 == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
InitMd5(md5);
|
InitMd5(md5);
|
||||||
Md5Update(md5, data, len);
|
Md5Update(md5, data, len);
|
||||||
Md5Final(md5, hash);
|
Md5Final(md5, hash);
|
||||||
|
|
||||||
DESTROY_VAR(md5);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(md5, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -399,10 +399,17 @@ int ShaFinal(Sha* sha, byte* hash)
|
|||||||
int ShaHash(const byte* data, word32 len, byte* hash)
|
int ShaHash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DECLARE_VAR(Sha, sha);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Sha* sha;
|
||||||
|
#else
|
||||||
|
Sha sha[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Sha, sha))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
sha = (Sha*)XMALLOC(sizeof(Sha), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((ret = InitSha(sha)) != 0) {
|
if ((ret = InitSha(sha)) != 0) {
|
||||||
CYASSL_MSG("InitSha failed");
|
CYASSL_MSG("InitSha failed");
|
||||||
@@ -412,7 +419,9 @@ int ShaHash(const byte* data, word32 len, byte* hash)
|
|||||||
ShaFinal(sha, hash);
|
ShaFinal(sha, hash);
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(sha);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(sha, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -288,10 +288,17 @@ int Sha256Final(Sha256* sha256, byte* hash)
|
|||||||
int Sha256Hash(const byte* data, word32 len, byte* hash)
|
int Sha256Hash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DECLARE_VAR(Sha256, sha256);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Sha256* sha256;
|
||||||
|
#else
|
||||||
|
Sha256 sha256[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Sha256, sha256))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
sha256 = (Sha256*)XMALLOC(sizeof(Sha256), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha256 == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((ret = InitSha256(sha256)) != 0) {
|
if ((ret = InitSha256(sha256)) != 0) {
|
||||||
CYASSL_MSG("InitSha256 failed");
|
CYASSL_MSG("InitSha256 failed");
|
||||||
@@ -303,7 +310,9 @@ int Sha256Hash(const byte* data, word32 len, byte* hash)
|
|||||||
CYASSL_MSG("Sha256Final failed");
|
CYASSL_MSG("Sha256Final failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(sha256);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(sha256, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -301,10 +301,17 @@ int Sha512Final(Sha512* sha512, byte* hash)
|
|||||||
int Sha512Hash(const byte* data, word32 len, byte* hash)
|
int Sha512Hash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DECLARE_VAR(Sha512, sha512);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Sha512* sha512;
|
||||||
|
#else
|
||||||
|
Sha512 sha512[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Sha512, sha512))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
sha512 = (Sha512*)XMALLOC(sizeof(Sha512), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha512 == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((ret = InitSha512(sha512)) != 0) {
|
if ((ret = InitSha512(sha512)) != 0) {
|
||||||
CYASSL_MSG("InitSha512 failed");
|
CYASSL_MSG("InitSha512 failed");
|
||||||
@@ -316,7 +323,9 @@ int Sha512Hash(const byte* data, word32 len, byte* hash)
|
|||||||
CYASSL_MSG("Sha512Final failed");
|
CYASSL_MSG("Sha512Final failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(sha512);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(sha512, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -499,10 +508,17 @@ int Sha384Final(Sha384* sha384, byte* hash)
|
|||||||
int Sha384Hash(const byte* data, word32 len, byte* hash)
|
int Sha384Hash(const byte* data, word32 len, byte* hash)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
DECLARE_VAR(Sha384, sha384);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
Sha384* sha384;
|
||||||
|
#else
|
||||||
|
Sha384 sha384[1];
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!CREATE_VAR(Sha384, sha384))
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
sha384 = (Sha384*)XMALLOC(sizeof(Sha384), NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (sha384 == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((ret = InitSha384(sha384)) != 0) {
|
if ((ret = InitSha384(sha384)) != 0) {
|
||||||
CYASSL_MSG("InitSha384 failed");
|
CYASSL_MSG("InitSha384 failed");
|
||||||
@@ -514,7 +530,9 @@ int Sha384Hash(const byte* data, word32 len, byte* hash)
|
|||||||
CYASSL_MSG("Sha384Final failed");
|
CYASSL_MSG("Sha384Final failed");
|
||||||
}
|
}
|
||||||
|
|
||||||
DESTROY_VAR(sha384);
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(sha384, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@@ -257,25 +257,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