From d166ed8c11e10e9fdaeac182effb9dd318843924 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Sat, 18 Jun 2016 15:46:13 +0100 Subject: check return values for EVP_Digest*() APIs Reviewed-by: Richard Levitte --- test/md2test.c | 7 ++++-- test/md4test.c | 6 ++++- test/md5test.c | 6 ++++- test/mdc2test.c | 29 +++++++++++++--------- test/rmdtest.c | 7 ++++-- test/sha1test.c | 30 ++++++++++++++++++----- test/sha256t.c | 70 ++++++++++++++++++++++++++++++++--------------------- test/sha512t.c | 75 +++++++++++++++++++++++++++++++++++---------------------- 8 files changed, 151 insertions(+), 79 deletions(-) (limited to 'test') diff --git a/test/md2test.c b/test/md2test.c index 5d94e5f88a..cb667cbc6b 100644 --- a/test/md2test.c +++ b/test/md2test.c @@ -60,8 +60,11 @@ int main(int argc, char *argv[]) R = ret; i = 1; while (*P != NULL) { - EVP_Digest((unsigned char *)*P, strlen(*P), md, NULL, EVP_md2(), - NULL); + if (!EVP_Digest((unsigned char *)*P, strlen(*P), md, NULL, EVP_md2(), + NULL)) { + printf("EVP Digest error.\n"); + EXIT(1); + } p = pt(md); if (strcmp(p, *R) != 0) { printf("error calculating MD2 on '%s'\n", *P); diff --git a/test/md4test.c b/test/md4test.c index 9c2e7fde0c..448f9b76ef 100644 --- a/test/md4test.c +++ b/test/md4test.c @@ -56,7 +56,11 @@ int main(int argc, char *argv[]) R = ret; i = 1; while (*P != NULL) { - EVP_Digest(&(P[0][0]), strlen((char *)*P), md, NULL, EVP_md4(), NULL); + if (!EVP_Digest(&(P[0][0]), strlen((char *)*P), md, NULL, EVP_md4(), + NULL)) { + printf("EVP Digest error.\n"); + EXIT(1); + } p = pt(md); if (strcmp(p, (char *)*R) != 0) { printf("error calculating MD4 on '%s'\n", *P); diff --git a/test/md5test.c b/test/md5test.c index f39b907dcf..ec6c692407 100644 --- a/test/md5test.c +++ b/test/md5test.c @@ -56,7 +56,11 @@ int main(int argc, char *argv[]) R = ret; i = 1; while (*P != NULL) { - EVP_Digest(&(P[0][0]), strlen((char *)*P), md, NULL, EVP_md5(), NULL); + if (!EVP_Digest(&(P[0][0]), strlen((char *)*P), md, NULL, EVP_md5(), + NULL)) { + printf("EVP Digest error.\n"); + EXIT(1); + } p = pt(md); if (strcmp(p, (char *)*R) != 0) { printf("error calculating MD5 on '%s'\n", *P); diff --git a/test/mdc2test.c b/test/mdc2test.c index dc8dd58d78..d56bdcd878 100644 --- a/test/mdc2test.c +++ b/test/mdc2test.c @@ -43,7 +43,7 @@ static unsigned char pad2[16] = { int main(int argc, char *argv[]) { - int ret = 0; + int ret = 1; unsigned char md[MDC2_DIGEST_LENGTH]; int i; EVP_MD_CTX *c; @@ -54,9 +54,11 @@ int main(int argc, char *argv[]) # endif c = EVP_MD_CTX_new(); - EVP_DigestInit_ex(c, EVP_mdc2(), NULL); - EVP_DigestUpdate(c, (unsigned char *)text, strlen(text)); - EVP_DigestFinal_ex(c, &(md[0]), NULL); + if (c == NULL + || !EVP_DigestInit_ex(c, EVP_mdc2(), NULL) + || !EVP_DigestUpdate(c, (unsigned char *)text, strlen(text)) + || !EVP_DigestFinal_ex(c, &(md[0]), NULL)) + goto err; if (memcmp(md, pad1, MDC2_DIGEST_LENGTH) != 0) { for (i = 0; i < MDC2_DIGEST_LENGTH; i++) @@ -65,15 +67,18 @@ int main(int argc, char *argv[]) for (i = 0; i < MDC2_DIGEST_LENGTH; i++) printf("%02X", pad1[i]); printf(" <- correct\n"); - ret = 1; - } else + goto err; + } else { printf("pad1 - ok\n"); + } - EVP_DigestInit_ex(c, EVP_mdc2(), NULL); + if (!EVP_DigestInit_ex(c, EVP_mdc2(), NULL)) + goto err; /* FIXME: use a ctl function? */ ((MDC2_CTX *)EVP_MD_CTX_md_data(c))->pad_type = 2; - EVP_DigestUpdate(c, (unsigned char *)text, strlen(text)); - EVP_DigestFinal_ex(c, &(md[0]), NULL); + if (!EVP_DigestUpdate(c, (unsigned char *)text, strlen(text)) + || !EVP_DigestFinal_ex(c, &(md[0]), NULL)) + goto err; if (memcmp(md, pad2, MDC2_DIGEST_LENGTH) != 0) { for (i = 0; i < MDC2_DIGEST_LENGTH; i++) @@ -82,10 +87,12 @@ int main(int argc, char *argv[]) for (i = 0; i < MDC2_DIGEST_LENGTH; i++) printf("%02X", pad2[i]); printf(" <- correct\n"); - ret = 1; - } else + } else { printf("pad2 - ok\n"); + ret = 0; + } + err: EVP_MD_CTX_free(c); EXIT(ret); } diff --git a/test/rmdtest.c b/test/rmdtest.c index 7f1e72e78d..b6deaaa1f5 100644 --- a/test/rmdtest.c +++ b/test/rmdtest.c @@ -63,8 +63,11 @@ int main(int argc, char *argv[]) # ifdef CHARSET_EBCDIC ebcdic2ascii(test[i], test[i], strlen(test[i])); # endif - EVP_Digest(test[i], strlen(test[i]), md, NULL, EVP_ripemd160(), - NULL); + if (!EVP_Digest(test[i], strlen(test[i]), md, NULL, EVP_ripemd160(), + NULL)) { + printf("EVP Digest error.\n"); + EXIT(1); + } p = pt(md); if (strcmp(p, (char *)*R) != 0) { printf("error calculating RIPEMD160 on '%s'\n", test[i]); diff --git a/test/sha1test.c b/test/sha1test.c index 9ff959ec9c..80ab122784 100644 --- a/test/sha1test.c +++ b/test/sha1test.c @@ -48,7 +48,12 @@ int main(int argc, char *argv[]) # ifdef CHARSET_EBCDIC ebcdic2ascii(test[i], test[i], strlen(test[i])); # endif - EVP_Digest(test[i], strlen(test[i]), md, NULL, EVP_sha1(), NULL); + if (!EVP_Digest(test[i], strlen(test[i]), md, NULL, EVP_sha1(), + NULL)) { + printf("EVP_Digest() error\n"); + err++; + goto err; + } p = pt(md); if (strcmp(p, (char *)*R) != 0) { printf("error calculating SHA1 on '%s'\n", test[i]); @@ -63,10 +68,23 @@ int main(int argc, char *argv[]) #ifdef CHARSET_EBCDIC ebcdic2ascii(buf, buf, 1000); #endif /* CHARSET_EBCDIC */ - EVP_DigestInit_ex(c, EVP_sha1(), NULL); - for (i = 0; i < 1000; i++) - EVP_DigestUpdate(c, buf, 1000); - EVP_DigestFinal_ex(c, md, NULL); + if (!EVP_DigestInit_ex(c, EVP_sha1(), NULL)) { + printf("EVP_DigestInit_ex() error\n"); + err++; + goto err; + } + for (i = 0; i < 1000; i++) { + if (!EVP_DigestUpdate(c, buf, 1000)) { + printf("EVP_DigestUpdate() error\n"); + err++; + goto err; + } + } + if (!EVP_DigestFinal_ex(c, md, NULL)) { + printf("EVP_DigestFinal() error\n"); + err++; + goto err; + } p = pt(md); r = bigret; @@ -76,7 +94,7 @@ int main(int argc, char *argv[]) err++; } else printf("test 3 ok\n"); - + err: EVP_MD_CTX_free(c); EXIT(err); return (0); diff --git a/test/sha256t.c b/test/sha256t.c index 315d10fae9..90262d9624 100644 --- a/test/sha256t.c +++ b/test/sha256t.c @@ -64,7 +64,8 @@ int main(int argc, char **argv) fprintf(stdout, "Testing SHA-256 "); - EVP_Digest("abc", 3, md, NULL, EVP_sha256(), NULL); + if (!EVP_Digest("abc", 3, md, NULL, EVP_sha256(), NULL)) + goto err; if (memcmp(md, app_b1, sizeof(app_b1))) { fflush(stdout); fprintf(stderr, "\nTEST 1 of 3 failed.\n"); @@ -73,9 +74,10 @@ int main(int argc, char **argv) fprintf(stdout, "."); fflush(stdout); - EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" - "ijkljklm" "klmnlmno" "mnopnopq", 56, md, NULL, EVP_sha256(), - NULL); + if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" + "ijkljklm" "klmnlmno" "mnopnopq", 56, md, + NULL, EVP_sha256(), NULL)) + goto err; if (memcmp(md, app_b2, sizeof(app_b2))) { fflush(stdout); fprintf(stderr, "\nTEST 2 of 3 failed.\n"); @@ -90,19 +92,23 @@ int main(int argc, char **argv) fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n"); return 1; } - EVP_DigestInit_ex(evp, EVP_sha256(), NULL); - for (i = 0; i < 1000000; i += 288) - EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", - (1000000 - i) < 288 ? 1000000 - i : 288); - EVP_DigestFinal_ex(evp, md, NULL); + if (!EVP_DigestInit_ex(evp, EVP_sha256(), NULL)) + goto err; + for (i = 0; i < 1000000; i += 288) { + if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", + (1000000 - i) < 288 ? 1000000 - i : 288)) + goto err; + } + if (!EVP_DigestFinal_ex(evp, md, NULL)) + goto err; if (memcmp(md, app_b3, sizeof(app_b3))) { fflush(stdout); @@ -117,7 +123,8 @@ int main(int argc, char **argv) fprintf(stdout, "Testing SHA-224 "); - EVP_Digest("abc", 3, md, NULL, EVP_sha224(), NULL); + if (!EVP_Digest("abc", 3, md, NULL, EVP_sha224(), NULL)) + goto err; if (memcmp(md, addenum_1, sizeof(addenum_1))) { fflush(stdout); fprintf(stderr, "\nTEST 1 of 3 failed.\n"); @@ -126,9 +133,10 @@ int main(int argc, char **argv) fprintf(stdout, "."); fflush(stdout); - EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" - "ijkljklm" "klmnlmno" "mnopnopq", 56, md, NULL, EVP_sha224(), - NULL); + if (!EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" + "ijkljklm" "klmnlmno" "mnopnopq", 56, md, + NULL, EVP_sha224(), NULL)) + goto err; if (memcmp(md, addenum_2, sizeof(addenum_2))) { fflush(stdout); fprintf(stderr, "\nTEST 2 of 3 failed.\n"); @@ -138,12 +146,16 @@ int main(int argc, char **argv) fflush(stdout); EVP_MD_CTX_reset(evp); - EVP_DigestInit_ex(evp, EVP_sha224(), NULL); - for (i = 0; i < 1000000; i += 64) - EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", - (1000000 - i) < 64 ? 1000000 - i : 64); - EVP_DigestFinal_ex(evp, md, NULL); + if (!EVP_DigestInit_ex(evp, EVP_sha224(), NULL)) + goto err; + for (i = 0; i < 1000000; i += 64) { + if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", + (1000000 - i) < 64 ? 1000000 - i : 64)) + goto err; + } + if (!EVP_DigestFinal_ex(evp, md, NULL)) + goto err; EVP_MD_CTX_free(evp); if (memcmp(md, addenum_3, sizeof(addenum_3))) { @@ -158,4 +170,8 @@ int main(int argc, char **argv) fflush(stdout); return 0; + + err: + fprintf(stderr, "Fatal EVP error!\n"); + return 1; } diff --git a/test/sha512t.c b/test/sha512t.c index b11fcaa051..18cdf39736 100644 --- a/test/sha512t.c +++ b/test/sha512t.c @@ -83,7 +83,8 @@ int main(int argc, char **argv) fprintf(stdout, "Testing SHA-512 "); - EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL); + if (!EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL)) + goto err; if (memcmp(md, app_c1, sizeof(app_c1))) { fflush(stdout); fprintf(stderr, "\nTEST 1 of 3 failed.\n"); @@ -92,10 +93,11 @@ int main(int argc, char **argv) fprintf(stdout, "."); fflush(stdout); - EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" - "efghijkl" "fghijklm" "ghijklmn" "hijklmno" - "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" - "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL); + if (!EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" + "efghijkl" "fghijklm" "ghijklmn" "hijklmno" + "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" + "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL)) + goto err; if (memcmp(md, app_c2, sizeof(app_c2))) { fflush(stdout); fprintf(stderr, "\nTEST 2 of 3 failed.\n"); @@ -110,19 +112,23 @@ int main(int argc, char **argv) fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n"); return 1; } - EVP_DigestInit_ex(evp, EVP_sha512(), NULL); - for (i = 0; i < 1000000; i += 288) - EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", - (1000000 - i) < 288 ? 1000000 - i : 288); - EVP_DigestFinal_ex(evp, md, NULL); + if (!EVP_DigestInit_ex(evp, EVP_sha512(), NULL)) + goto err; + for (i = 0; i < 1000000; i += 288) { + if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", + (1000000 - i) < 288 ? 1000000 - i : 288)) + goto err; + } + if (!EVP_DigestFinal_ex(evp, md, NULL)) + goto err; EVP_MD_CTX_reset(evp); if (memcmp(md, app_c3, sizeof(app_c3))) { @@ -138,7 +144,8 @@ int main(int argc, char **argv) fprintf(stdout, "Testing SHA-384 "); - EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL); + if (!EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL)) + goto err; if (memcmp(md, app_d1, sizeof(app_d1))) { fflush(stdout); fprintf(stderr, "\nTEST 1 of 3 failed.\n"); @@ -147,10 +154,11 @@ int main(int argc, char **argv) fprintf(stdout, "."); fflush(stdout); - EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" - "efghijkl" "fghijklm" "ghijklmn" "hijklmno" - "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" - "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL); + if (!EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" + "efghijkl" "fghijklm" "ghijklmn" "hijklmno" + "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" + "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL)) + goto err; if (memcmp(md, app_d2, sizeof(app_d2))) { fflush(stdout); fprintf(stderr, "\nTEST 2 of 3 failed.\n"); @@ -159,12 +167,16 @@ int main(int argc, char **argv) fprintf(stdout, "."); fflush(stdout); - EVP_DigestInit_ex(evp, EVP_sha384(), NULL); - for (i = 0; i < 1000000; i += 64) - EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" - "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", - (1000000 - i) < 64 ? 1000000 - i : 64); - EVP_DigestFinal_ex(evp, md, NULL); + if (!EVP_DigestInit_ex(evp, EVP_sha384(), NULL)) + goto err; + for (i = 0; i < 1000000; i += 64) { + if (!EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" + "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", + (1000000 - i) < 64 ? 1000000 - i : 64)) + goto err; + } + if (!EVP_DigestFinal_ex(evp, md, NULL)) + goto err; EVP_MD_CTX_free(evp); if (memcmp(md, app_d3, sizeof(app_d3))) { @@ -179,4 +191,9 @@ int main(int argc, char **argv) fflush(stdout); return 0; + + err: + fflush(stdout); + fprintf(stderr, "\nFatal EVP error!\n"); + return 1; } -- cgit v1.2.3