rv = 1;
t->err = NULL;
-end:
+ end:
OPENSSL_free(priv);
return rv;
}
static int keygen_test_init(EVP_TEST *t, const char *alg)
{
KEYGEN_TEST_DATA *data;
- int nid = OBJ_sn2nid(alg);
-
- if (nid == NID_undef) {
- nid = OBJ_ln2nid(alg);
- if (nid == NID_undef)
- return 0;
- }
if (is_pkey_disabled(alg)) {
t->skip = 1;
}
if (!TEST_ptr(data = OPENSSL_malloc(sizeof(*data))))
- goto err;
+ return 0;
data->keyname = NULL;
- data->alg = OPENSSL_strdup(alg);
data->paramname = NULL;
data->controls = sk_OPENSSL_STRING_new_null();
+ data->alg = OPENSSL_strdup(alg);
t->data = data;
t->err = NULL;
return 1;
-err:
- return 0;
}
static void keygen_test_cleanup(EVP_TEST *t)
ctrlfree(keygen->controls);
OPENSSL_free(keygen->alg);
- OPENSSL_free(keygen->paramname);
OPENSSL_free(keygen->keyname);
+ OPENSSL_free(keygen->paramname);
+ OPENSSL_free(keygen->alg);
OPENSSL_free(t->data);
t->data = NULL;
}
EVP_PKEY *pkey = NULL, *keyparams = NULL;
EVP_PKEY_CTX *genctx = NULL; /* Keygen context to use */
int rv = 1, i;
+ OSSL_PARAM params[4];
+ size_t params_n = 0;
if (keygen->paramname != NULL) {
rv = find_key(&keyparams, keygen->paramname, public_keys);
goto err;
}
- for (i = 0; i < sk_OPENSSL_STRING_num(keygen->controls); ++i) {
- if (!pkey_test_ctrl(t, genctx,
- sk_OPENSSL_STRING_value(keygen->controls, i))
- || t->err != NULL)
+ if (sk_OPENSSL_STRING_num(keygen->controls) > 0) {
+ if (!ctrl2params(t, keygen->controls,
+ EVP_PKEY_CTX_settable_params(genctx),
+ params, OSSL_NELEM(params), ¶ms_n))
+ goto err;
+ if (!EVP_PKEY_CTX_set_params(genctx, params)) {
+ t->err = "PKEY_CTRL_ERROR";
goto err;
+ }
+ } else {
+ params[0] = OSSL_PARAM_construct_end();
}
if (EVP_PKEY_keygen(genctx, &pkey) <= 0) {
}
t->err = NULL;
-err:
+ err:
+ ctrl2params_free(params, params_n, 0);
EVP_PKEY_CTX_free(genctx);
return rv;
}
#ifdef OPENSSL_NO_DSA
if (HAS_CASE_PREFIX(name, "DSA"))
return 1;
+#endif
+#ifdef OPENSSL_NO_SM2
+ if (HAS_CASE_PREFIX(name, "SM2"))
+ return 1;
#endif
return 0;
}