mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-31 19:24:42 +02:00
ssl: refactoring CyaSSL_PemCertToDer to have a single return point.
This commit is contained in:
116
src/ssl.c
116
src/ssl.c
@@ -3199,83 +3199,79 @@ int CyaSSL_CTX_der_load_verify_locations(CYASSL_CTX* ctx, const char* file,
|
|||||||
int CyaSSL_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz)
|
int CyaSSL_PemCertToDer(const char* fileName, unsigned char* derBuf, int derSz)
|
||||||
{
|
{
|
||||||
#ifdef CYASSL_SMALL_STACK
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
EncryptedInfo* info;
|
||||||
byte staticBuffer[1]; /* force XMALLOC */
|
byte staticBuffer[1]; /* force XMALLOC */
|
||||||
#else
|
#else
|
||||||
|
EncryptedInfo info[1];
|
||||||
byte staticBuffer[FILE_BUFFER_SIZE];
|
byte staticBuffer[FILE_BUFFER_SIZE];
|
||||||
#endif
|
#endif
|
||||||
byte* fileBuf = staticBuffer;
|
byte* fileBuf = staticBuffer;
|
||||||
int dynamic = 0;
|
int dynamic = 0;
|
||||||
int ret;
|
int ret = 0;
|
||||||
int ecc = 0;
|
int ecc = 0;
|
||||||
long sz = 0;
|
long sz = 0;
|
||||||
XFILE file = XFOPEN(fileName, "rb");
|
XFILE file = XFOPEN(fileName, "rb");
|
||||||
buffer converted;
|
buffer converted;
|
||||||
|
|
||||||
CYASSL_ENTER("CyaSSL_PemCertToDer");
|
CYASSL_ENTER("CyaSSL_PemCertToDer");
|
||||||
converted.buffer = 0;
|
|
||||||
|
|
||||||
if (file == XBADFILE)
|
if (file == XBADFILE)
|
||||||
return SSL_BAD_FILE;
|
|
||||||
|
|
||||||
XFSEEK(file, 0, XSEEK_END);
|
|
||||||
|
|
||||||
sz = XFTELL(file);
|
|
||||||
if (sz < 0) {
|
|
||||||
XFCLOSE(file);
|
|
||||||
return SSL_BAD_FILE;
|
|
||||||
}
|
|
||||||
|
|
||||||
XREWIND(file);
|
|
||||||
|
|
||||||
if (sz > (long)sizeof(staticBuffer)) {
|
|
||||||
fileBuf = (byte*) XMALLOC(sz, 0, DYNAMIC_TYPE_FILE);
|
|
||||||
if (fileBuf == NULL) {
|
|
||||||
XFCLOSE(file);
|
|
||||||
return SSL_BAD_FILE;
|
|
||||||
}
|
|
||||||
dynamic = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( (ret = (int)XFREAD(fileBuf, sz, 1, file)) < 0)
|
|
||||||
ret = SSL_BAD_FILE;
|
ret = SSL_BAD_FILE;
|
||||||
else {
|
else {
|
||||||
#ifdef CYASSL_SMALL_STACK
|
XFSEEK(file, 0, XSEEK_END);
|
||||||
EncryptedInfo* info;
|
sz = XFTELL(file);
|
||||||
#else
|
XREWIND(file);
|
||||||
EncryptedInfo info[1];
|
|
||||||
#endif
|
if (sz < 0) {
|
||||||
|
ret = SSL_BAD_FILE;
|
||||||
#ifdef CYASSL_SMALL_STACK
|
}
|
||||||
info = (EncryptedInfo*)XMALLOC(sizeof(EncryptedInfo), NULL,
|
else if (sz > (long)sizeof(staticBuffer)) {
|
||||||
|
fileBuf = (byte*)XMALLOC(sz, 0, DYNAMIC_TYPE_FILE);
|
||||||
|
if (fileBuf == NULL)
|
||||||
|
ret = MEMORY_E;
|
||||||
|
else
|
||||||
|
dynamic = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
converted.buffer = 0;
|
||||||
|
|
||||||
|
if (ret == 0) {
|
||||||
|
if ( (ret = (int)XFREAD(fileBuf, sz, 1, file)) < 0)
|
||||||
|
ret = SSL_BAD_FILE;
|
||||||
|
else {
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
info = (EncryptedInfo*)XMALLOC(sizeof(EncryptedInfo), NULL,
|
||||||
DYNAMIC_TYPE_TMP_BUFFER);
|
DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
if (info == NULL)
|
if (info == NULL)
|
||||||
ret = MEMORY_E;
|
ret = MEMORY_E;
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
ret = PemToDer(fileBuf, sz, CA_TYPE, &converted, 0, info, &ecc);
|
ret = PemToDer(fileBuf, sz, CA_TYPE, &converted, 0, info,
|
||||||
|
&ecc);
|
||||||
|
#ifdef CYASSL_SMALL_STACK
|
||||||
|
XFREE(info, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CYASSL_SMALL_STACK
|
if (ret == 0) {
|
||||||
XFREE(info, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
if (converted.length < (word32)derSz) {
|
||||||
#endif
|
XMEMCPY(derBuf, converted.buffer, converted.length);
|
||||||
|
ret = converted.length;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ret = BUFFER_E;
|
||||||
|
}
|
||||||
|
|
||||||
|
XFREE(converted.buffer, 0, DYNAMIC_TYPE_CA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XFCLOSE(file);
|
||||||
|
if (dynamic)
|
||||||
|
XFREE(fileBuf, 0, DYNAMIC_TYPE_FILE);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ret == 0) {
|
|
||||||
if (converted.length < (word32)derSz) {
|
|
||||||
XMEMCPY(derBuf, converted.buffer, converted.length);
|
|
||||||
ret = converted.length;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ret = BUFFER_E;
|
|
||||||
}
|
|
||||||
|
|
||||||
XFREE(converted.buffer, 0, DYNAMIC_TYPE_CA);
|
|
||||||
if (dynamic)
|
|
||||||
XFREE(fileBuf, 0, DYNAMIC_TYPE_FILE);
|
|
||||||
|
|
||||||
XFCLOSE(file);
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user