mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 10:47:28 +02:00
Merge pull request #6275 from douzzer/20230406-XREWIND-fixes-contd
20230406-XREWIND-fixes-contd
This commit is contained in:
21
src/pk.c
21
src/pk.c
@ -4456,12 +4456,7 @@ int wolfSSL_RSA_GenAdd(WOLFSSL_RSA* rsa)
|
|||||||
int err;
|
int err;
|
||||||
mp_int* t = NULL;
|
mp_int* t = NULL;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
mp_int *tmp = (mp_int *)XMALLOC(sizeof(*tmp), rsa->heap,
|
mp_int *tmp = NULL;
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
|
||||||
if (tmp == NULL) {
|
|
||||||
WOLFSSL_ERROR_MSG("Memory allocation failure");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
mp_int tmp[1];
|
mp_int tmp[1];
|
||||||
#endif
|
#endif
|
||||||
@ -4475,6 +4470,17 @@ int wolfSSL_RSA_GenAdd(WOLFSSL_RSA* rsa)
|
|||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
|
if (ret == 1) {
|
||||||
|
tmp = (mp_int *)XMALLOC(sizeof(*tmp), rsa->heap,
|
||||||
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
if (tmp == NULL) {
|
||||||
|
WOLFSSL_ERROR_MSG("Memory allocation failure");
|
||||||
|
ret = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (ret == 1) {
|
if (ret == 1) {
|
||||||
/* Initialize temp MP integer. */
|
/* Initialize temp MP integer. */
|
||||||
if (mp_init(tmp) != MP_OKAY) {
|
if (mp_init(tmp) != MP_OKAY) {
|
||||||
@ -4523,7 +4529,8 @@ int wolfSSL_RSA_GenAdd(WOLFSSL_RSA* rsa)
|
|||||||
mp_clear(t);
|
mp_clear(t);
|
||||||
|
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
XFREE(tmp, rsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
if (tmp != NULL)
|
||||||
|
XFREE(tmp, rsa->heap, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -33429,7 +33429,7 @@ static int set_curves_list(WOLFSSL* ssl, WOLFSSL_CTX *ctx, const char* names)
|
|||||||
char name[MAX_CURVE_NAME_SZ];
|
char name[MAX_CURVE_NAME_SZ];
|
||||||
byte groups_len = 0;
|
byte groups_len = 0;
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifdef WOLFSSL_SMALL_STACK
|
||||||
void *heap = ssl? ssl->heap : ctx->heap;
|
void *heap = ssl? ssl->heap : ctx ? ctx->heap : NULL;
|
||||||
int *groups;
|
int *groups;
|
||||||
#else
|
#else
|
||||||
int groups[WOLFSSL_MAX_GROUP_COUNT];
|
int groups[WOLFSSL_MAX_GROUP_COUNT];
|
||||||
|
@ -23484,14 +23484,14 @@ int wc_PubKeyPemToDer(const unsigned char* pem, int pemSz,
|
|||||||
#ifdef WOLFSSL_CERT_GEN
|
#ifdef WOLFSSL_CERT_GEN
|
||||||
int wc_PemCertToDer_ex(const char* fileName, DerBuffer** der)
|
int wc_PemCertToDer_ex(const char* fileName, DerBuffer** der)
|
||||||
{
|
{
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifndef WOLFSSL_SMALL_STACK
|
||||||
byte staticBuffer[1]; /* force XMALLOC */
|
|
||||||
#else
|
|
||||||
byte staticBuffer[FILE_BUFFER_SIZE];
|
byte staticBuffer[FILE_BUFFER_SIZE];
|
||||||
#endif
|
#endif
|
||||||
byte* fileBuf = staticBuffer;
|
byte* fileBuf = NULL;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
XFILE file = NULL;
|
XFILE file = XBADFILE;
|
||||||
|
int dynamic = 0;
|
||||||
|
long sz = 0;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wc_PemCertToDer");
|
WOLFSSL_ENTER("wc_PemCertToDer");
|
||||||
|
|
||||||
@ -23501,49 +23501,53 @@ int wc_PemCertToDer_ex(const char* fileName, DerBuffer** der)
|
|||||||
else {
|
else {
|
||||||
file = XFOPEN(fileName, "rb");
|
file = XFOPEN(fileName, "rb");
|
||||||
if (file == XBADFILE) {
|
if (file == XBADFILE) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
int dynamic = 0;
|
|
||||||
long sz = 0;
|
|
||||||
|
|
||||||
if (XFSEEK(file, 0, XSEEK_END) != 0) {
|
if (XFSEEK(file, 0, XSEEK_END) != 0) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (ret == 0) {
|
||||||
sz = XFTELL(file);
|
sz = XFTELL(file);
|
||||||
|
if (sz <= 0) {
|
||||||
|
ret = IO_FAILED_E;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (ret == 0) {
|
||||||
if (XFSEEK(file, 0, XSEEK_SET) != 0) {
|
if (XFSEEK(file, 0, XSEEK_SET) != 0) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (ret < 0) {
|
if (ret == 0) {
|
||||||
/* intentionally left empty. */
|
#ifndef WOLFSSL_SMALL_STACK
|
||||||
}
|
if (sz <= (long)sizeof(staticBuffer))
|
||||||
else if (sz <= 0) {
|
fileBuf = staticBuffer;
|
||||||
ret = BUFFER_E;
|
else
|
||||||
}
|
#endif
|
||||||
else if (sz > (long)sizeof(staticBuffer)) {
|
{
|
||||||
fileBuf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
fileBuf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
||||||
if (fileBuf == NULL)
|
if (fileBuf == NULL)
|
||||||
ret = MEMORY_E;
|
ret = MEMORY_E;
|
||||||
else
|
else
|
||||||
dynamic = 1;
|
dynamic = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
|
||||||
if ((size_t)XFREAD(fileBuf, 1, sz, file) != (size_t)sz) {
|
|
||||||
ret = BUFFER_E;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
ret = PemToDer(fileBuf, sz, CA_TYPE, der, 0, NULL,NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
XFCLOSE(file);
|
|
||||||
if (dynamic)
|
|
||||||
XFREE(fileBuf, NULL, DYNAMIC_TYPE_FILE);
|
|
||||||
}
|
}
|
||||||
|
if (ret == 0) {
|
||||||
|
if ((size_t)XFREAD(fileBuf, 1, sz, file) != (size_t)sz) {
|
||||||
|
ret = IO_FAILED_E;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ret = PemToDer(fileBuf, sz, CA_TYPE, der, 0, NULL,NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file != XBADFILE)
|
||||||
|
XFCLOSE(file);
|
||||||
|
if (dynamic)
|
||||||
|
XFREE(fileBuf, NULL, DYNAMIC_TYPE_FILE);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@ -23571,16 +23575,14 @@ int wc_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz)
|
|||||||
/* load pem public key from file into der buffer, return der size or error */
|
/* load pem public key from file into der buffer, return der size or error */
|
||||||
int wc_PemPubKeyToDer_ex(const char* fileName, DerBuffer** der)
|
int wc_PemPubKeyToDer_ex(const char* fileName, DerBuffer** der)
|
||||||
{
|
{
|
||||||
#ifdef WOLFSSL_SMALL_STACK
|
#ifndef WOLFSSL_SMALL_STACK
|
||||||
byte staticBuffer[1]; /* force XMALLOC */
|
|
||||||
#else
|
|
||||||
byte staticBuffer[FILE_BUFFER_SIZE];
|
byte staticBuffer[FILE_BUFFER_SIZE];
|
||||||
#endif
|
#endif
|
||||||
byte* fileBuf = staticBuffer;
|
byte* fileBuf = NULL;
|
||||||
int dynamic = 0;
|
int dynamic = 0;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
long sz = 0;
|
long sz = 0;
|
||||||
XFILE file = NULL;
|
XFILE file = XBADFILE;
|
||||||
|
|
||||||
WOLFSSL_ENTER("wc_PemPubKeyToDer");
|
WOLFSSL_ENTER("wc_PemPubKeyToDer");
|
||||||
|
|
||||||
@ -23590,26 +23592,33 @@ int wc_PemPubKeyToDer_ex(const char* fileName, DerBuffer** der)
|
|||||||
else {
|
else {
|
||||||
file = XFOPEN(fileName, "rb");
|
file = XFOPEN(fileName, "rb");
|
||||||
if (file == XBADFILE) {
|
if (file == XBADFILE) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (XFSEEK(file, 0, XSEEK_END) != 0) {
|
if (XFSEEK(file, 0, XSEEK_END) != 0) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
sz = XFTELL(file);
|
sz = XFTELL(file);
|
||||||
if (XFSEEK(file, 0, XSEEK_SET) != 0) {
|
if (sz <= 0) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (ret == 0) {
|
if (ret == 0) {
|
||||||
if (sz <= 0) {
|
if (XFSEEK(file, 0, XSEEK_SET) != 0) {
|
||||||
ret = BUFFER_E;
|
ret = IO_FAILED_E;
|
||||||
}
|
}
|
||||||
else if (sz > (long)sizeof(staticBuffer)) {
|
}
|
||||||
|
if (ret == 0) {
|
||||||
|
#ifndef WOLFSSL_SMALL_STACK
|
||||||
|
if (sz <= (long)sizeof(staticBuffer))
|
||||||
|
fileBuf = staticBuffer;
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
fileBuf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
fileBuf = (byte*)XMALLOC(sz, NULL, DYNAMIC_TYPE_FILE);
|
||||||
if (fileBuf == NULL)
|
if (fileBuf == NULL)
|
||||||
ret = MEMORY_E;
|
ret = MEMORY_E;
|
||||||
|
Reference in New Issue
Block a user