From 51d55ed1c86212e16fc1c807c5cfb30f7db4457b Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Thu, 30 Jan 2020 14:12:45 -0700 Subject: [PATCH] account for different peer certificate in test case, g++ build fix, static memory size increase --- src/bio.c | 32 +++++++++++++++++++------------- src/ssl.c | 4 ++-- tests/api.c | 12 +++++++++--- wolfssl/wolfcrypt/memory.h | 2 +- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/src/bio.c b/src/bio.c index 27193df26..7a8e7db27 100644 --- a/src/bio.c +++ b/src/bio.c @@ -161,14 +161,17 @@ static int wolfSSL_BIO_MD_read(WOLFSSL_BIO* bio, void* buf, int sz) { int ret = sz; - if (wolfSSL_EVP_MD_CTX_type(bio->ptr) == (NID_hmac & 0xFF)) { - if (wolfSSL_EVP_DigestSignUpdate(bio->ptr, buf, sz) != WOLFSSL_SUCCESS) + if (wolfSSL_EVP_MD_CTX_type((WOLFSSL_EVP_MD_CTX*)bio->ptr) == + (NID_hmac & 0xFF)) { + if (wolfSSL_EVP_DigestSignUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf, + sz) != WOLFSSL_SUCCESS) { ret = WOLFSSL_FATAL_ERROR; } } else { - if (wolfSSL_EVP_DigestUpdate(bio->ptr, buf, ret) != WOLFSSL_SUCCESS) { + if (wolfSSL_EVP_DigestUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, buf, ret) + != WOLFSSL_SUCCESS) { ret = WOLFSSL_FATAL_ERROR; } } @@ -467,14 +470,16 @@ static int wolfSSL_BIO_MD_write(WOLFSSL_BIO* bio, const void* data, int len) return BAD_FUNC_ARG; } - if (wolfSSL_EVP_MD_CTX_type(bio->ptr) == (NID_hmac & 0xFF)) { - if (wolfSSL_EVP_DigestSignUpdate(bio->ptr, data, len) != - WOLFSSL_SUCCESS) { + if (wolfSSL_EVP_MD_CTX_type((WOLFSSL_EVP_MD_CTX*)bio->ptr) == + (NID_hmac & 0xFF)) { + if (wolfSSL_EVP_DigestSignUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, data, + len) != WOLFSSL_SUCCESS) { ret = WOLFSSL_BIO_ERROR; } } else { - if (wolfSSL_EVP_DigestUpdate(bio->ptr, data, len) != WOLFSSL_SUCCESS) { + if (wolfSSL_EVP_DigestUpdate((WOLFSSL_EVP_MD_CTX*)bio->ptr, data, len) + != WOLFSSL_SUCCESS) { ret = WOLFSSL_BIO_ERROR; } } @@ -809,14 +814,14 @@ int wolfSSL_BIO_gets(WOLFSSL_BIO* bio, char* buf, int sz) #ifndef WOLFCRYPT_ONLY /* call final on hash */ case WOLFSSL_BIO_MD: - if (wolfSSL_EVP_MD_CTX_size(bio->ptr) > sz) { + if (wolfSSL_EVP_MD_CTX_size((WOLFSSL_EVP_MD_CTX*)bio->ptr) > sz) { WOLFSSL_MSG("Output buffer was too small for digest"); ret = WOLFSSL_FAILURE; } else { unsigned int szOut = 0; - ret = wolfSSL_EVP_DigestFinal(bio->ptr, (unsigned char*)buf, - &szOut); + ret = wolfSSL_EVP_DigestFinal((WOLFSSL_EVP_MD_CTX*)bio->ptr, + (unsigned char*)buf, &szOut); if (ret == WOLFSSL_SUCCESS) { ret = szOut; } @@ -1302,9 +1307,10 @@ int wolfSSL_BIO_reset(WOLFSSL_BIO *bio) #ifndef WOLFCRYPT_ONLY case WOLFSSL_BIO_MD: if (bio->ptr != NULL) { - const WOLFSSL_EVP_MD* md = wolfSSL_EVP_MD_CTX_md(bio->ptr); - wolfSSL_EVP_MD_CTX_init(bio->ptr); - wolfSSL_EVP_DigestInit(bio->ptr, md); + const WOLFSSL_EVP_MD* md = + wolfSSL_EVP_MD_CTX_md((WOLFSSL_EVP_MD_CTX*)bio->ptr); + wolfSSL_EVP_MD_CTX_init((WOLFSSL_EVP_MD_CTX*)bio->ptr); + wolfSSL_EVP_DigestInit((WOLFSSL_EVP_MD_CTX*)bio->ptr, md); } return 0; #endif /* WOLFCRYPT_ONLY */ diff --git a/src/ssl.c b/src/ssl.c index f6ce6773d..fbd0c47e4 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -15190,7 +15190,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) int ret = WOLFSSL_FAILURE; if ((bio != NULL) && (mdcp != NULL)) { - *mdcp = bio->ptr; + *mdcp = (WOLFSSL_EVP_MD_CTX*)bio->ptr; ret = WOLFSSL_SUCCESS; } @@ -15472,7 +15472,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) } if (bio->type == WOLFSSL_BIO_MD) { - wolfSSL_EVP_MD_CTX_free(bio->ptr); + wolfSSL_EVP_MD_CTX_free((WOLFSSL_EVP_MD_CTX*)bio->ptr); } XFREE(bio, 0, DYNAMIC_TYPE_OPENSSL); diff --git a/tests/api.c b/tests/api.c index 1646b4684..a2807e9aa 100644 --- a/tests/api.c +++ b/tests/api.c @@ -24317,10 +24317,16 @@ static void test_wolfSSL_SESSION(void) int bufSz; AssertNotNull(x509 = SSL_SESSION_get0_peer(sess)); - AssertIntEQ((bufSz = X509_NAME_get_text_by_NID( + AssertIntGT((bufSz = X509_NAME_get_text_by_NID( X509_get_subject_name(x509), NID_organizationalUnitName, - buf, sizeof(buf))), 7); - AssertIntEQ(XMEMCMP(buf, "Support", bufSz), 0); + buf, sizeof(buf))), 0); + AssertIntNE((bufSz == 7 || bufSz == 16), 0); /* should be one of these*/ + if (bufSz == 7) { + AssertIntEQ(XMEMCMP(buf, "Support", bufSz), 0); + } + if (bufSz == 16) { + AssertIntEQ(XMEMCMP(buf, "Programming-2048", bufSz), 0); + } } #endif diff --git a/wolfssl/wolfcrypt/memory.h b/wolfssl/wolfcrypt/memory.h index 0cf73aa48..486fd39ab 100644 --- a/wolfssl/wolfcrypt/memory.h +++ b/wolfssl/wolfcrypt/memory.h @@ -110,7 +110,7 @@ WOLFSSL_API int wolfSSL_GetAllocators(wolfSSL_Malloc_cb*, #elif defined (OPENSSL_EXTRA) /* extra storage in structs for multiple attributes and order */ #ifndef LARGEST_MEM_BUCKET - #define LARGEST_MEM_BUCKET 25536 + #define LARGEST_MEM_BUCKET 25600 #endif #define WOLFMEM_BUCKETS 64,128,256,512,1024,2432,3360,4480,\ LARGEST_MEM_BUCKET