|
@@ -331,6 +331,8 @@ typedef struct digest_data_st {
|
|
|
/* Expected output */
|
|
|
unsigned char *output;
|
|
|
size_t output_len;
|
|
|
+ /* Padding type */
|
|
|
+ int pad_type;
|
|
|
} DIGEST_DATA;
|
|
|
|
|
|
static int digest_test_init(EVP_TEST *t, const char *alg)
|
|
@@ -353,6 +355,7 @@ static int digest_test_init(EVP_TEST *t, const char *alg)
|
|
|
t->data = mdat;
|
|
|
mdat->digest = digest;
|
|
|
mdat->fetched_digest = fetched_digest;
|
|
|
+ mdat->pad_type = 0;
|
|
|
if (fetched_digest != NULL)
|
|
|
TEST_info("%s is fetched", alg);
|
|
|
return 1;
|
|
@@ -380,6 +383,8 @@ static int digest_test_parse(EVP_TEST *t,
|
|
|
return evp_test_buffer_set_count(value, mdata->input);
|
|
|
if (strcmp(keyword, "Ncopy") == 0)
|
|
|
return evp_test_buffer_ncopy(value, mdata->input);
|
|
|
+ if (strcmp(keyword, "Padding") == 0)
|
|
|
+ return (mdata->pad_type = atoi(value)) > 0;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -394,6 +399,7 @@ static int digest_test_run(EVP_TEST *t)
|
|
|
EVP_MD_CTX *mctx;
|
|
|
unsigned char *got = NULL;
|
|
|
unsigned int got_len;
|
|
|
+ OSSL_PARAM params[2];
|
|
|
|
|
|
t->err = "TEST_FAILURE";
|
|
|
if (!TEST_ptr(mctx = EVP_MD_CTX_new()))
|
|
@@ -408,6 +414,15 @@ static int digest_test_run(EVP_TEST *t)
|
|
|
t->err = "DIGESTINIT_ERROR";
|
|
|
goto err;
|
|
|
}
|
|
|
+ if (expected->pad_type > 0) {
|
|
|
+ params[0] = OSSL_PARAM_construct_int(OSSL_DIGEST_PARAM_PAD_TYPE,
|
|
|
+ &expected->pad_type);
|
|
|
+ params[1] = OSSL_PARAM_construct_end();
|
|
|
+ if (!TEST_int_gt(EVP_MD_CTX_set_params(mctx, params), 0)) {
|
|
|
+ t->err = "PARAMS_ERROR";
|
|
|
+ goto err;
|
|
|
+ }
|
|
|
+ }
|
|
|
if (!evp_test_buffer_do(expected->input, digest_update_fn, mctx)) {
|
|
|
t->err = "DIGESTUPDATE_ERROR";
|
|
|
goto err;
|