addressed review comments

pull/3769/head
Hideki Miyazaki 2021-03-06 10:18:31 +09:00
parent 896245cae7
commit 3b768bcb5e
No known key found for this signature in database
GPG Key ID: 7EB19ED9B9D5AC28
6 changed files with 115 additions and 19 deletions

View File

@ -2272,7 +2272,7 @@ int wolfSSL_UseMaxFragment(WOLFSSL* ssl, byte mfl)
#ifdef WOLFSSL_ALLOW_MAX_FRAGMENT_ADJUST #ifdef WOLFSSL_ALLOW_MAX_FRAGMENT_ADJUST
/* The following is a non-standard way to reconfigure the max packet size /* The following is a non-standard way to reconfigure the max packet size
post-handshake for wolfSSL_write/woflSSL_read */ post-handshake for wolfSSL_write/wolfSSL_read */
if (ssl->options.handShakeState == HANDSHAKE_DONE) { if (ssl->options.handShakeState == HANDSHAKE_DONE) {
switch (mfl) { switch (mfl) {
case WOLFSSL_MFL_2_8 : ssl->max_fragment = 256; break; case WOLFSSL_MFL_2_8 : ssl->max_fragment = 256; break;
@ -16832,12 +16832,17 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
return 0; return 0;
} }
/* Apply MD5 transformation to the data */
int wolfSSL_MD5_Transform(WOLFSSL_MD5_CTX* md5, const unsigned char* data) int wolfSSL_MD5_Transform(WOLFSSL_MD5_CTX* md5, const unsigned char* data)
{ {
int ret; int ret;
WOLFSSL_ENTER("MD5_Transform"); WOLFSSL_ENTER("MD5_Transform");
/* sanity check */
if (md5 == NULL || data == NULL) {
return 0;
}
#if defined(BIG_ENDIAN_ORDER) #if defined(BIG_ENDIAN_ORDER)
{ {
ByteReverseWords((word32*)data, (word32*)data, WC_MD5_BLOCK_SIZE); ByteReverseWords((word32*)data, (word32*)data, WC_MD5_BLOCK_SIZE);
@ -16849,8 +16854,8 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
/* return 1 on success, 0 otherwise */ /* return 1 on success, 0 otherwise */
if (ret == 0) if (ret == 0)
return 1; return 1;
else
return ret; return 0;
} }
#endif /* !NO_MD5 */ #endif /* !NO_MD5 */
@ -16907,12 +16912,17 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
#if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \
(defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)))
/* Apply SHA1 transformation to the data */
int wolfSSL_SHA_Transform(WOLFSSL_SHA_CTX* sha, int wolfSSL_SHA_Transform(WOLFSSL_SHA_CTX* sha,
const unsigned char* data) const unsigned char* data)
{ {
int ret; int ret;
WOLFSSL_ENTER("SHA_Transform"); WOLFSSL_ENTER("SHA_Transform");
/* sanity check */
if (sha == NULL || data == NULL) {
return 0;
}
#if defined(LITTLE_ENDIAN_ORDER) #if defined(LITTLE_ENDIAN_ORDER)
{ {
ByteReverseWords((word32*)data, (word32*)data, WC_SHA_BLOCK_SIZE); ByteReverseWords((word32*)data, (word32*)data, WC_SHA_BLOCK_SIZE);
@ -16923,8 +16933,8 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
/* return 1 on success, 0 otherwise */ /* return 1 on success, 0 otherwise */
if (ret == 0) if (ret == 0)
return 1; return 1;
else
return ret; return 0;
} }
#endif #endif
#endif #endif
@ -16952,6 +16962,7 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
#if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \
(defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)))
/* Apply SHA1 transformation to the data */
int wolfSSL_SHA1_Transform(WOLFSSL_SHA_CTX* sha, int wolfSSL_SHA1_Transform(WOLFSSL_SHA_CTX* sha,
const unsigned char* data) const unsigned char* data)
{ {
@ -17066,12 +17077,17 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
#if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \
(defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)))
/* Apply SHA256 transformation to the data */
int wolfSSL_SHA256_Transform(WOLFSSL_SHA256_CTX* sha256, int wolfSSL_SHA256_Transform(WOLFSSL_SHA256_CTX* sha256,
const unsigned char* data) const unsigned char* data)
{ {
int ret; int ret;
WOLFSSL_ENTER("SHA256_Transform"); WOLFSSL_ENTER("SHA256_Transform");
/* sanity check */
if (sha256 == NULL || data == NULL) {
return 0;
}
#if defined(LITTLE_ENDIAN_ORDER) #if defined(LITTLE_ENDIAN_ORDER)
{ {
ByteReverseWords((word32*)data, (word32*)data, WC_SHA256_BLOCK_SIZE); ByteReverseWords((word32*)data, (word32*)data, WC_SHA256_BLOCK_SIZE);
@ -17082,8 +17098,8 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
/* return 1 on success, 0 otherwise */ /* return 1 on success, 0 otherwise */
if (ret == 0) if (ret == 0)
return 1; return 1;
else
return ret; return 0;
} }
#endif #endif
#endif #endif
@ -17193,20 +17209,25 @@ size_t wolfSSL_get_client_random(const WOLFSSL* ssl, unsigned char* out,
#if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \ #if !defined(HAVE_SELFTEST) && (!defined(HAVE_FIPS) || \
(defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2))) (defined(HAVE_FIPS_VERSION) && (HAVE_FIPS_VERSION > 2)))
/* Apply SHA512 transformation to the data */
int wolfSSL_SHA512_Transform(WOLFSSL_SHA512_CTX* sha512, int wolfSSL_SHA512_Transform(WOLFSSL_SHA512_CTX* sha512,
const unsigned char* data) const unsigned char* data)
{ {
int ret = WOLFSSL_SUCCESS; int ret = WOLFSSL_SUCCESS;
WOLFSSL_ENTER("SHA512_Transform"); WOLFSSL_ENTER("SHA512_Transform");
/* sanity check */
if (sha512 == NULL || data == NULL) {
return 0;
}
ret = wc_Sha512Transform((wc_Sha512*)sha512, data); ret = wc_Sha512Transform((wc_Sha512*)sha512, data);
/* return 1 on success, 0 otherwise */ /* return 1 on success, 0 otherwise */
if (ret == 0) if (ret == 0)
return 1; return 1;
else
return ret; return 0;
} }
#endif /* !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \ #endif /* !defined(HAVE_FIPS) || (defined(HAVE_FIPS_VERSION) && \
(HAVE_FIPS_VERSION > 2)) */ (HAVE_FIPS_VERSION > 2)) */
@ -21690,7 +21711,7 @@ WOLFSSL_SESSION* wolfSSL_SESSION_new(void)
} }
/* add one to session reference count /* add one to session reference count
* return WOFLSSL_SUCCESS on success and WOLFSSL_FAILURE on error */ * return WOLFSSL_SUCCESS on success and WOLFSSL_FAILURE on error */
int wolfSSL_SESSION_up_ref(WOLFSSL_SESSION* session) int wolfSSL_SESSION_up_ref(WOLFSSL_SESSION* session)
{ {
if (session == NULL) if (session == NULL)
@ -26087,6 +26108,9 @@ WOLFSSL_API WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_bio(WOLFSSL_BIO *bp,
byte* der = NULL; byte* der = NULL;
WOLFSSL_X509_CRL* crl = NULL; WOLFSSL_X509_CRL* crl = NULL;
if (bp == NULL)
return NULL;
if ((derSz = wolfSSL_BIO_get_len(bp)) > 0) { if ((derSz = wolfSSL_BIO_get_len(bp)) > 0) {
der = (byte*)XMALLOC(derSz, 0, DYNAMIC_TYPE_DER); der = (byte*)XMALLOC(derSz, 0, DYNAMIC_TYPE_DER);
if (der != NULL) { if (der != NULL) {
@ -26111,6 +26135,11 @@ WOLFSSL_X509_CRL *wolfSSL_d2i_X509_CRL_fp(XFILE fp, WOLFSSL_X509_CRL **crl)
return (WOLFSSL_X509_CRL *)wolfSSL_d2i_X509_fp_ex(fp, (void **)crl, CRL_TYPE); return (WOLFSSL_X509_CRL *)wolfSSL_d2i_X509_fp_ex(fp, (void **)crl, CRL_TYPE);
} }
/* Read CRL file, and add it to store and corresponding cert manager */
/* @param ctx a pointer of X509_LOOKUP back to the X509_STORE */
/* @param file a file to read */
/* @param type WOLFSSL_FILETYPE_PEM or WOLFSSL_FILETYPE_ASN1 */
/* @return WOLFSSL_SUCCESS(1) on successful, othewise WOLFSSL_FAILURE(0)*/
WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx, WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx,
const char *file, int type) const char *file, int type)
{ {
@ -26161,7 +26190,7 @@ WOLFSSL_API int wolfSSL_X509_load_crl_file(WOLFSSL_X509_LOOKUP *ctx,
} }
} }
} else { } else {
WOLFSSL_MSG("Invaid file type"); WOLFSSL_MSG("Invalid file type");
} }
wolfSSL_X509_CRL_free(crl); wolfSSL_X509_CRL_free(crl);
@ -26379,7 +26408,8 @@ int wolfSSL_X509_VERIFY_PARAM_clear_flags(WOLFSSL_X509_VERIFY_PARAM *param,
} }
/* /* inherits properties of param "to" to param "from"
*
* WOLFSSL_VPARAM_DEFAULT any values in "src" is copied * WOLFSSL_VPARAM_DEFAULT any values in "src" is copied
* if "src" value is new for "to". * if "src" value is new for "to".
* WOLFSSL_VPARAM_OVERWRITE all values of "form" are copied to "to" * WOLFSSL_VPARAM_OVERWRITE all values of "form" are copied to "to"
@ -26387,7 +26417,7 @@ int wolfSSL_X509_VERIFY_PARAM_clear_flags(WOLFSSL_X509_VERIFY_PARAM *param,
* WOLFSSL_VPARAM_LOCKED don't copy any values * WOLFSSL_VPARAM_LOCKED don't copy any values
* WOLFSSL_VPARAM_ONCE the current inherit_flags is zerroed * WOLFSSL_VPARAM_ONCE the current inherit_flags is zerroed
*/ */
static int woflSSL_X509_VERIFY_PARAM_inherit(WOLFSSL_X509_VERIFY_PARAM *to, static int wolfSSL_X509_VERIFY_PARAM_inherit(WOLFSSL_X509_VERIFY_PARAM *to,
const WOLFSSL_X509_VERIFY_PARAM *from) const WOLFSSL_X509_VERIFY_PARAM *from)
{ {
int ret = WOLFSSL_FAILURE; int ret = WOLFSSL_FAILURE;
@ -26530,11 +26560,11 @@ int wolfSSL_X509_VERIFY_PARAM_set1(WOLFSSL_X509_VERIFY_PARAM *to,
_inherit_flags = to->inherit_flags; _inherit_flags = to->inherit_flags;
/* Ored DEFAULT inherit flag proerty to copy "from" contents to "to" /* Ored DEFAULT inherit flag proerty to copy "from" contents to "to"
* contends * contents
*/ */
to->inherit_flags |= WOLFSSL_VPARAM_DEFAULT; to->inherit_flags |= WOLFSSL_VPARAM_DEFAULT;
ret = woflSSL_X509_VERIFY_PARAM_inherit(to, from); ret = wolfSSL_X509_VERIFY_PARAM_inherit(to, from);
/* restore inherit flag */ /* restore inherit flag */
to->inherit_flags = _inherit_flags; to->inherit_flags = _inherit_flags;

View File

@ -33070,6 +33070,14 @@ static void test_wolfSSL_MD5_Transform(void)
XMEMSET(&md5, 0, sizeof(md5)); XMEMSET(&md5, 0, sizeof(md5));
XMEMSET(&local, 0, sizeof(local)); XMEMSET(&local, 0, sizeof(local));
/* sanity check */
AssertIntEQ(wolfSSL_MD5_Transform(NULL, NULL), 0);
AssertIntEQ(wolfSSL_MD5_Transform(NULL, (const byte*)&input1), 0);
AssertIntEQ(wolfSSL_MD5_Transform(&md5, NULL), 0);
AssertIntEQ(wc_Md5Transform(NULL, NULL), BAD_FUNC_ARG);
AssertIntEQ(wc_Md5Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG);
AssertIntEQ(wc_Md5Transform((wc_Md5*)&md5, NULL), BAD_FUNC_ARG);
/* Init MD5 CTX */ /* Init MD5 CTX */
AssertIntEQ(wolfSSL_MD5_Init(&md5), 1); AssertIntEQ(wolfSSL_MD5_Init(&md5), 1);
/* Do Transform*/ /* Do Transform*/
@ -33106,7 +33114,7 @@ static void test_wolfSSL_SHA224(void)
size_t inLen; size_t inLen;
byte hash[WC_SHA224_DIGEST_SIZE]; byte hash[WC_SHA224_DIGEST_SIZE];
printf(testingFmt, "wolfSSL_SHA224)"); printf(testingFmt, "wolfSSL_SHA224()");
inLen = XSTRLEN((char*)input); inLen = XSTRLEN((char*)input);
XMEMSET(hash, 0, WC_SHA224_DIGEST_SIZE); XMEMSET(hash, 0, WC_SHA224_DIGEST_SIZE);
@ -33139,6 +33147,14 @@ static void test_wolfSSL_SHA_Transform(void)
XMEMSET(&sha, 0, sizeof(sha)); XMEMSET(&sha, 0, sizeof(sha));
XMEMSET(&local, 0, sizeof(local)); XMEMSET(&local, 0, sizeof(local));
/* sanity check */
AssertIntEQ(wolfSSL_SHA_Transform(NULL, NULL), 0);
AssertIntEQ(wolfSSL_SHA_Transform(NULL, (const byte*)&input1), 0);
AssertIntEQ(wolfSSL_SHA_Transform(&sha, NULL), 0);
AssertIntEQ(wc_ShaTransform(NULL, NULL), BAD_FUNC_ARG);
AssertIntEQ(wc_ShaTransform(NULL, (const byte*)&input1), BAD_FUNC_ARG);
AssertIntEQ(wc_ShaTransform((wc_Sha*)&sha, NULL), BAD_FUNC_ARG);
/* Init SHA CTX */ /* Init SHA CTX */
AssertIntEQ(wolfSSL_SHA_Init(&sha), 1); AssertIntEQ(wolfSSL_SHA_Init(&sha), 1);
/* Do Transform*/ /* Do Transform*/
@ -33185,6 +33201,14 @@ static void test_wolfSSL_SHA256_Transform(void)
XMEMSET(&sha256, 0, sizeof(sha256)); XMEMSET(&sha256, 0, sizeof(sha256));
XMEMSET(&local, 0, sizeof(local)); XMEMSET(&local, 0, sizeof(local));
/* sanity check */
AssertIntEQ(wolfSSL_SHA256_Transform(NULL, NULL), 0);
AssertIntEQ(wolfSSL_SHA256_Transform(NULL, (const byte*)&input1), 0);
AssertIntEQ(wolfSSL_SHA256_Transform(&sha256, NULL), 0);
AssertIntEQ(wc_Sha256Transform(NULL, NULL), BAD_FUNC_ARG);
AssertIntEQ(wc_Sha256Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG);
AssertIntEQ(wc_Sha256Transform((wc_Sha256*)&sha256, NULL), BAD_FUNC_ARG);
/* Init SHA256 CTX */ /* Init SHA256 CTX */
AssertIntEQ(wolfSSL_SHA256_Init(&sha256), 1); AssertIntEQ(wolfSSL_SHA256_Init(&sha256), 1);
/* Do Transform*/ /* Do Transform*/
@ -33259,6 +33283,14 @@ static void test_wolfSSL_SHA512_Transform(void)
XMEMSET(&sha512, 0, sizeof(sha512)); XMEMSET(&sha512, 0, sizeof(sha512));
XMEMSET(&local, 0, sizeof(local)); XMEMSET(&local, 0, sizeof(local));
/* sanity check */
AssertIntEQ(wolfSSL_SHA512_Transform(NULL, NULL), 0);
AssertIntEQ(wolfSSL_SHA512_Transform(NULL, (const byte*)&input1), 0);
AssertIntEQ(wolfSSL_SHA512_Transform(&sha512, NULL), 0);
AssertIntEQ(wc_Sha512Transform(NULL, NULL), BAD_FUNC_ARG);
AssertIntEQ(wc_Sha512Transform(NULL, (const byte*)&input1), BAD_FUNC_ARG);
AssertIntEQ(wc_Sha512Transform((wc_Sha512*)&sha512, NULL), BAD_FUNC_ARG);
/* Init SHA512 CTX */ /* Init SHA512 CTX */
AssertIntEQ(wolfSSL_SHA512_Init(&sha512), 1); AssertIntEQ(wolfSSL_SHA512_Init(&sha512), 1);

View File

@ -551,8 +551,16 @@ int wc_Md5Copy(wc_Md5* src, wc_Md5* dst)
return ret; return ret;
} }
#ifdef OPENSSL_EXTRA #ifdef OPENSSL_EXTRA
/* Apply MD5 transformation to the data */
/* @param md5 a pointer to wc_MD5 structure */
/* @param data data to be applied MD5 transformation */
/* @return 0 on successful, otherwise non-zero on failure */
int wc_Md5Transform(wc_Md5* md5, const byte* data) int wc_Md5Transform(wc_Md5* md5, const byte* data)
{ {
/* sanity check */
if (md5 == NULL || data == NULL) {
return BAD_FUNC_ARG;
}
return Transform(md5, data); return Transform(md5, data);
} }
#endif #endif

View File

@ -774,8 +774,16 @@ int wc_ShaFinal(wc_Sha* sha, byte* hash)
} }
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
/* Apply SHA1 transformation to the data */
/* @param sha a pointer to wc_Sha structure */
/* @param data data to be applied SHA1 transformation */
/* @return 0 on successful, otherwise non-zero on failure */
int wc_ShaTransform(wc_Sha* sha, const unsigned char* data) int wc_ShaTransform(wc_Sha* sha, const unsigned char* data)
{ {
/* sanity check */
if (sha == NULL || data == NULL) {
return BAD_FUNC_ARG;
}
return (Transform(sha, data)); return (Transform(sha, data));
} }
#endif #endif

