Skip to content

Commit

Permalink
provider: return error if buf too small when getting ec pubkey param
Browse files Browse the repository at this point in the history
Fixes #20889

There was an incorrect value passed to EC_POINT_point2oct() for the
buffer size of the param passed-in.

Added testcases.

Signed-off-by: Yi Li <yi1.li@intel.com>

Reviewed-by: Paul Dale <pauli@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from #20890)

(cherry picked from commit 9107087)
  • Loading branch information
liyi77 authored and t8m committed May 12, 2023
1 parent 909e1d5 commit 7e58f38
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 1 deletion.
2 changes: 1 addition & 1 deletion providers/implementations/keymgmt/ec_kmgmt.c
Expand Up @@ -745,7 +745,7 @@ int common_get_params(void *key, OSSL_PARAM params[], int sm2)
}
p->return_size = EC_POINT_point2oct(ecg, ecp,
POINT_CONVERSION_UNCOMPRESSED,
p->data, p->return_size, bnctx);
p->data, p->data_size, bnctx);
if (p->return_size == 0)
goto err;
}
Expand Down
22 changes: 22 additions & 0 deletions test/evp_extra_test.c
Expand Up @@ -899,6 +899,8 @@ static int test_EC_priv_pub(void)
BIGNUM *priv = NULL;
int ret = 0;
unsigned char *encoded = NULL;
size_t len = 0;
unsigned char buffer[128];

/*
* Setup the parameters for our pkey object. For our purposes they don't
Expand Down Expand Up @@ -1018,6 +1020,26 @@ static int test_EC_priv_pub(void)
goto err;
}

/* Positive and negative testcase for EVP_PKEY_get_octet_string_param */
if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
buffer, sizeof(buffer), &len), 1)
|| !TEST_int_eq(len, 65))
goto err;

len = 0;
if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
NULL, 0, &len), 1)
|| !TEST_int_eq(len, 65))
goto err;

/* too-short buffer len*/
if (!TEST_int_eq(EVP_PKEY_get_octet_string_param(params_and_pub,
OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY,
buffer, 10, &len), 0))
goto err;

ret = 1;
err:
OSSL_PARAM_free(params);
Expand Down

0 comments on commit 7e58f38

Please sign in to comment.