forked from wolfSSL/wolfssl
fastmath, maxfragment, md5, iopool, certreq, certgen
This commit is contained in:
176
src/ssl.c
176
src/ssl.c
@@ -2000,39 +2000,39 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
int dynamicType = 0;
|
||||
int sz = (int)longSz;
|
||||
|
||||
switch (type) {
|
||||
case CA_TYPE: /* same as below */
|
||||
case CERT_TYPE: header= BEGIN_CERT; footer= END_CERT; break;
|
||||
case CRL_TYPE: header= BEGIN_X509_CRL; footer= END_X509_CRL; break;
|
||||
case DH_PARAM_TYPE: header= BEGIN_DH_PARAM; footer= END_DH_PARAM; break;
|
||||
case CERTREQ_TYPE: header= BEGIN_CERT_REQ; footer= END_CERT_REQ; break;
|
||||
default: header= BEGIN_RSA_PRIV; footer= END_RSA_PRIV; break;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case CA_TYPE: dynamicType = DYNAMIC_TYPE_CA; break;
|
||||
case CERT_TYPE: dynamicType = DYNAMIC_TYPE_CERT; break;
|
||||
case CRL_TYPE: dynamicType = DYNAMIC_TYPE_CRL; break;
|
||||
default: dynamicType = DYNAMIC_TYPE_KEY; break;
|
||||
}
|
||||
switch (type) {
|
||||
case CA_TYPE: /* same as below */
|
||||
case CERT_TYPE: header= BEGIN_CERT; footer= END_CERT; break;
|
||||
case CRL_TYPE: header= BEGIN_X509_CRL; footer= END_X509_CRL; break;
|
||||
case DH_PARAM_TYPE: header= BEGIN_DH_PARAM; footer= END_DH_PARAM; break;
|
||||
case CERTREQ_TYPE: header= BEGIN_CERT_REQ; footer= END_CERT_REQ; break;
|
||||
default: header= BEGIN_RSA_PRIV; footer= END_RSA_PRIV; break;
|
||||
}
|
||||
|
||||
switch (type) {
|
||||
case CA_TYPE: dynamicType = DYNAMIC_TYPE_CA; break;
|
||||
case CERT_TYPE: dynamicType = DYNAMIC_TYPE_CERT; break;
|
||||
case CRL_TYPE: dynamicType = DYNAMIC_TYPE_CRL; break;
|
||||
default: dynamicType = DYNAMIC_TYPE_KEY; break;
|
||||
}
|
||||
|
||||
/* find header */
|
||||
for (;;) {
|
||||
headerEnd = XSTRNSTR((char*)buff, header, sz);
|
||||
|
||||
if (headerEnd || type != PRIVATEKEY_TYPE) {
|
||||
break;
|
||||
} else if (header == BEGIN_RSA_PRIV) {
|
||||
header = BEGIN_PRIV_KEY; footer = END_PRIV_KEY;
|
||||
} else if (header == BEGIN_PRIV_KEY) {
|
||||
header = BEGIN_ENC_PRIV_KEY; footer = END_ENC_PRIV_KEY;
|
||||
} else if (header == BEGIN_ENC_PRIV_KEY) {
|
||||
header = BEGIN_EC_PRIV; footer = END_EC_PRIV;
|
||||
} else if (header == BEGIN_EC_PRIV) {
|
||||
header = BEGIN_DSA_PRIV; footer = END_DSA_PRIV;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
for (;;) {
|
||||
headerEnd = XSTRNSTR((char*)buff, header, sz);
|
||||
|
||||
if (headerEnd || type != PRIVATEKEY_TYPE) {
|
||||
break;
|
||||
} else if (header == BEGIN_RSA_PRIV) {
|
||||
header = BEGIN_PRIV_KEY; footer = END_PRIV_KEY;
|
||||
} else if (header == BEGIN_PRIV_KEY) {
|
||||
header = BEGIN_ENC_PRIV_KEY; footer = END_ENC_PRIV_KEY;
|
||||
} else if (header == BEGIN_ENC_PRIV_KEY) {
|
||||
header = BEGIN_EC_PRIV; footer = END_EC_PRIV;
|
||||
} else if (header == BEGIN_EC_PRIV) {
|
||||
header = BEGIN_DSA_PRIV; footer = END_DSA_PRIV;
|
||||
} else
|
||||
break;
|
||||
}
|
||||
|
||||
if (!headerEnd) {
|
||||
WOLFSSL_MSG("Couldn't find PEM header");
|
||||
@@ -2049,59 +2049,59 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
else
|
||||
return SSL_BAD_FILE;
|
||||
|
||||
if (type == PRIVATEKEY_TYPE) {
|
||||
if (eccKey)
|
||||
*eccKey = header == BEGIN_EC_PRIV;
|
||||
}
|
||||
if (type == PRIVATEKEY_TYPE) {
|
||||
if (eccKey)
|
||||
*eccKey = header == BEGIN_EC_PRIV;
|
||||
}
|
||||
|
||||
#if defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)
|
||||
{
|
||||
/* remove encrypted header if there */
|
||||
char encHeader[] = "Proc-Type";
|
||||
char* line = XSTRNSTR(headerEnd, encHeader, PEM_LINE_LEN);
|
||||
if (line) {
|
||||
char* newline;
|
||||
char* finish;
|
||||
char* start = XSTRNSTR(line, "DES", PEM_LINE_LEN);
|
||||
{
|
||||
/* remove encrypted header if there */
|
||||
char encHeader[] = "Proc-Type";
|
||||
char* line = XSTRNSTR(headerEnd, encHeader, PEM_LINE_LEN);
|
||||
if (line) {
|
||||
char* newline;
|
||||
char* finish;
|
||||
char* start = XSTRNSTR(line, "DES", PEM_LINE_LEN);
|
||||
|
||||
if (!start)
|
||||
start = XSTRNSTR(line, "AES", PEM_LINE_LEN);
|
||||
if (!start)
|
||||
start = XSTRNSTR(line, "AES", PEM_LINE_LEN);
|
||||
|
||||
if (!start) return SSL_BAD_FILE;
|
||||
if (!info) return SSL_BAD_FILE;
|
||||
if (!start) return SSL_BAD_FILE;
|
||||
if (!info) return SSL_BAD_FILE;
|
||||
|
||||
finish = XSTRNSTR(start, ",", PEM_LINE_LEN);
|
||||
finish = XSTRNSTR(start, ",", PEM_LINE_LEN);
|
||||
|
||||
if (start && finish && (start < finish)) {
|
||||
newline = XSTRNSTR(finish, "\r", PEM_LINE_LEN);
|
||||
if (start && finish && (start < finish)) {
|
||||
newline = XSTRNSTR(finish, "\r", PEM_LINE_LEN);
|
||||
|
||||
XMEMCPY(info->name, start, finish - start);
|
||||
info->name[finish - start] = 0;
|
||||
XMEMCPY(info->iv, finish + 1, sizeof(info->iv));
|
||||
XMEMCPY(info->name, start, finish - start);
|
||||
info->name[finish - start] = 0;
|
||||
XMEMCPY(info->iv, finish + 1, sizeof(info->iv));
|
||||
|
||||
if (!newline) newline = XSTRNSTR(finish, "\n", PEM_LINE_LEN);
|
||||
if (newline && (newline > finish)) {
|
||||
info->ivSz = (word32)(newline - (finish + 1));
|
||||
info->set = 1;
|
||||
}
|
||||
else
|
||||
return SSL_BAD_FILE;
|
||||
}
|
||||
else
|
||||
return SSL_BAD_FILE;
|
||||
if (!newline) newline = XSTRNSTR(finish, "\n", PEM_LINE_LEN);
|
||||
if (newline && (newline > finish)) {
|
||||
info->ivSz = (word32)(newline - (finish + 1));
|
||||
info->set = 1;
|
||||
}
|
||||
else
|
||||
return SSL_BAD_FILE;
|
||||
}
|
||||
else
|
||||
return SSL_BAD_FILE;
|
||||
|
||||
/* eat blank line */
|
||||
while (*newline == '\r' || *newline == '\n')
|
||||
newline++;
|
||||
headerEnd = newline;
|
||||
}
|
||||
}
|
||||
/* eat blank line */
|
||||
while (*newline == '\r' || *newline == '\n')
|
||||
newline++;
|
||||
headerEnd = newline;
|
||||
}
|
||||
}
|
||||
#endif /* OPENSSL_EXTRA || HAVE_WEBSERVER */
|
||||
|
||||
/* find footer */
|
||||
footerEnd = XSTRNSTR((char*)buff, footer, sz);
|
||||
if (!footerEnd)
|
||||
return SSL_BAD_FILE;
|
||||
return SSL_BAD_FILE;
|
||||
|
||||
consumedEnd = footerEnd + XSTRLEN(footer);
|
||||
|
||||
@@ -2121,11 +2121,11 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
/* set up der buffer */
|
||||
neededSz = (long)(footerEnd - headerEnd);
|
||||
if (neededSz > sz || neededSz < 0)
|
||||
return SSL_BAD_FILE;
|
||||
return SSL_BAD_FILE;
|
||||
|
||||
der->buffer = (byte*)XMALLOC(neededSz, heap, dynamicType);
|
||||
der->buffer = (byte*)XMALLOC(neededSz, heap, dynamicType);
|
||||
if (!der->buffer)
|
||||
return MEMORY_ERROR;
|
||||
return MEMORY_ERROR;
|
||||
|
||||
der->length = (word32)neededSz;
|
||||
|
||||
@@ -2145,28 +2145,28 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
|
||||
#if (defined(OPENSSL_EXTRA) || defined(HAVE_WEBSERVER)) && !defined(NO_PWDBASED)
|
||||
if (header == BEGIN_ENC_PRIV_KEY) {
|
||||
int passwordSz;
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
char* password = NULL;
|
||||
#else
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
char* password = NULL;
|
||||
#else
|
||||
char password[80];
|
||||
#endif
|
||||
#endif
|
||||
|
||||
if (!info || !info->ctx || !info->ctx->passwd_cb)
|
||||
return SSL_BAD_FILE; /* no callback error */
|
||||
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
password = (char*)XMALLOC(80, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (password == NULL)
|
||||
return MEMORY_E;
|
||||
#endif
|
||||
passwordSz = info->ctx->passwd_cb(password, sizeof(password), 0,
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
password = (char*)XMALLOC(80, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if (password == NULL)
|
||||
return MEMORY_E;
|
||||
#endif
|
||||
passwordSz = info->ctx->passwd_cb(password, sizeof(password), 0,
|
||||
info->ctx->userdata);
|
||||
/* convert and adjust length */
|
||||
ret = ToTraditionalEnc(der->buffer, der->length, password, passwordSz);
|
||||
ret = ToTraditionalEnc(der->buffer, der->length, password, passwordSz);
|
||||
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
XFREE(password, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
#endif
|
||||
#ifdef WOLFSSL_SMALL_STACK
|
||||
XFREE(password, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
#endif
|
||||
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -5513,7 +5513,7 @@ static INLINE word32 HashSession(const byte* sessionID, word32 len, int* error)
|
||||
#ifndef NO_MD5
|
||||
*error = wc_Md5Hash(sessionID, len, digest);
|
||||
#elif !defined(NO_SHA)
|
||||
*error = ShaHash(sessionID, len, digest);
|
||||
*error = wc_ShaHash(sessionID, len, digest);
|
||||
#elif !defined(NO_SHA256)
|
||||
*error = Sha256Hash(sessionID, len, digest);
|
||||
#else
|
||||
|
||||
Reference in New Issue
Block a user