Skip to content

Commit 529b6a1

Browse files
committed
Allow for zero length hash. Its not an error.
Fixes ZD17910
1 parent 6e49aa7 commit 529b6a1

2 files changed

Lines changed: 58 additions & 3 deletions

File tree

wolfcrypt/src/sha256.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -777,7 +777,14 @@ static int InitSha256(wc_Sha256* sha256)
777777
{
778778
int ret = 0;
779779

780-
if (sha256 == NULL || (data == NULL && len > 0)) {
780+
if (sha256 == NULL) {
781+
return BAD_FUNC_ARG;
782+
}
783+
if (data == NULL && len == 0) {
784+
/* valid, but do nothing */
785+
return 0;
786+
}
787+
if (data == NULL) {
781788
return BAD_FUNC_ARG;
782789
}
783790

@@ -828,6 +835,17 @@ static int InitSha256(wc_Sha256* sha256)
828835

829836
int wc_Sha256Update(wc_Sha256* sha256, const byte* data, word32 len)
830837
{
838+
if (sha256 == NULL) {
839+
return BAD_FUNC_ARG;
840+
}
841+
if (data == NULL && len == 0) {
842+
/* valid, but do nothing */
843+
return 0;
844+
}
845+
if (data == NULL) {
846+
return BAD_FUNC_ARG;
847+
}
848+
831849
return se050_hash_update(&sha256->se050Ctx, data, len);
832850
}
833851

wolfcrypt/src/sha512.c

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,17 @@
167167
}
168168
int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len)
169169
{
170+
if (sha512 == NULL) {
171+
return BAD_FUNC_ARG;
172+
}
173+
if (data == NULL && len == 0) {
174+
/* valid, but do nothing */
175+
return 0;
176+
}
177+
if (data == NULL) {
178+
return BAD_FUNC_ARG;
179+
}
180+
170181
return se050_hash_update(&sha512->se050Ctx, data, len);
171182
}
172183
int wc_Sha512Final(wc_Sha512* sha512, byte* hash)
@@ -1024,7 +1035,14 @@ static WC_INLINE int Sha512Update(wc_Sha512* sha512, const byte* data, word32 le
10241035

10251036
int wc_Sha512Update(wc_Sha512* sha512, const byte* data, word32 len)
10261037
{
1027-
if (sha512 == NULL || (data == NULL && len > 0)) {
1038+
if (sha512 == NULL) {
1039+
return BAD_FUNC_ARG;
1040+
}
1041+
if (data == NULL && len == 0) {
1042+
/* valid, but do nothing */
1043+
return 0;
1044+
}
1045+
if (data == NULL) {
10281046
return BAD_FUNC_ARG;
10291047
}
10301048

@@ -1414,6 +1432,17 @@ int wc_Sha512Transform(wc_Sha512* sha, const unsigned char* data)
14141432
}
14151433
int wc_Sha384Update(wc_Sha384* sha384, const byte* data, word32 len)
14161434
{
1435+
if (sha384 == NULL) {
1436+
return BAD_FUNC_ARG;
1437+
}
1438+
if (data == NULL && len == 0) {
1439+
/* valid, but do nothing */
1440+
return 0;
1441+
}
1442+
if (data == NULL) {
1443+
return BAD_FUNC_ARG;
1444+
}
1445+
14171446
return se050_hash_update(&sha384->se050Ctx, data, len);
14181447

14191448
}
@@ -1489,7 +1518,15 @@ static int InitSha384(wc_Sha384* sha384)
14891518

14901519
int wc_Sha384Update(wc_Sha384* sha384, const byte* data, word32 len)
14911520
{
1492-
if (sha384 == NULL || (data == NULL && len > 0)) {
1521+
1522+
if (sha384 == NULL) {
1523+
return BAD_FUNC_ARG;
1524+
}
1525+
if (data == NULL && len == 0) {
1526+
/* valid, but do nothing */
1527+
return 0;
1528+
}
1529+
if (data == NULL) {
14931530
return BAD_FUNC_ARG;
14941531
}
14951532

0 commit comments

Comments
 (0)