View File

@ -1296,8 +1296,15 @@ static int InitSha256(wc_Sha256* sha256)
} }
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
/* Apply SHA256 transformation to the data */
/* @param sha a pointer to wc_Sha256 structure */
/* @param data data to be applied SHA256 transformation */
/* @return 0 on successful, otherwise non-zero on failure */
int wc_Sha256Transform(wc_Sha256* sha, const unsigned char* data) int wc_Sha256Transform(wc_Sha256* sha, const unsigned char* data)
{ {
if (sha == NULL || data == NULL) {
return BAD_FUNC_ARG;
}
return (Transform_Sha256(sha, data)); return (Transform_Sha256(sha, data));
} }
#endif #endif

View File

@ -917,6 +917,10 @@ void wc_Sha512Free(wc_Sha512* sha512)
#endif /* WOLFSSL_ASYNC_CRYPT */ #endif /* WOLFSSL_ASYNC_CRYPT */
} }
#if defined(OPENSSL_EXTRA) #if defined(OPENSSL_EXTRA)
/* Apply SHA512 transformation to the data */
/* @param sha a pointer to wc_Sha512 structure */
/* @param data data to be applied SHA512 transformation */
/* @return 0 on successful, otherwise non-zero on failure */
int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data) int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data)
{ {
int ret ; int ret ;
@ -931,6 +935,13 @@ int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data)
word64 buffer[WC_SHA512_BLOCK_SIZE / sizeof(word64)]; word64 buffer[WC_SHA512_BLOCK_SIZE / sizeof(word64)];
#endif #endif
/* sanity check */
if (sha == NULL || data == NULL) {
#if defined(WOLFSSL_SMALL_STACK)
XFREE(buffer, NULL, DYNAMIC_TYPE_TMP_BUFFER);
#endif
return BAD_FUNC_ARG;
}
#if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2) #if defined(HAVE_INTEL_AVX1) || defined(HAVE_INTEL_AVX2)
Sha512_SetTransform(); Sha512_SetTransform();
#endif #endif