X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=test%2Fevp_test.c;h=b08114e827c2069335ed66fe7ab85e32b3747dd5;hp=6fcf3c6077e3bca76d96752f6be753470c245a26;hb=ab78f89b2df6164826c1efb9aea4bf9edb269644;hpb=ad887416f1e59c3294a7d8f83a0ca77120523b4a diff --git a/test/evp_test.c b/test/evp_test.c index 6fcf3c6077..b08114e827 100644 --- a/test/evp_test.c +++ b/test/evp_test.c @@ -360,13 +360,18 @@ static int digest_test_run(EVP_TEST *t) { DIGEST_DATA *expected = t->data; EVP_MD_CTX *mctx; - unsigned char got[EVP_MAX_MD_SIZE]; + unsigned char *got = NULL; unsigned int got_len; t->err = "TEST_FAILURE"; if (!TEST_ptr(mctx = EVP_MD_CTX_new())) goto err; + got = OPENSSL_malloc(expected->output_len > EVP_MAX_MD_SIZE ? + expected->output_len : EVP_MAX_MD_SIZE); + if (!TEST_ptr(got)) + goto err; + if (!EVP_DigestInit_ex(mctx, expected->digest, NULL)) { t->err = "DIGESTINIT_ERROR"; goto err; @@ -376,9 +381,17 @@ static int digest_test_run(EVP_TEST *t) goto err; } - if (!EVP_DigestFinal(mctx, got, &got_len)) { - t->err = "DIGESTFINAL_ERROR"; - goto err; + if (EVP_MD_flags(expected->digest) & EVP_MD_FLAG_XOF) { + got_len = expected->output_len; + if (!EVP_DigestFinalXOF(mctx, got, got_len)) { + t->err = "DIGESTFINALXOF_ERROR"; + goto err; + } + } else { + if (!EVP_DigestFinal(mctx, got, &got_len)) { + t->err = "DIGESTFINAL_ERROR"; + goto err; + } } if (!TEST_int_eq(expected->output_len, got_len)) { t->err = "DIGEST_LENGTH_MISMATCH"; @@ -391,6 +404,7 @@ static int digest_test_run(EVP_TEST *t) t->err = NULL; err: + OPENSSL_free(got); EVP_MD_CTX_free(mctx); return 1; } @@ -1288,7 +1302,7 @@ static int parse_uint64(const char *value, uint64_t *pr) return -1; } *pr *= 10; - if (!TEST_true(isdigit(*p))) { + if (!TEST_true(isdigit((unsigned char)*p))) { TEST_error("Invalid character in string %s", value); return -1; } @@ -1623,10 +1637,21 @@ typedef struct kdf_data_st { static int kdf_test_init(EVP_TEST *t, const char *name) { KDF_DATA *kdata; + int kdf_nid = OBJ_sn2nid(name); + +#ifdef OPENSSL_NO_SCRYPT + if (strcmp(name, "scrypt") == 0) { + t->skip = 1; + return 1; + } +#endif + + if (kdf_nid == NID_undef) + kdf_nid = OBJ_ln2nid(name); if (!TEST_ptr(kdata = OPENSSL_zalloc(sizeof(*kdata)))) return 0; - kdata->ctx = EVP_PKEY_CTX_new_id(OBJ_sn2nid(name), NULL); + kdata->ctx = EVP_PKEY_CTX_new_id(kdf_nid, NULL); if (kdata->ctx == NULL) { OPENSSL_free(kdata); return 0;