From 7683edc4483db3d8718b4a30c2e37dff4717bd0b Mon Sep 17 00:00:00 2001 From: JacobBarthelmeh Date: Mon, 11 May 2026 16:19:14 -0600 Subject: [PATCH] update MD4 return from void to int --- doc/dox_comments/header_files-ja/md4.h | 6 ++--- doc/dox_comments/header_files/md4.h | 6 ++--- tests/api/test_md4.c | 34 +++++++++++++++++++++----- wolfcrypt/src/md4.c | 18 ++++++++------ wolfcrypt/test/test.c | 14 ++++++++--- wolfssl/wolfcrypt/md4.h | 6 ++--- 6 files changed, 59 insertions(+), 25 deletions(-) diff --git a/doc/dox_comments/header_files-ja/md4.h b/doc/dox_comments/header_files-ja/md4.h index 499f723668..38336ffd81 100644 --- a/doc/dox_comments/header_files-ja/md4.h +++ b/doc/dox_comments/header_files-ja/md4.h @@ -23,7 +23,7 @@ \sa wc_Md4Update \sa wc_Md4Final */ -void wc_InitMd4(wc_Md4* md4); +int wc_InitMd4(wc_Md4* md4); /*! \ingroup MD4 @@ -55,7 +55,7 @@ void wc_InitMd4(wc_Md4* md4); \sa wc_Md4Final \sa wc_InitMd4 */ -void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); +int wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); /*! \ingroup MD4 @@ -83,4 +83,4 @@ void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); \sa wc_Md4Final \sa wc_InitMd4 */ -void wc_Md4Final(wc_Md4* md4, byte* hash); +int wc_Md4Final(wc_Md4* md4, byte* hash); diff --git a/doc/dox_comments/header_files/md4.h b/doc/dox_comments/header_files/md4.h index d9503fc95b..d02db72a7d 100644 --- a/doc/dox_comments/header_files/md4.h +++ b/doc/dox_comments/header_files/md4.h @@ -24,7 +24,7 @@ \sa wc_Md4Update \sa wc_Md4Final */ -void wc_InitMd4(wc_Md4* md4); +int wc_InitMd4(wc_Md4* md4); /*! \ingroup MD4 @@ -57,7 +57,7 @@ void wc_InitMd4(wc_Md4* md4); \sa wc_Md4Final \sa wc_InitMd4 */ -void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); +int wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); /*! \ingroup MD4 @@ -85,4 +85,4 @@ void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); \sa wc_Md4Final \sa wc_InitMd4 */ -void wc_Md4Final(wc_Md4* md4, byte* hash); +int wc_Md4Final(wc_Md4* md4, byte* hash); diff --git a/tests/api/test_md4.c b/tests/api/test_md4.c index 96ccd36163..ead8e5c943 100644 --- a/tests/api/test_md4.c +++ b/tests/api/test_md4.c @@ -37,9 +37,12 @@ /* Unit test for wc_InitMd4() and wc_InitMd4_ex() */ int test_wc_InitMd4(void) { - EXPECT_SUCCESS_DECLS; + EXPECT_DECLS; #ifndef NO_MD4 - DIGEST_INIT_ONLY_TEST(wc_Md4, Md4); + wc_Md4 md4; + + ExpectIntEQ(wc_InitMd4(NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_InitMd4(&md4), 0); #endif return EXPECT_RESULT(); } @@ -47,9 +50,19 @@ int test_wc_InitMd4(void) /* Unit test for wc_UpdateMd4() */ int test_wc_Md4Update(void) { - EXPECT_SUCCESS_DECLS; + EXPECT_DECLS; #ifndef NO_MD4 - DIGEST_UPDATE_ONLY_TEST(wc_Md4, Md4); + wc_Md4 md4; + + ExpectIntEQ(wc_InitMd4(&md4), 0); + + ExpectIntEQ(wc_Md4Update(NULL, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md4Update(&md4, NULL, 1), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md4Update(NULL, (byte*)"a", 1), + WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + + ExpectIntEQ(wc_Md4Update(&md4, NULL, 0), 0); + ExpectIntEQ(wc_Md4Update(&md4, (byte*)"a", 1), 0); #endif return EXPECT_RESULT(); } @@ -57,9 +70,18 @@ int test_wc_Md4Update(void) /* Unit test for wc_Md4Final() */ int test_wc_Md4Final(void) { - EXPECT_SUCCESS_DECLS; + EXPECT_DECLS; #ifndef NO_MD4 - DIGEST_FINAL_ONLY_TEST(wc_Md4, Md4, MD4); + wc_Md4 md4; + byte hash[WC_MD4_DIGEST_SIZE]; + + ExpectIntEQ(wc_InitMd4(&md4), 0); + + ExpectIntEQ(wc_Md4Final(NULL, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md4Final(&md4, NULL), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + ExpectIntEQ(wc_Md4Final(NULL, hash), WC_NO_ERR_TRACE(BAD_FUNC_ARG)); + + ExpectIntEQ(wc_Md4Final(&md4, hash), 0); #endif return EXPECT_RESULT(); } diff --git a/wolfcrypt/src/md4.c b/wolfcrypt/src/md4.c index 7edeb4426c..258c35b477 100644 --- a/wolfcrypt/src/md4.c +++ b/wolfcrypt/src/md4.c @@ -32,10 +32,10 @@ #endif -void wc_InitMd4(wc_Md4* md4) +int wc_InitMd4(wc_Md4* md4) { if (md4 == NULL) - return; + return BAD_FUNC_ARG; md4->digest[0] = 0x67452301L; md4->digest[1] = 0xefcdab89L; @@ -45,6 +45,8 @@ void wc_InitMd4(wc_Md4* md4) md4->buffLen = 0; md4->loLen = 0; md4->hiLen = 0; + + return 0; } @@ -136,13 +138,13 @@ static WC_INLINE void AddLength(wc_Md4* md4, word32 len) } -void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len) +int wc_Md4Update(wc_Md4* md4, const byte* data, word32 len) { /* do block size increments */ byte* local; if (md4 == NULL || (data == NULL && len != 0)) - return; + return BAD_FUNC_ARG; local = (byte*)md4->buffer; while (len) { @@ -162,15 +164,17 @@ void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len) md4->buffLen = 0; } } + + return 0; } -void wc_Md4Final(wc_Md4* md4, byte* hash) +int wc_Md4Final(wc_Md4* md4, byte* hash) { byte* local; if (md4 == NULL || hash == NULL) - return; + return BAD_FUNC_ARG; local = (byte*)md4->buffer; AddLength(md4, md4->buffLen); /* before adding pads */ @@ -209,7 +213,7 @@ void wc_Md4Final(wc_Md4* md4, byte* hash) #endif XMEMCPY(hash, md4->digest, WC_MD4_DIGEST_SIZE); - wc_InitMd4(md4); /* reset state */ + return wc_InitMd4(md4); /* reset state */ } diff --git a/wolfcrypt/test/test.c b/wolfcrypt/test/test.c index 50b20c693e..5af908fe9e 100644 --- a/wolfcrypt/test/test.c +++ b/wolfcrypt/test/test.c @@ -4861,6 +4861,7 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t md5_test(void) WOLFSSL_TEST_SUBROUTINE wc_test_ret_t md4_test(void) { + wc_test_ret_t ret = 0; wc_Md4 md4; byte hash[WC_MD4_DIGEST_SIZE]; @@ -4921,11 +4922,18 @@ WOLFSSL_TEST_SUBROUTINE wc_test_ret_t md4_test(void) test_md4[5] = f; test_md4[6] = g; - wc_InitMd4(&md4); + ret = wc_InitMd4(&md4); + if (ret != 0) + return WC_TEST_RET_ENC_EC(ret); for (i = 0; i < times; ++i) { - wc_Md4Update(&md4, (byte*)test_md4[i].input, (word32)test_md4[i].inLen); - wc_Md4Final(&md4, hash); + ret = wc_Md4Update(&md4, (byte*)test_md4[i].input, + (word32)test_md4[i].inLen); + if (ret != 0) + return WC_TEST_RET_ENC_I(i); + ret = wc_Md4Final(&md4, hash); + if (ret != 0) + return WC_TEST_RET_ENC_I(i); if (XMEMCMP(hash, test_md4[i].output, WC_MD4_DIGEST_SIZE) != 0) return WC_TEST_RET_ENC_I(i); diff --git a/wolfssl/wolfcrypt/md4.h b/wolfssl/wolfcrypt/md4.h index fc503611bb..919a702741 100644 --- a/wolfssl/wolfcrypt/md4.h +++ b/wolfssl/wolfcrypt/md4.h @@ -48,9 +48,9 @@ typedef struct wc_Md4 { word32 buffer[WC_MD4_BLOCK_SIZE / sizeof(word32)]; } wc_Md4; -WOLFSSL_API void wc_InitMd4(wc_Md4* md4); -WOLFSSL_API void wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); -WOLFSSL_API void wc_Md4Final(wc_Md4* md4, byte* hash); +WOLFSSL_API int wc_InitMd4(wc_Md4* md4); +WOLFSSL_API int wc_Md4Update(wc_Md4* md4, const byte* data, word32 len); +WOLFSSL_API int wc_Md4Final(wc_Md4* md4, byte* hash); #ifndef OPENSSL_COEXIST