diff --git a/src/wp_dh_kmgmt.c b/src/wp_dh_kmgmt.c index 5dc1ffc3..51368614 100644 --- a/src/wp_dh_kmgmt.c +++ b/src/wp_dh_kmgmt.c @@ -807,7 +807,7 @@ static int wp_dh_get_params(wp_Dh* dh, OSSL_PARAM params[]) p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_PRIV_KEY); if (p != NULL) { if (p->data == NULL) { - p->return_size = dh->pubSz; + p->return_size = dh->privSz; } else if (p->data_type == OSSL_PARAM_UNSIGNED_INTEGER) { if (p->data_size < dh->privSz) { @@ -826,9 +826,15 @@ static int wp_dh_get_params(wp_Dh* dh, OSSL_PARAM params[]) } } } - if (ok && (!wp_params_set_octet_string_be(params, OSSL_PKEY_PARAM_PRIV_KEY, - dh->priv, dh->privSz))) { - ok = 0; + if (ok) { + /* Only call if we haven't already handled OSSL_PKEY_PARAM_PRIV_KEY */ + p = OSSL_PARAM_locate(params, OSSL_PKEY_PARAM_PRIV_KEY); + if (p == NULL || p->data != NULL) { + if (!wp_params_set_octet_string_be(params, OSSL_PKEY_PARAM_PRIV_KEY, + dh->priv, dh->privSz)) { + ok = 0; + } + } } if (ok && (!wp_dh_get_params_encoded_public_key(dh, params))) { ok = 0; diff --git a/test/test_dh.c b/test/test_dh.c index 8874a870..bc9fce29 100644 --- a/test/test_dh.c +++ b/test/test_dh.c @@ -508,6 +508,9 @@ int test_dh_get_params(void *data) for (int j = 0; j < 2; j++) { if (j == 0) { mode = "Null data"; + paramsWolfProvider[0] = gettableParams[i]; + paramsWolfProvider[0].data = NULL; + paramsWolfProvider[0].data_size = 0; } else { mode = "Buffer data";