From a60db81d090bd519a5f0467d7da536969f39cad0 Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Thu, 10 Aug 2017 12:06:43 -0600 Subject: [PATCH] check on key type with SetRsaExternal and fix for function name after rebase --- src/ssl.c | 68 +++++++++++++++++++----------------------- wolfcrypt/src/pkcs12.c | 4 +-- 2 files changed, 32 insertions(+), 40 deletions(-) diff --git a/src/ssl.c b/src/ssl.c index 476f3ffa1..b2bf55a91 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -20408,17 +20408,6 @@ static void InitwolfSSL_Rsa(WOLFSSL_RSA* rsa) { if (rsa) { XMEMSET(rsa, 0, sizeof(WOLFSSL_RSA)); - rsa->n = NULL; - rsa->e = NULL; - rsa->d = NULL; - rsa->p = NULL; - rsa->q = NULL; - rsa->dmp1 = NULL; - rsa->dmq1 = NULL; - rsa->iqmp = NULL; - rsa->internal = NULL; - rsa->inSet = 0; - rsa->exSet = 0; } } @@ -20789,36 +20778,37 @@ static int SetRsaExternal(WOLFSSL_RSA* rsa) return WOLFSSL_FATAL_ERROR; } - if (SetIndividualExternal(&rsa->d, &key->d) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa d key error"); - return WOLFSSL_FATAL_ERROR; - } + if (key->type == RSA_PRIVATE) { + if (SetIndividualExternal(&rsa->d, &key->d) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa d key error"); + return WOLFSSL_FATAL_ERROR; + } - if (SetIndividualExternal(&rsa->p, &key->p) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa p key error"); - return WOLFSSL_FATAL_ERROR; - } + if (SetIndividualExternal(&rsa->p, &key->p) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa p key error"); + return WOLFSSL_FATAL_ERROR; + } - if (SetIndividualExternal(&rsa->q, &key->q) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa q key error"); - return WOLFSSL_FATAL_ERROR; - } + if (SetIndividualExternal(&rsa->q, &key->q) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa q key error"); + return WOLFSSL_FATAL_ERROR; + } - if (SetIndividualExternal(&rsa->dmp1, &key->dP) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa dP key error"); - return WOLFSSL_FATAL_ERROR; - } + if (SetIndividualExternal(&rsa->dmp1, &key->dP) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa dP key error"); + return WOLFSSL_FATAL_ERROR; + } - if (SetIndividualExternal(&rsa->dmq1, &key->dQ) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa dQ key error"); - return WOLFSSL_FATAL_ERROR; - } + if (SetIndividualExternal(&rsa->dmq1, &key->dQ) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa dQ key error"); + return WOLFSSL_FATAL_ERROR; + } - if (SetIndividualExternal(&rsa->iqmp, &key->u) != WOLFSSL_SUCCESS) { - WOLFSSL_MSG("rsa u key error"); - return WOLFSSL_FATAL_ERROR; + if (SetIndividualExternal(&rsa->iqmp, &key->u) != WOLFSSL_SUCCESS) { + WOLFSSL_MSG("rsa u key error"); + return WOLFSSL_FATAL_ERROR; + } } - rsa->exSet = 1; return WOLFSSL_SUCCESS; @@ -24348,13 +24338,15 @@ int wolfSSL_RSA_LoadDer_ex(WOLFSSL_RSA* rsa, const unsigned char* derBuf, return WOLFSSL_FATAL_ERROR; } - if(opt == WOLFSSL_RSA_LOAD_PRIVATE) + if (opt == WOLFSSL_RSA_LOAD_PRIVATE) { ret = wc_RsaPrivateKeyDecode(derBuf, &idx, (RsaKey*)rsa->internal, derSz); - else + } + else { ret = wc_RsaPublicKeyDecode(derBuf, &idx, (RsaKey*)rsa->internal, derSz); + } if (ret < 0) { - if(opt == WOLFSSL_RSA_LOAD_PRIVATE) { + if (opt == WOLFSSL_RSA_LOAD_PRIVATE) { WOLFSSL_MSG("RsaPrivateKeyDecode failed"); } else { diff --git a/wolfcrypt/src/pkcs12.c b/wolfcrypt/src/pkcs12.c index f2eccfc68..be77fcc7b 100644 --- a/wolfcrypt/src/pkcs12.c +++ b/wolfcrypt/src/pkcs12.c @@ -689,7 +689,7 @@ int wc_d2i_PKCS12(const byte* der, word32 derSz, WC_PKCS12* pkcs12) /* helper function to free WC_DerCertList */ -static void freeCertList(WC_DerCertList* list, void* heap) +void wc_FreeCertList(WC_DerCertList* list, void* heap) { WC_DerCertList* current = list; WC_DerCertList* next; @@ -1137,7 +1137,7 @@ exit_pk12par: buf = NULL; } - freeCertList(certList, pkcs12->heap); + wc_FreeCertList(certList, pkcs12->heap); } return ret;