forked from wolfSSL/wolfssl
Merge pull request #8803 from dgarske/csr_nomalloc
Refactor to support CSR generation and signing with `WOLFSSL_NO_MALLOC`
This commit is contained in:
@ -27751,13 +27751,13 @@ int wc_RsaKeyToDer(RsaKey* key, byte* output, word32 inLen)
|
|||||||
int ret = 0, i;
|
int ret = 0, i;
|
||||||
int mpSz;
|
int mpSz;
|
||||||
word32 seqSz = 0, verSz = 0, intTotalLen = 0, outLen = 0;
|
word32 seqSz = 0, verSz = 0, intTotalLen = 0, outLen = 0;
|
||||||
word32 sizes[RSA_INTS];
|
|
||||||
byte seq[MAX_SEQ_SZ];
|
byte seq[MAX_SEQ_SZ];
|
||||||
byte ver[MAX_VERSION_SZ];
|
byte ver[MAX_VERSION_SZ];
|
||||||
mp_int* keyInt;
|
mp_int* keyInt;
|
||||||
#ifndef WOLFSSL_NO_MALLOC
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
word32 rawLen;
|
word32 rawLen;
|
||||||
byte* tmps[RSA_INTS];
|
byte* tmps[RSA_INTS];
|
||||||
|
word32 sizes[RSA_INTS];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (key == NULL)
|
if (key == NULL)
|
||||||
@ -27797,7 +27797,9 @@ int wc_RsaKeyToDer(RsaKey* key, byte* output, word32 inLen)
|
|||||||
ret = mpSz;
|
ret = mpSz;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
sizes[i] = (word32)mpSz;
|
sizes[i] = (word32)mpSz;
|
||||||
|
#endif
|
||||||
intTotalLen += (word32)mpSz;
|
intTotalLen += (word32)mpSz;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31430,11 +31432,13 @@ static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz,
|
|||||||
case CERTSIGN_STATE_DIGEST:
|
case CERTSIGN_STATE_DIGEST:
|
||||||
|
|
||||||
certSignCtx->state = CERTSIGN_STATE_DIGEST;
|
certSignCtx->state = CERTSIGN_STATE_DIGEST;
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
certSignCtx->digest = (byte*)XMALLOC(WC_MAX_DIGEST_SIZE, heap,
|
certSignCtx->digest = (byte*)XMALLOC(WC_MAX_DIGEST_SIZE, heap,
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (certSignCtx->digest == NULL) {
|
if (certSignCtx->digest == NULL) {
|
||||||
ret = MEMORY_E; goto exit_ms;
|
ret = MEMORY_E; goto exit_ms;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = HashForSignature(buf, sz, sigAlgoType, certSignCtx->digest,
|
ret = HashForSignature(buf, sz, sigAlgoType, certSignCtx->digest,
|
||||||
&typeH, &digestSz, 0);
|
&typeH, &digestSz, 0);
|
||||||
@ -31448,11 +31452,13 @@ static int MakeSignature(CertSignCtx* certSignCtx, const byte* buf, word32 sz,
|
|||||||
case CERTSIGN_STATE_ENCODE:
|
case CERTSIGN_STATE_ENCODE:
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
if (rsaKey) {
|
if (rsaKey) {
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
certSignCtx->encSig = (byte*)XMALLOC(MAX_DER_DIGEST_SZ, heap,
|
certSignCtx->encSig = (byte*)XMALLOC(MAX_DER_DIGEST_SZ, heap,
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (certSignCtx->encSig == NULL) {
|
if (certSignCtx->encSig == NULL) {
|
||||||
ret = MEMORY_E; goto exit_ms;
|
ret = MEMORY_E; goto exit_ms;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* signature */
|
/* signature */
|
||||||
certSignCtx->encSigSz = (int)wc_EncodeSignature(certSignCtx->encSig,
|
certSignCtx->encSigSz = (int)wc_EncodeSignature(certSignCtx->encSig,
|
||||||
@ -31560,14 +31566,17 @@ exit_ms:
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
if (rsaKey) {
|
if (rsaKey) {
|
||||||
XFREE(certSignCtx->encSig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(certSignCtx->encSig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
certSignCtx->encSig = NULL;
|
||||||
}
|
}
|
||||||
#endif /* !NO_RSA */
|
#endif /* !NO_RSA */
|
||||||
|
|
||||||
XFREE(certSignCtx->digest, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(certSignCtx->digest, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
certSignCtx->digest = NULL;
|
certSignCtx->digest = NULL;
|
||||||
|
#endif /* !WOLFSSL_NO_MALLOC */
|
||||||
|
|
||||||
/* reset state */
|
/* reset state */
|
||||||
certSignCtx->state = CERTSIGN_STATE_BEGIN;
|
certSignCtx->state = CERTSIGN_STATE_BEGIN;
|
||||||
@ -33334,12 +33343,14 @@ static int SignCert(int requestSz, int sType, byte* buf, word32 buffSz,
|
|||||||
#endif /* HAVE_ECC */
|
#endif /* HAVE_ECC */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
if (certSignCtx->sig == NULL) {
|
if (certSignCtx->sig == NULL) {
|
||||||
certSignCtx->sig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, heap,
|
certSignCtx->sig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, heap,
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (certSignCtx->sig == NULL)
|
if (certSignCtx->sig == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
sigSz = MakeSignature(certSignCtx, buf, (word32)requestSz, certSignCtx->sig,
|
sigSz = MakeSignature(certSignCtx, buf, (word32)requestSz, certSignCtx->sig,
|
||||||
MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key,
|
MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key,
|
||||||
@ -33360,8 +33371,10 @@ static int SignCert(int requestSz, int sType, byte* buf, word32 buffSz,
|
|||||||
sType);
|
sType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
certSignCtx->sig = NULL;
|
certSignCtx->sig = NULL;
|
||||||
|
#endif
|
||||||
|
|
||||||
return sigSz;
|
return sigSz;
|
||||||
}
|
}
|
||||||
@ -33468,12 +33481,14 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf,
|
|||||||
#endif /* HAVE_ECC */
|
#endif /* HAVE_ECC */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
if (certSignCtx->sig == NULL) {
|
if (certSignCtx->sig == NULL) {
|
||||||
certSignCtx->sig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, heap,
|
certSignCtx->sig = (byte*)XMALLOC(MAX_ENCODED_SIG_SZ, heap,
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (certSignCtx->sig == NULL)
|
if (certSignCtx->sig == NULL)
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = MakeSignature(certSignCtx, buf, (word32)bufSz, certSignCtx->sig,
|
ret = MakeSignature(certSignCtx, buf, (word32)bufSz, certSignCtx->sig,
|
||||||
MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key,
|
MAX_ENCODED_SIG_SZ, rsaKey, eccKey, ed25519Key, ed448Key,
|
||||||
@ -33487,8 +33502,10 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf,
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (ret <= 0) {
|
if (ret <= 0) {
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
certSignCtx->sig = NULL;
|
certSignCtx->sig = NULL;
|
||||||
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -33503,8 +33520,10 @@ int wc_MakeSigWithBitStr(byte *sig, int sigSz, int sType, byte* buf,
|
|||||||
ret += headerSz;
|
ret += headerSz;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef WOLFSSL_NO_MALLOC
|
||||||
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(certSignCtx->sig, heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
certSignCtx->sig = NULL;
|
certSignCtx->sig = NULL;
|
||||||
|
#endif
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
#endif /* WOLFSSL_DUAL_ALG_CERTS */
|
#endif /* WOLFSSL_DUAL_ALG_CERTS */
|
||||||
|
@ -141,12 +141,13 @@ static int CheckDsaLN(int modLen, int divLen)
|
|||||||
* return 0 on success, negative on error */
|
* return 0 on success, negative on error */
|
||||||
int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
||||||
{
|
{
|
||||||
byte* cBuf;
|
|
||||||
int qSz, pSz, cSz, err;
|
int qSz, pSz, cSz, err;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
mp_int *tmpQ = NULL;
|
mp_int *tmpQ = NULL;
|
||||||
|
byte* cBuf = NULL;
|
||||||
#else
|
#else
|
||||||
mp_int tmpQ[1];
|
mp_int tmpQ[1];
|
||||||
|
byte cBuf[(3072+64)/WOLFSSL_BIT_SIZE ];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (rng == NULL || dsa == NULL)
|
if (rng == NULL || dsa == NULL)
|
||||||
@ -161,15 +162,22 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
|||||||
|
|
||||||
/* generate extra 64 bits so that bias from mod function is negligible */
|
/* generate extra 64 bits so that bias from mod function is negligible */
|
||||||
cSz = qSz + (64 / WOLFSSL_BIT_SIZE);
|
cSz = qSz + (64 / WOLFSSL_BIT_SIZE);
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
cBuf = (byte*)XMALLOC((size_t)cSz, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
cBuf = (byte*)XMALLOC((size_t)cSz, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (cBuf == NULL) {
|
if (cBuf == NULL) {
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (sizeof(cBuf) < (size_t)cSz) {
|
||||||
|
return BUFFER_E;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
SAVE_VECTOR_REGISTERS(;);
|
SAVE_VECTOR_REGISTERS(;);
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
if ((tmpQ = (mp_int *)XMALLOC(sizeof(*tmpQ), NULL, DYNAMIC_TYPE_WOLF_BIGINT)) == NULL)
|
if ((tmpQ = (mp_int *)XMALLOC(sizeof(*tmpQ), NULL,
|
||||||
|
DYNAMIC_TYPE_WOLF_BIGINT)) == NULL)
|
||||||
err = MEMORY_E;
|
err = MEMORY_E;
|
||||||
else
|
else
|
||||||
err = MP_OKAY;
|
err = MP_OKAY;
|
||||||
@ -223,9 +231,8 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
|||||||
mp_clear(&dsa->y);
|
mp_clear(&dsa->y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
XFREE(cBuf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(cBuf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
if (tmpQ != NULL) {
|
if (tmpQ != NULL) {
|
||||||
mp_clear(tmpQ);
|
mp_clear(tmpQ);
|
||||||
XFREE(tmpQ, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(tmpQ, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@ -239,19 +246,20 @@ int wc_MakeDsaKey(WC_RNG *rng, DsaKey *dsa)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* modulus_size in bits */
|
/* modulus_size in bits */
|
||||||
int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
||||||
{
|
{
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
mp_int *tmp = NULL, *tmp2 = NULL;
|
mp_int *tmp = NULL, *tmp2 = NULL;
|
||||||
|
unsigned char *buf = NULL;
|
||||||
#else
|
#else
|
||||||
mp_int tmp[1], tmp2[1];
|
mp_int tmp[1], tmp2[1];
|
||||||
|
unsigned char buf[(3072/WOLFSSL_BIT_SIZE)-32];
|
||||||
#endif
|
#endif
|
||||||
int err, msize, qsize,
|
int err, msize, qsize,
|
||||||
loop_check_prime = 0,
|
loop_check_prime = 0,
|
||||||
check_prime = MP_NO;
|
check_prime = MP_NO;
|
||||||
unsigned char *buf;
|
|
||||||
|
|
||||||
if (rng == NULL || dsa == NULL)
|
if (rng == NULL || dsa == NULL)
|
||||||
return BAD_FUNC_ARG;
|
return BAD_FUNC_ARG;
|
||||||
@ -278,17 +286,25 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
|||||||
/* modulus size in bytes */
|
/* modulus size in bytes */
|
||||||
msize = modulus_size / WOLFSSL_BIT_SIZE;
|
msize = modulus_size / WOLFSSL_BIT_SIZE;
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
/* allocate ram */
|
/* allocate ram */
|
||||||
buf = (unsigned char *)XMALLOC((size_t)(msize - qsize),
|
buf = (unsigned char *)XMALLOC((size_t)(msize - qsize),
|
||||||
dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (buf == NULL) {
|
if (buf == NULL) {
|
||||||
return MEMORY_E;
|
return MEMORY_E;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
if (sizeof(buf) < (size_t)(msize - qsize)) {
|
||||||
|
return BUFFER_E;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* make a random string that will be multiplied against q */
|
/* make a random string that will be multiplied against q */
|
||||||
err = wc_RNG_GenerateBlock(rng, buf, (word32)(msize - qsize));
|
err = wc_RNG_GenerateBlock(rng, buf, (word32)(msize - qsize));
|
||||||
if (err != MP_OKAY) {
|
if (err != MP_OKAY) {
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
XFREE(buf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(buf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -298,7 +314,7 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
|||||||
/* force even */
|
/* force even */
|
||||||
buf[msize - qsize - 1] &= (unsigned char)~1;
|
buf[msize - qsize - 1] &= (unsigned char)~1;
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
if (((tmp = (mp_int *)XMALLOC(sizeof(*tmp), NULL, DYNAMIC_TYPE_WOLF_BIGINT)) == NULL) ||
|
if (((tmp = (mp_int *)XMALLOC(sizeof(*tmp), NULL, DYNAMIC_TYPE_WOLF_BIGINT)) == NULL) ||
|
||||||
((tmp2 = (mp_int *)XMALLOC(sizeof(*tmp2), NULL, DYNAMIC_TYPE_WOLF_BIGINT)) == NULL))
|
((tmp2 = (mp_int *)XMALLOC(sizeof(*tmp2), NULL, DYNAMIC_TYPE_WOLF_BIGINT)) == NULL))
|
||||||
err = MEMORY_E;
|
err = MEMORY_E;
|
||||||
@ -380,9 +396,8 @@ int wc_MakeDsaParameters(WC_RNG *rng, int modulus_size, DsaKey *dsa)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
XFREE(buf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(buf, dsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
|
||||||
if (tmp != NULL) {
|
if (tmp != NULL) {
|
||||||
mp_clear(tmp);
|
mp_clear(tmp);
|
||||||
XFREE(tmp, NULL, DYNAMIC_TYPE_WOLF_BIGINT);
|
XFREE(tmp, NULL, DYNAMIC_TYPE_WOLF_BIGINT);
|
||||||
|
@ -23969,21 +23969,31 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
byte signature[40];
|
byte signature[40];
|
||||||
int key_inited = 0;
|
int key_inited = 0;
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
byte* der = 0;
|
int derSz = 0;
|
||||||
int derIn_inited = 0;
|
int derIn_inited = 0;
|
||||||
int genKey_inited = 0;
|
int genKey_inited = 0;
|
||||||
#endif
|
#endif
|
||||||
#define DSA_TEST_TMP_SIZE 1024
|
#define DSA_TEST_TMP_SIZE 1024
|
||||||
|
|
||||||
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
byte *tmp = (byte *)XMALLOC(DSA_TEST_TMP_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
byte *tmp = (byte*)XMALLOC(DSA_TEST_TMP_SIZE, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
DsaKey *key = (DsaKey *)XMALLOC(sizeof *key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
DsaKey *key = (DsaKey*)XMALLOC(sizeof(*key), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
DsaKey *derIn = (DsaKey *)XMALLOC(sizeof *derIn, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
DsaKey *derIn = (DsaKey*)XMALLOC(sizeof(*derIn), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
DsaKey *genKey = (DsaKey *)XMALLOC(sizeof *genKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
DsaKey *genKey = (DsaKey*)XMALLOC(sizeof(*genKey), HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
byte* der = NULL;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
byte tmp[DSA_TEST_TMP_SIZE];
|
||||||
|
DsaKey key[1];
|
||||||
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
|
DsaKey derIn[1];
|
||||||
|
DsaKey genKey[1];
|
||||||
|
byte der[FOURK_BUF];
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
WOLFSSL_ENTER("dsa_test");
|
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
if ((tmp == NULL) ||
|
if ((tmp == NULL) ||
|
||||||
(key == NULL)
|
(key == NULL)
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
@ -23994,15 +24004,10 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
ret = WC_TEST_RET_ENC_NC;
|
ret = WC_TEST_RET_ENC_NC;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
byte tmp[1024];
|
|
||||||
DsaKey key[1];
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
|
||||||
DsaKey derIn[1];
|
|
||||||
DsaKey genKey[1];
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
WOLFSSL_ENTER("dsa_test");
|
||||||
|
|
||||||
#ifdef USE_CERT_BUFFERS_1024
|
#ifdef USE_CERT_BUFFERS_1024
|
||||||
XMEMCPY(tmp, dsa_key_der_1024, sizeof_dsa_key_der_1024);
|
XMEMCPY(tmp, dsa_key_der_1024, sizeof_dsa_key_der_1024);
|
||||||
bytes = sizeof_dsa_key_der_1024;
|
bytes = sizeof_dsa_key_der_1024;
|
||||||
@ -24011,7 +24016,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
bytes = sizeof_dsa_key_der_2048;
|
bytes = sizeof_dsa_key_der_2048;
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
XFILE file = XFOPEN(dsaKey, "rb");
|
XFILE file = XFOPEN(dsaKey, "rb");
|
||||||
if (!file)
|
if (!file)
|
||||||
ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out);
|
ERROR_OUT(WC_TEST_RET_ENC_ERRNO, out);
|
||||||
|
|
||||||
@ -24066,9 +24071,6 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
key_inited = 1;
|
key_inited = 1;
|
||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
{
|
|
||||||
int derSz = 0;
|
|
||||||
|
|
||||||
ret = wc_InitDsaKey(genKey);
|
ret = wc_InitDsaKey(genKey);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||||
@ -24082,9 +24084,11 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||||
|
|
||||||
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
der = (byte*)XMALLOC(FOURK_BUF, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
der = (byte*)XMALLOC(FOURK_BUF, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (der == NULL)
|
if (der == NULL)
|
||||||
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
ERROR_OUT(WC_TEST_RET_ENC_NC, out);
|
||||||
|
#endif
|
||||||
|
|
||||||
derSz = wc_DsaKeyToDer(genKey, der, FOURK_BUF);
|
derSz = wc_DsaKeyToDer(genKey, der, FOURK_BUF);
|
||||||
if (derSz < 0)
|
if (derSz < 0)
|
||||||
@ -24104,14 +24108,9 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
ret = wc_DsaPrivateKeyDecode(der, &idx, derIn, (word32)derSz);
|
ret = wc_DsaPrivateKeyDecode(der, &idx, derIn, (word32)derSz);
|
||||||
if (ret != 0)
|
if (ret != 0)
|
||||||
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
ERROR_OUT(WC_TEST_RET_ENC_EC(ret), out);
|
||||||
}
|
|
||||||
#endif /* WOLFSSL_KEY_GEN */
|
#endif /* WOLFSSL_KEY_GEN */
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
|
||||||
XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(tmp, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
@ -24120,7 +24119,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
wc_FreeDsaKey(key);
|
wc_FreeDsaKey(key);
|
||||||
XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(key, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
}
|
}
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
|
XFREE(der, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (derIn) {
|
if (derIn) {
|
||||||
if (derIn_inited)
|
if (derIn_inited)
|
||||||
wc_FreeDsaKey(derIn);
|
wc_FreeDsaKey(derIn);
|
||||||
@ -24131,20 +24131,17 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
wc_FreeDsaKey(genKey);
|
wc_FreeDsaKey(genKey);
|
||||||
XFREE(genKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
XFREE(genKey, HEAP_HINT, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#else
|
||||||
#else /* !WOLFSSL_SMALL_STACK || WOLFSSL_NO_MALLOC */
|
|
||||||
|
|
||||||
if (key_inited)
|
if (key_inited)
|
||||||
wc_FreeDsaKey(key);
|
wc_FreeDsaKey(key);
|
||||||
#ifdef WOLFSSL_KEY_GEN
|
#ifdef WOLFSSL_KEY_GEN
|
||||||
if (derIn_inited)
|
if (derIn_inited)
|
||||||
wc_FreeDsaKey(derIn);
|
wc_FreeDsaKey(derIn);
|
||||||
if (genKey_inited)
|
if (genKey_inited)
|
||||||
wc_FreeDsaKey(genKey);
|
wc_FreeDsaKey(genKey);
|
||||||
#endif
|
#endif
|
||||||
|
#endif /* WOLFSSL_SMALL_STACK && !WOLFSSL_NO_MALLOC */
|
||||||
#endif
|
|
||||||
|
|
||||||
if (rng_inited)
|
if (rng_inited)
|
||||||
wc_FreeRng(&rng);
|
wc_FreeRng(&rng);
|
||||||
@ -24152,7 +24149,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t dsa_test(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* NO_DSA */
|
#endif /* !NO_DSA */
|
||||||
|
|
||||||
#ifdef WOLFCRYPT_HAVE_SRP
|
#ifdef WOLFCRYPT_HAVE_SRP
|
||||||
|
|
||||||
@ -24222,7 +24219,7 @@ static wc_test_ret_t srp_test_digest(SrpType dgstType)
|
|||||||
byte salt[10];
|
byte salt[10];
|
||||||
|
|
||||||
byte verifier[192];
|
byte verifier[192];
|
||||||
word32 v_size = sizeof(verifier);
|
word32 v_size = (word32)sizeof(verifier);
|
||||||
|
|
||||||
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
|
word32 clientProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
word32 serverProofSz = SRP_MAX_DIGEST_SIZE;
|
word32 serverProofSz = SRP_MAX_DIGEST_SIZE;
|
||||||
@ -34311,7 +34308,8 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t ecc_test(void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(WOLFSSL_CUSTOM_CURVES)
|
#if defined(WOLFSSL_CUSTOM_CURVES) && !defined(WOLFSSL_NO_MALLOC)
|
||||||
|
/* custom curves requires allocation of ecc_set_type in asn.c */
|
||||||
ret = ecc_test_custom_curves(&rng);
|
ret = ecc_test_custom_curves(&rng);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
printf("Custom\n");
|
printf("Custom\n");
|
||||||
|
@ -1107,8 +1107,6 @@ enum ECC_TYPES
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum Misc_ASN {
|
enum Misc_ASN {
|
||||||
MAX_SALT_SIZE = 64, /* MAX PKCS Salt length */
|
|
||||||
MAX_IV_SIZE = 64, /* MAX PKCS Iv length */
|
|
||||||
ASN_BOOL_SIZE = 2, /* including type */
|
ASN_BOOL_SIZE = 2, /* including type */
|
||||||
ASN_ECC_HEADER_SZ = 2, /* String type + 1 byte len */
|
ASN_ECC_HEADER_SZ = 2, /* String type + 1 byte len */
|
||||||
ASN_ECC_CONTEXT_SZ = 2, /* Content specific type + 1 byte len */
|
ASN_ECC_CONTEXT_SZ = 2, /* Content specific type + 1 byte len */
|
||||||
@ -1129,60 +1127,10 @@ enum Misc_ASN {
|
|||||||
,
|
,
|
||||||
DSA_PARAM_INTS = 3, /* DSA parameter ints */
|
DSA_PARAM_INTS = 3, /* DSA parameter ints */
|
||||||
RSA_PUB_INTS = 2, /* RSA ints in public key */
|
RSA_PUB_INTS = 2, /* RSA ints in public key */
|
||||||
DSA_PUB_INTS = 4, /* DSA ints in public key */
|
|
||||||
DSA_INTS = 5, /* DSA ints in private key */
|
|
||||||
MIN_DATE_SIZE = 12,
|
MIN_DATE_SIZE = 12,
|
||||||
MAX_DATE_SIZE = 32,
|
MAX_DATE_SIZE = 32,
|
||||||
ASN_GEN_TIME_SZ = 15, /* 7 numbers * 2 + Zulu tag */
|
ASN_GEN_TIME_SZ = 15, /* 7 numbers * 2 + Zulu tag */
|
||||||
#ifdef HAVE_SPHINCS
|
|
||||||
MAX_ENCODED_SIG_SZ = 51200,
|
|
||||||
#elif defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
|
||||||
MAX_ENCODED_SIG_SZ = 5120,
|
|
||||||
#elif !defined(NO_RSA)
|
|
||||||
#ifdef WOLFSSL_HAPROXY
|
|
||||||
MAX_ENCODED_SIG_SZ = 1024, /* Supports 8192 bit keys */
|
|
||||||
#else
|
|
||||||
MAX_ENCODED_SIG_SZ = 512, /* Supports 4096 bit keys */
|
|
||||||
#endif
|
|
||||||
#elif defined(HAVE_ECC)
|
|
||||||
MAX_ENCODED_SIG_SZ = 140,
|
|
||||||
#elif defined(HAVE_CURVE448)
|
|
||||||
MAX_ENCODED_SIG_SZ = 114,
|
|
||||||
#else
|
|
||||||
MAX_ENCODED_SIG_SZ = 64,
|
|
||||||
#endif
|
|
||||||
MAX_SIG_SZ = 256,
|
|
||||||
MAX_ALGO_SZ = 20,
|
|
||||||
MAX_LENGTH_SZ = WOLFSSL_ASN_MAX_LENGTH_SZ, /* Max length size for DER encoding */
|
|
||||||
MAX_SHORT_SZ = (1 + MAX_LENGTH_SZ), /* asn int + byte len + 4 byte length */
|
|
||||||
MAX_SEQ_SZ = (1 + MAX_LENGTH_SZ), /* enum(seq | con) + length(5) */
|
|
||||||
MAX_SET_SZ = (1 + MAX_LENGTH_SZ), /* enum(set | con) + length(5) */
|
|
||||||
MAX_OCTET_STR_SZ = (1 + MAX_LENGTH_SZ), /* enum(set | con) + length(5) */
|
|
||||||
MAX_EXP_SZ = (1 + MAX_LENGTH_SZ), /* enum(contextspec|con|exp) + length(5) */
|
|
||||||
MAX_PRSTR_SZ = (1 + MAX_LENGTH_SZ), /* enum(prstr) + length(5) */
|
|
||||||
MAX_VERSION_SZ = 5, /* enum + id + version(byte) + (header(2))*/
|
|
||||||
MAX_ENCODED_DIG_ASN_SZ = (5 + MAX_LENGTH_SZ), /* enum(bit or octet) + length(5) */
|
|
||||||
MAX_ENCODED_DIG_SZ = 64 + MAX_ENCODED_DIG_ASN_SZ, /* asn header + sha512 */
|
|
||||||
MAX_RSA_INT_SZ = (512 + 1 + MAX_LENGTH_SZ), /* RSA raw sz 4096 for bits + tag + len(5) */
|
|
||||||
MAX_DSA_INT_SZ = (384 + 1 + MAX_LENGTH_SZ), /* DSA raw sz 3072 for bits + tag + len(5) */
|
|
||||||
MAX_DSA_PUBKEY_SZ = (DSA_PUB_INTS * MAX_DSA_INT_SZ) + (2 * MAX_SEQ_SZ) +
|
|
||||||
2 + MAX_LENGTH_SZ, /* Maximum size of a DSA public
|
|
||||||
key taken from wc_SetDsaPublicKey. */
|
|
||||||
MAX_DSA_PRIVKEY_SZ = (DSA_INTS * MAX_DSA_INT_SZ) + MAX_SEQ_SZ +
|
|
||||||
MAX_VERSION_SZ, /* Maximum size of a DSA Private
|
|
||||||
key taken from DsaKeyIntsToDer. */
|
|
||||||
#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
|
||||||
MAX_PQC_PUBLIC_KEY_SZ = 2592, /* Maximum size of a Dilithium public key. */
|
|
||||||
#endif
|
|
||||||
MAX_RSA_E_SZ = 16, /* Max RSA public e size */
|
|
||||||
MAX_CA_SZ = 32, /* Max encoded CA basic constraint length */
|
|
||||||
MAX_SN_SZ = 35, /* Max encoded serial number (INT) length */
|
|
||||||
MAX_DER_DIGEST_SZ = MAX_ENCODED_DIG_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
|
|
||||||
/* Maximum DER digest size */
|
|
||||||
MAX_DER_DIGEST_ASN_SZ = MAX_ENCODED_DIG_ASN_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
|
|
||||||
/* Maximum DER digest ASN header size */
|
|
||||||
/* Max X509 header length indicates the max length + 2 ('\n', '\0') */
|
|
||||||
MAX_X509_HEADER_SZ = (37 + 2), /* Maximum PEM Header/Footer Size */
|
|
||||||
#ifdef WOLFSSL_CERT_GEN
|
#ifdef WOLFSSL_CERT_GEN
|
||||||
#ifdef WOLFSSL_CERT_REQ
|
#ifdef WOLFSSL_CERT_REQ
|
||||||
/* Max encoded cert req attributes length */
|
/* Max encoded cert req attributes length */
|
||||||
@ -1195,7 +1143,7 @@ enum Misc_ASN {
|
|||||||
#else
|
#else
|
||||||
MAX_EXTENSIONS_SZ = 1 + MAX_LENGTH_SZ + MAX_CA_SZ,
|
MAX_EXTENSIONS_SZ = 1 + MAX_LENGTH_SZ + MAX_CA_SZ,
|
||||||
#endif
|
#endif
|
||||||
/* Max total extensions, id + len + others */
|
/* Max total extensions, id + len + others */
|
||||||
#endif
|
#endif
|
||||||
#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
|
#if defined(WOLFSSL_CERT_EXT) || defined(OPENSSL_EXTRA) || \
|
||||||
defined(HAVE_PKCS7) || defined(OPENSSL_EXTRA_X509_SMALL) || \
|
defined(HAVE_PKCS7) || defined(OPENSSL_EXTRA_X509_SMALL) || \
|
||||||
@ -1220,16 +1168,6 @@ enum Misc_ASN {
|
|||||||
OCSP_NONCE_EXT_SZ = 35, /* OCSP Nonce Extension size */
|
OCSP_NONCE_EXT_SZ = 35, /* OCSP Nonce Extension size */
|
||||||
MAX_OCSP_EXT_SZ = 58, /* Max OCSP Extension length */
|
MAX_OCSP_EXT_SZ = 58, /* Max OCSP Extension length */
|
||||||
MAX_OCSP_NONCE_SZ = 16, /* OCSP Nonce size */
|
MAX_OCSP_NONCE_SZ = 16, /* OCSP Nonce size */
|
||||||
#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
|
||||||
MAX_PUBLIC_KEY_SZ = MAX_PQC_PUBLIC_KEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2,
|
|
||||||
#else
|
|
||||||
MAX_PUBLIC_KEY_SZ = MAX_DSA_PUBKEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2,
|
|
||||||
#endif
|
|
||||||
#ifdef WOLFSSL_ENCRYPTED_KEYS
|
|
||||||
HEADER_ENCRYPTED_KEY_SIZE = 88,/* Extra header size for encrypted key */
|
|
||||||
#else
|
|
||||||
HEADER_ENCRYPTED_KEY_SIZE = 0,
|
|
||||||
#endif
|
|
||||||
TRAILING_ZERO = 1, /* Used for size of zero pad */
|
TRAILING_ZERO = 1, /* Used for size of zero pad */
|
||||||
ASN_TAG_SZ = 1, /* single byte ASN.1 tag */
|
ASN_TAG_SZ = 1, /* single byte ASN.1 tag */
|
||||||
ASN_INDEF_END_SZ = 2, /* 0x00 0x00 at end of indef */
|
ASN_INDEF_END_SZ = 2, /* 0x00 0x00 at end of indef */
|
||||||
|
@ -1991,8 +1991,82 @@ WOLFSSL_API word32 CheckRunTimeSettings(void);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#ifdef WOLFSSL_CERT_GEN
|
/* Maximum ASN sizes */
|
||||||
|
#ifndef WOLFSSL_ASN_MAX_LENGTH_SZ
|
||||||
|
#define WOLFSSL_ASN_MAX_LENGTH_SZ 5 /* 1 byte length + 4 bytes of number */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
enum Max_ASN {
|
||||||
|
DSA_PUB_INTS = 4, /* DSA ints in public key */
|
||||||
|
DSA_INTS = 5, /* DSA ints in private key */
|
||||||
|
MAX_SALT_SIZE = 64, /* MAX PKCS Salt length */
|
||||||
|
MAX_IV_SIZE = 64, /* MAX PKCS Iv length */
|
||||||
|
#ifdef HAVE_SPHINCS
|
||||||
|
MAX_ENCODED_SIG_SZ = 51200,
|
||||||
|
#elif defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
||||||
|
MAX_ENCODED_SIG_SZ = 5120,
|
||||||
|
#elif !defined(NO_RSA)
|
||||||
|
#ifdef WOLFSSL_HAPROXY
|
||||||
|
MAX_ENCODED_SIG_SZ = 1024, /* Supports 8192 bit keys */
|
||||||
|
#else
|
||||||
|
MAX_ENCODED_SIG_SZ = 512, /* Supports 4096 bit keys */
|
||||||
|
#endif
|
||||||
|
#elif defined(HAVE_ECC)
|
||||||
|
MAX_ENCODED_SIG_SZ = 140,
|
||||||
|
#elif defined(HAVE_CURVE448)
|
||||||
|
MAX_ENCODED_SIG_SZ = 114,
|
||||||
|
#else
|
||||||
|
MAX_ENCODED_SIG_SZ = 64,
|
||||||
|
#endif
|
||||||
|
MAX_SIG_SZ = 256,
|
||||||
|
MAX_ALGO_SZ = 20,
|
||||||
|
MAX_LENGTH_SZ = WOLFSSL_ASN_MAX_LENGTH_SZ, /* Max length size for DER encoding */
|
||||||
|
MAX_SHORT_SZ = (1 + MAX_LENGTH_SZ), /* asn int + byte len + 4 byte length */
|
||||||
|
MAX_SEQ_SZ = (1 + MAX_LENGTH_SZ), /* enum(seq | con) + length(5) */
|
||||||
|
MAX_SET_SZ = (1 + MAX_LENGTH_SZ), /* enum(set | con) + length(5) */
|
||||||
|
MAX_OCTET_STR_SZ = (1 + MAX_LENGTH_SZ), /* enum(set | con) + length(5) */
|
||||||
|
MAX_EXP_SZ = (1 + MAX_LENGTH_SZ), /* enum(contextspec|con|exp) + length(5) */
|
||||||
|
MAX_PRSTR_SZ = (1 + MAX_LENGTH_SZ), /* enum(prstr) + length(5) */
|
||||||
|
MAX_VERSION_SZ = 5, /* enum + id + version(byte) + (header(2))*/
|
||||||
|
MAX_ENCODED_DIG_ASN_SZ = (5 + MAX_LENGTH_SZ), /* enum(bit or octet) + length(5) */
|
||||||
|
MAX_ENCODED_DIG_SZ = 64 + MAX_ENCODED_DIG_ASN_SZ, /* asn header + sha512 */
|
||||||
|
MAX_RSA_INT_SZ = (512 + 1 + MAX_LENGTH_SZ), /* RSA raw sz 4096 for bits + tag + len(5) */
|
||||||
|
MAX_DSA_INT_SZ = (384 + 1 + MAX_LENGTH_SZ), /* DSA raw sz 3072 for bits + tag + len(5) */
|
||||||
|
MAX_DSA_PUBKEY_SZ = (DSA_PUB_INTS * MAX_DSA_INT_SZ) + (2 * MAX_SEQ_SZ) +
|
||||||
|
2 + MAX_LENGTH_SZ, /* Maximum size of a DSA public
|
||||||
|
key taken from wc_SetDsaPublicKey. */
|
||||||
|
MAX_DSA_PRIVKEY_SZ = (DSA_INTS * MAX_DSA_INT_SZ) + MAX_SEQ_SZ +
|
||||||
|
MAX_VERSION_SZ, /* Maximum size of a DSA Private
|
||||||
|
key taken from DsaKeyIntsToDer. */
|
||||||
|
#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
||||||
|
MAX_PQC_PUBLIC_KEY_SZ = 2592, /* Maximum size of a Dilithium public key. */
|
||||||
|
#endif
|
||||||
|
MAX_RSA_E_SZ = 16, /* Max RSA public e size */
|
||||||
|
MAX_CA_SZ = 32, /* Max encoded CA basic constraint length */
|
||||||
|
MAX_SN_SZ = 35, /* Max encoded serial number (INT) length */
|
||||||
|
MAX_DER_DIGEST_SZ = MAX_ENCODED_DIG_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
|
||||||
|
/* Maximum DER digest size */
|
||||||
|
MAX_DER_DIGEST_ASN_SZ = MAX_ENCODED_DIG_ASN_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ,
|
||||||
|
/* Maximum DER digest ASN header size */
|
||||||
|
/* Max X509 header length indicates the
|
||||||
|
* max length + 2 ('\n', '\0') */
|
||||||
|
MAX_X509_HEADER_SZ = (37 + 2), /* Maximum PEM Header/Footer Size */
|
||||||
|
#if defined(HAVE_FALCON) || defined(HAVE_DILITHIUM)
|
||||||
|
MAX_PUBLIC_KEY_SZ = MAX_PQC_PUBLIC_KEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2,
|
||||||
|
#else
|
||||||
|
MAX_PUBLIC_KEY_SZ = MAX_DSA_PUBKEY_SZ + MAX_ALGO_SZ + MAX_SEQ_SZ * 2,
|
||||||
|
#endif
|
||||||
|
#ifdef WOLFSSL_ENCRYPTED_KEYS
|
||||||
|
HEADER_ENCRYPTED_KEY_SIZE = 88 /* Extra header size for encrypted key */
|
||||||
|
#else
|
||||||
|
HEADER_ENCRYPTED_KEY_SIZE = 0
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_CERT_GEN
|
||||||
|
#ifdef WOLFSSL_NO_MALLOC
|
||||||
|
#include "wolfssl/wolfcrypt/hash.h" /* for max sizes */
|
||||||
|
#endif
|
||||||
/* Used in asn.c MakeSignature for ECC and RSA non-blocking/async */
|
/* Used in asn.c MakeSignature for ECC and RSA non-blocking/async */
|
||||||
enum CertSignState {
|
enum CertSignState {
|
||||||
CERTSIGN_STATE_BEGIN,
|
CERTSIGN_STATE_BEGIN,
|
||||||
@ -2002,11 +2076,22 @@ WOLFSSL_API word32 CheckRunTimeSettings(void);
|
|||||||
};
|
};
|
||||||
|
|
||||||
typedef struct CertSignCtx {
|
typedef struct CertSignCtx {
|
||||||
|
#ifdef WOLFSSL_NO_MALLOC
|
||||||
|
byte sig[MAX_ENCODED_SIG_SZ];
|
||||||
|
byte digest[WC_MAX_DIGEST_SIZE];
|
||||||
|
#ifndef NO_RSA
|
||||||
|
byte encSig[MAX_DER_DIGEST_SZ];
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
byte* sig;
|
byte* sig;
|
||||||
byte* digest;
|
byte* digest;
|
||||||
#ifndef NO_RSA
|
#ifndef NO_RSA
|
||||||
byte* encSig;
|
byte* encSig;
|
||||||
int encSigSz;
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NO_RSA
|
||||||
|
int encSigSz;
|
||||||
#endif
|
#endif
|
||||||
int state; /* enum CertSignState */
|
int state; /* enum CertSignState */
|
||||||
} CertSignCtx;
|
} CertSignCtx;
|
||||||
|
Reference in New Issue
Block a user