Lines Matching refs:pkey

53 static int pkey_set_type(EVP_PKEY *pkey, ENGINE *e, int type, const char *str,
62 int EVP_PKEY_get_bits(const EVP_PKEY *pkey)
66 if (pkey != NULL) {
67 size = pkey->cache.bits;
68 if (pkey->ameth != NULL && pkey->ameth->pkey_bits != NULL)
69 size = pkey->ameth->pkey_bits(pkey);
74 int EVP_PKEY_get_security_bits(const EVP_PKEY *pkey)
78 if (pkey != NULL) {
79 size = pkey->cache.security_bits;
80 if (pkey->ameth != NULL && pkey->ameth->pkey_security_bits != NULL)
81 size = pkey->ameth->pkey_security_bits(pkey);
86 int EVP_PKEY_save_parameters(EVP_PKEY *pkey, int mode)
89 if (pkey->type == EVP_PKEY_DSA) {
90 int ret = pkey->save_parameters;
93 pkey->save_parameters = mode;
98 if (pkey->type == EVP_PKEY_EC) {
99 int ret = pkey->save_parameters;
102 pkey->save_parameters = mode;
218 int EVP_PKEY_missing_parameters(const EVP_PKEY *pkey)
220 if (pkey != NULL) {
221 if (pkey->keymgmt != NULL)
222 return !evp_keymgmt_util_has((EVP_PKEY *)pkey, SELECT_PARAMETERS);
223 else if (pkey->ameth != NULL && pkey->ameth->param_missing != NULL)
224 return pkey->ameth->param_missing(pkey);
383 EVP_PKEY *pkey = NULL;
428 if (EVP_PKEY_fromdata(ctx, &pkey, EVP_PKEY_KEYPAIR, params) != 1) {
435 return pkey;
443 pkey = EVP_PKEY_new();
444 if (pkey == NULL) {
449 if (!pkey_set_type(pkey, e, nidtype, strtype, -1, NULL)) {
454 if (!ossl_assert(pkey->ameth != NULL))
458 if (pkey->ameth->set_priv_key == NULL) {
463 if (!pkey->ameth->set_priv_key(pkey, key, len)) {
468 if (pkey->ameth->set_pub_key == NULL) {
473 if (!pkey->ameth->set_pub_key(pkey, key, len)) {
482 EVP_PKEY_free(pkey);
483 pkey = NULL;
486 return pkey;
550 int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv,
553 if (pkey->keymgmt != NULL) {
560 return evp_keymgmt_util_export(pkey, OSSL_KEYMGMT_SELECT_PRIVATE_KEY,
564 if (pkey->ameth == NULL) {
569 if (pkey->ameth->get_priv_key == NULL) {
574 if (!pkey->ameth->get_priv_key(pkey, priv, len)) {
582 int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, unsigned char *pub,
585 if (pkey->keymgmt != NULL) {
592 return evp_keymgmt_util_export(pkey, OSSL_KEYMGMT_SELECT_PUBLIC_KEY,
596 if (pkey->ameth == NULL) {
601 if (pkey->ameth->get_pub_key == NULL) {
606 if (!pkey->ameth->get_pub_key(pkey, pub, len)) {
625 EVP_PKEY *pkey = NULL;
659 if (EVP_PKEY_fromdata(ctx, &pkey, EVP_PKEY_KEYPAIR, params) <= 0) {
667 return pkey;
680 int EVP_PKEY_set_type(EVP_PKEY *pkey, int type)
682 return pkey_set_type(pkey, NULL, type, NULL, -1, NULL);
685 int EVP_PKEY_set_type_str(EVP_PKEY *pkey, const char *str, int len)
687 return pkey_set_type(pkey, NULL, EVP_PKEY_NONE, str, len, NULL);
691 int EVP_PKEY_set1_engine(EVP_PKEY *pkey, ENGINE *e)
698 if (ENGINE_get_pkey_meth(e, pkey->type) == NULL) {
704 ENGINE_finish(pkey->pmeth_engine);
705 pkey->pmeth_engine = e;
709 ENGINE *EVP_PKEY_get0_engine(const EVP_PKEY *pkey)
711 return pkey->engine;
716 static void detect_foreign_key(EVP_PKEY *pkey)
718 switch (pkey->type) {
720 pkey->foreign = pkey->pkey.rsa != NULL
721 && ossl_rsa_is_foreign(pkey->pkey.rsa);
726 pkey->foreign = pkey->pkey.ec != NULL
727 && ossl_ec_key_is_foreign(pkey->pkey.ec);
732 pkey->foreign = pkey->pkey.dsa != NULL
733 && ossl_dsa_is_foreign(pkey->pkey.dsa);
738 pkey->foreign = pkey->pkey.dh != NULL
739 && ossl_dh_is_foreign(pkey->pkey.dh);
743 pkey->foreign = 0;
748 int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key)
772 if (pkey == NULL || !EVP_PKEY_set_type(pkey, type))
775 pkey->pkey.ptr = key;
776 detect_foreign_key(pkey);
782 void *EVP_PKEY_get0(const EVP_PKEY *pkey)
784 if (pkey == NULL)
787 if (!evp_pkey_is_provided(pkey))
788 return pkey->pkey.ptr;
793 const unsigned char *EVP_PKEY_get0_hmac(const EVP_PKEY *pkey, size_t *len)
796 if (pkey->type != EVP_PKEY_HMAC) {
800 os = evp_pkey_get_legacy((EVP_PKEY *)pkey);
809 const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len)
812 if (pkey->type != EVP_PKEY_POLY1305) {
816 os = evp_pkey_get_legacy((EVP_PKEY *)pkey);
826 const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len)
830 if (pkey->type != EVP_PKEY_SIPHASH) {
834 os = evp_pkey_get_legacy((EVP_PKEY *)pkey);
844 static DSA *evp_pkey_get0_DSA_int(const EVP_PKEY *pkey)
846 if (pkey->type != EVP_PKEY_DSA) {
850 return evp_pkey_get_legacy((EVP_PKEY *)pkey);
853 const DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey)
855 return evp_pkey_get0_DSA_int(pkey);
858 int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, DSA *key)
860 int ret = EVP_PKEY_assign_DSA(pkey, key);
865 DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey)
867 DSA *ret = evp_pkey_get0_DSA_int(pkey);
876 static const ECX_KEY *evp_pkey_get0_ECX_KEY(const EVP_PKEY *pkey, int type)
878 if (EVP_PKEY_get_base_id(pkey) != type) {
882 return evp_pkey_get_legacy((EVP_PKEY *)pkey);
885 static ECX_KEY *evp_pkey_get1_ECX_KEY(EVP_PKEY *pkey, int type)
887 ECX_KEY *ret = (ECX_KEY *)evp_pkey_get0_ECX_KEY(pkey, type);
895 ECX_KEY *ossl_evp_pkey_get1_##NAME(EVP_PKEY *pkey) \
897 return evp_pkey_get1_ECX_KEY(pkey, EVP_PKEY_##NAME); \
908 int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *dhkey)
936 ret = EVP_PKEY_assign(pkey, type, dhkey);
943 DH *evp_pkey_get0_DH_int(const EVP_PKEY *pkey)
945 if (pkey->type != EVP_PKEY_DH && pkey->type != EVP_PKEY_DHX) {
949 return evp_pkey_get_legacy((EVP_PKEY *)pkey);
952 const DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey)
954 return evp_pkey_get0_DH_int(pkey);
957 DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey)
959 DH *ret = evp_pkey_get0_DH_int(pkey);
983 int EVP_PKEY_get_id(const EVP_PKEY *pkey)
985 return pkey->type;
988 int EVP_PKEY_get_base_id(const EVP_PKEY *pkey)
990 return EVP_PKEY_type(pkey->type);
1047 int EVP_PKEY_is_a(const EVP_PKEY *pkey, const char *name)
1049 if (pkey == NULL)
1051 if (pkey->keymgmt == NULL)
1052 return pkey->type == evp_pkey_name2type(name);
1053 return EVP_KEYMGMT_is_a(pkey->keymgmt, name);
1056 int EVP_PKEY_type_names_do_all(const EVP_PKEY *pkey,
1060 if (!evp_pkey_is_typed(pkey))
1063 if (!evp_pkey_is_provided(pkey)) {
1064 const char *name = OBJ_nid2sn(EVP_PKEY_get_id(pkey));
1069 return EVP_KEYMGMT_names_do_all(pkey->keymgmt, fn, data);
1072 int EVP_PKEY_can_sign(const EVP_PKEY *pkey)
1074 if (pkey->keymgmt == NULL) {
1075 switch (EVP_PKEY_get_base_id(pkey)) {
1087 return EC_KEY_can_sign(pkey->pkey.ec);
1093 const OSSL_PROVIDER *prov = EVP_KEYMGMT_get0_provider(pkey->keymgmt);
1096 pkey->keymgmt->query_operation_name != NULL
1097 ? pkey->keymgmt->query_operation_name(OSSL_OP_SIGNATURE)
1098 : EVP_KEYMGMT_get0_name(pkey->keymgmt);
1147 static int unsup_alg(BIO *out, const EVP_PKEY *pkey, int indent,
1152 kstr, OBJ_nid2ln(pkey->type)) > 0;
1155 static int print_pkey(const EVP_PKEY *pkey, BIO *out, int indent,
1158 int (*legacy_print)(BIO *out, const EVP_PKEY *pkey,
1170 ctx = OSSL_ENCODER_CTX_new_for_pkey(pkey, selection, "TEXT", NULL,
1181 ret = legacy_print(out, pkey, 0, legacy_pctx);
1183 ret = unsup_alg(out, pkey, 0, "Public Key");
1190 int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey,
1193 return print_pkey(pkey, out, indent, EVP_PKEY_PUBLIC_KEY, NULL,
1194 (pkey->ameth != NULL ? pkey->ameth->pub_print : NULL),
1198 int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey,
1201 return print_pkey(pkey, out, indent, EVP_PKEY_KEYPAIR, NULL,
1202 (pkey->ameth != NULL ? pkey->ameth->priv_print : NULL),
1206 int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey,
1209 return print_pkey(pkey, out, indent, EVP_PKEY_KEY_PARAMETERS, NULL,
1210 (pkey->ameth != NULL ? pkey->ameth->param_print : NULL),
1215 int EVP_PKEY_print_public_fp(FILE *fp, const EVP_PKEY *pkey,
1223 ret = EVP_PKEY_print_public(b, pkey, indent, pctx);
1228 int EVP_PKEY_print_private_fp(FILE *fp, const EVP_PKEY *pkey,
1236 ret = EVP_PKEY_print_private(b, pkey, indent, pctx);
1241 int EVP_PKEY_print_params_fp(FILE *fp, const EVP_PKEY *pkey,
1249 ret = EVP_PKEY_print_params(b, pkey, indent, pctx);
1267 static int legacy_asn1_ctrl_to_param(EVP_PKEY *pkey, int op,
1270 if (pkey->keymgmt == NULL)
1276 int rv = EVP_PKEY_get_default_digest_name(pkey, mdname,
1281 OSSL_LIB_CTX *libctx = ossl_provider_libctx(pkey->keymgmt->prov);
1316 static int evp_pkey_asn1_ctrl(EVP_PKEY *pkey, int op, int arg1, void *arg2)
1318 if (pkey->ameth == NULL)
1319 return legacy_asn1_ctrl_to_param(pkey, op, arg1, arg2);
1320 if (pkey->ameth->pkey_ctrl == NULL)
1322 return pkey->ameth->pkey_ctrl(pkey, op, arg1, arg2);
1325 int EVP_PKEY_get_default_digest_nid(EVP_PKEY *pkey, int *pnid)
1327 if (pkey == NULL)
1329 return evp_pkey_asn1_ctrl(pkey, ASN1_PKEY_CTRL_DEFAULT_MD_NID, 0, pnid);
1332 int EVP_PKEY_get_default_digest_name(EVP_PKEY *pkey,
1335 if (pkey->ameth == NULL)
1336 return evp_keymgmt_util_get_deflt_digest_name(pkey->keymgmt,
1337 pkey->keydata,
1342 int rv = EVP_PKEY_get_default_digest_nid(pkey, &nid);
1351 int EVP_PKEY_get_group_name(const EVP_PKEY *pkey, char *gname, size_t gname_sz,
1354 return EVP_PKEY_get_utf8_string_param(pkey, OSSL_PKEY_PARAM_GROUP_NAME,
1358 int EVP_PKEY_digestsign_supports_digest(EVP_PKEY *pkey, OSSL_LIB_CTX *libctx,
1369 propq, pkey, NULL);
1376 int EVP_PKEY_set1_encoded_public_key(EVP_PKEY *pkey, const unsigned char *pub,
1379 if (pkey == NULL)
1381 if (evp_pkey_is_provided(pkey))
1383 EVP_PKEY_set_octet_string_param(pkey,
1390 if (evp_pkey_asn1_ctrl(pkey, ASN1_PKEY_CTRL_SET1_TLS_ENCPT, publen,
1396 size_t EVP_PKEY_get1_encoded_public_key(EVP_PKEY *pkey, unsigned char **ppub)
1400 if (pkey == NULL)
1402 if (evp_pkey_is_provided(pkey)) {
1410 EVP_PKEY_get_octet_string_param(pkey,
1421 if (!EVP_PKEY_get_octet_string_param(pkey,
1432 rv = evp_pkey_asn1_ctrl(pkey, ASN1_PKEY_CTRL_GET1_TLS_ENCPT, 0, ppub);
1481 * and potentially an ENGINE, and setting those fields in |pkey|.
1484 * case, the setup consists of setting the |keymgmt| field in |pkey|.
1486 * If pkey is NULL just return 1 or 0 if the key management method exists.
1489 static int pkey_set_type(EVP_PKEY *pkey, ENGINE *e, int type, const char *str,
1507 if (pkey != NULL) {
1511 free_it = free_it || pkey->pkey.ptr != NULL;
1513 free_it = free_it || pkey->keydata != NULL;
1515 evp_pkey_free_it(pkey);
1521 if (pkey->type != EVP_PKEY_NONE
1522 && type == pkey->save_type
1523 && pkey->ameth != NULL)
1527 ENGINE_finish(pkey->engine);
1528 pkey->engine = NULL;
1529 ENGINE_finish(pkey->pmeth_engine);
1530 pkey->pmeth_engine = NULL;
1540 if (pkey == NULL && eptr != NULL)
1558 if (pkey != NULL) {
1564 pkey->keymgmt = keymgmt;
1566 pkey->save_type = type;
1567 pkey->type = type;
1576 pkey->ameth = ameth;
1588 pkey->type = ameth->pkey_id;
1590 pkey->type = EVP_PKEY_KEYMGMT;
1598 pkey->engine = e;
1627 int EVP_PKEY_set_type_by_keymgmt(EVP_PKEY *pkey, EVP_KEYMGMT *keymgmt)
1648 return pkey_set_type(pkey, NULL, EVP_PKEY_NONE,
1656 int EVP_PKEY_up_ref(EVP_PKEY *pkey)
1660 if (CRYPTO_UP_REF(&pkey->references, &i, pkey->lock) <= 0)
1663 REF_PRINT_COUNT("EVP_PKEY", pkey);
1669 EVP_PKEY *EVP_PKEY_dup(EVP_PKEY *pkey)
1673 if (pkey == NULL) {
1681 if (evp_pkey_is_blank(pkey))
1684 if (evp_pkey_is_provided(pkey)) {
1685 if (!evp_keymgmt_util_copy(dup_pk, pkey,
1691 if (evp_pkey_is_legacy(pkey)) {
1692 const EVP_PKEY_ASN1_METHOD *ameth = pkey->ameth;
1695 if (pkey->pkey.ptr == NULL /* empty key, just set type */
1696 && EVP_PKEY_set_type(dup_pk, pkey->type) != 0)
1701 if (!ameth->copy(dup_pk, pkey))
1710 &dup_pk->ex_data, &pkey->ex_data))
1713 if (pkey->attributes != NULL) {
1714 if ((dup_pk->attributes = ossl_x509at_dup(pkey->attributes)) == NULL)
1737 assert(x->pkey.ptr == NULL);
1742 x->pkey = x->legacy_cache_pkey;
1747 x->pkey.ptr = NULL;
1799 int EVP_PKEY_get_size(const EVP_PKEY *pkey)
1803 if (pkey != NULL) {
1804 size = pkey->cache.size;
1806 if (pkey->ameth != NULL && pkey->ameth->pkey_size != NULL)
1807 size = pkey->ameth->pkey_size(pkey);
1813 const char *EVP_PKEY_get0_description(const EVP_PKEY *pkey)
1815 if (!evp_pkey_is_assigned(pkey))
1818 if (evp_pkey_is_provided(pkey) && pkey->keymgmt->description != NULL)
1819 return pkey->keymgmt->description;
1821 if (pkey->ameth != NULL)
1822 return pkey->ameth->info;
1843 check = check && pk->pkey.ptr == NULL;
1850 if (pk->pkey.ptr != NULL) {
1884 if (pk->pkey.ptr != NULL) {
2104 return pk->pkey.ptr;
2127 ret = pk->legacy_cache_pkey.ptr = tmp_copy->pkey.ptr;
2128 tmp_copy->pkey.ptr = NULL;
2143 int EVP_PKEY_get_bn_param(const EVP_PKEY *pkey, const char *key_name,
2159 if (!EVP_PKEY_get_params(pkey, params)) {
2173 if (!EVP_PKEY_get_params(pkey, params))
2192 int EVP_PKEY_get_octet_string_param(const EVP_PKEY *pkey, const char *key_name,
2204 if ((ret1 = EVP_PKEY_get_params(pkey, params)))
2211 int EVP_PKEY_get_utf8_string_param(const EVP_PKEY *pkey, const char *key_name,
2223 if ((ret1 = EVP_PKEY_get_params(pkey, params)))
2238 int EVP_PKEY_get_int_param(const EVP_PKEY *pkey, const char *key_name,
2248 return EVP_PKEY_get_params(pkey, params)
2252 int EVP_PKEY_get_size_t_param(const EVP_PKEY *pkey, const char *key_name,
2262 return EVP_PKEY_get_params(pkey, params)
2266 int EVP_PKEY_set_int_param(EVP_PKEY *pkey, const char *key_name, int in)
2275 return EVP_PKEY_set_params(pkey, params);
2278 int EVP_PKEY_set_size_t_param(EVP_PKEY *pkey, const char *key_name, size_t in)
2287 return EVP_PKEY_set_params(pkey, params);
2290 int EVP_PKEY_set_bn_param(EVP_PKEY *pkey, const char *key_name,
2299 || pkey == NULL
2300 || !evp_pkey_is_assigned(pkey))
2311 return EVP_PKEY_set_params(pkey, params);
2314 int EVP_PKEY_set_utf8_string_param(EVP_PKEY *pkey, const char *key_name,
2324 return EVP_PKEY_set_params(pkey, params);
2327 int EVP_PKEY_set_octet_string_param(EVP_PKEY *pkey, const char *key_name,
2338 return EVP_PKEY_set_params(pkey, params);
2341 const OSSL_PARAM *EVP_PKEY_settable_params(const EVP_PKEY *pkey)
2343 return (pkey != NULL && evp_pkey_is_provided(pkey))
2344 ? EVP_KEYMGMT_settable_params(pkey->keymgmt)
2348 int EVP_PKEY_set_params(EVP_PKEY *pkey, OSSL_PARAM params[])
2350 if (pkey != NULL) {
2351 if (evp_pkey_is_provided(pkey)) {
2352 pkey->dirty_cnt++;
2353 return evp_keymgmt_set_params(pkey->keymgmt, pkey->keydata, params);
2363 else if (evp_pkey_is_legacy(pkey)) {
2364 return evp_pkey_set_params_to_ctrl(pkey, params);
2373 const OSSL_PARAM *EVP_PKEY_gettable_params(const EVP_PKEY *pkey)
2375 return (pkey != NULL && evp_pkey_is_provided(pkey))
2376 ? EVP_KEYMGMT_gettable_params(pkey->keymgmt)
2380 int EVP_PKEY_get_params(const EVP_PKEY *pkey, OSSL_PARAM params[])
2382 if (pkey != NULL) {
2383 if (evp_pkey_is_provided(pkey))
2384 return evp_keymgmt_get_params(pkey->keymgmt, pkey->keydata, params) > 0;
2386 else if (evp_pkey_is_legacy(pkey))
2387 return evp_pkey_get_params_to_ctrl(pkey, params) > 0;
2395 int EVP_PKEY_get_ec_point_conv_form(const EVP_PKEY *pkey)
2400 if (pkey == NULL)
2403 if (pkey->keymgmt == NULL
2404 || pkey->keydata == NULL) {
2407 const EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
2418 if (!EVP_PKEY_get_utf8_string_param(pkey,
2435 int EVP_PKEY_get_field_type(const EVP_PKEY *pkey)
2440 if (pkey == NULL)
2443 if (pkey->keymgmt == NULL
2444 || pkey->keydata == NULL) {
2447 const EC_KEY *ec = EVP_PKEY_get0_EC_KEY(pkey);
2462 if (!EVP_PKEY_get_utf8_string_param(pkey, OSSL_PKEY_PARAM_EC_FIELD_TYPE,