diff options
author | tb <> | 2024-08-29 16:58:19 +0000 |
---|---|---|
committer | tb <> | 2024-08-29 16:58:19 +0000 |
commit | de7d0ab1c83083dedcf2e492963189bc2ba71ef0 (patch) | |
tree | ac80a4e15f4c62b0c198aacafcfe36bca5b92794 /src | |
parent | dabf625eeca30be23d1bdf73a58eb6f7fd1bed35 (diff) | |
download | openbsd-de7d0ab1c83083dedcf2e492963189bc2ba71ef0.tar.gz openbsd-de7d0ab1c83083dedcf2e492963189bc2ba71ef0.tar.bz2 openbsd-de7d0ab1c83083dedcf2e492963189bc2ba71ef0.zip |
Remove the pkey_{,public_,param_}check() handlers
This disables the EVP_PKEY_*check() API and makes it fail (more precisely
indicate lack of support) on all key types.
This is an intermediate step to full removal.
Removal is ok beck jsing
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/dh/dh_ameth.c | 32 | ||||
-rw-r--r-- | src/lib/libcrypto/ec/ec_ameth.c | 41 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/evp_local.h | 10 | ||||
-rw-r--r-- | src/lib/libcrypto/evp/pmeth_gn.c | 60 | ||||
-rw-r--r-- | src/lib/libcrypto/rsa/rsa_ameth.c | 12 |
5 files changed, 15 insertions, 140 deletions
diff --git a/src/lib/libcrypto/dh/dh_ameth.c b/src/lib/libcrypto/dh/dh_ameth.c index d51a5bea4c..13141761d4 100644 --- a/src/lib/libcrypto/dh/dh_ameth.c +++ b/src/lib/libcrypto/dh/dh_ameth.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: dh_ameth.c,v 1.40 2024/01/04 17:01:26 tb Exp $ */ | 1 | /* $OpenBSD: dh_ameth.c,v 1.41 2024/08/29 16:58:19 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2006. | 3 | * project 2006. |
4 | */ | 4 | */ |
@@ -496,32 +496,6 @@ DHparams_print_fp(FILE *fp, const DH *x) | |||
496 | } | 496 | } |
497 | LCRYPTO_ALIAS(DHparams_print_fp); | 497 | LCRYPTO_ALIAS(DHparams_print_fp); |
498 | 498 | ||
499 | static int | ||
500 | dh_pkey_public_check(const EVP_PKEY *pkey) | ||
501 | { | ||
502 | DH *dh = pkey->pkey.dh; | ||
503 | |||
504 | if (dh->pub_key == NULL) { | ||
505 | DHerror(DH_R_MISSING_PUBKEY); | ||
506 | return 0; | ||
507 | } | ||
508 | |||
509 | return DH_check_pub_key_ex(dh, dh->pub_key); | ||
510 | } | ||
511 | |||
512 | static int | ||
513 | dh_pkey_param_check(const EVP_PKEY *pkey) | ||
514 | { | ||
515 | DH *dh = pkey->pkey.dh; | ||
516 | |||
517 | /* | ||
518 | * It would have made more sense to support EVP_PKEY_check() for DH | ||
519 | * keys and call DH_check_ex() there and keeping this as a wrapper | ||
520 | * for DH_param_check_ex(). We follow OpenSSL's choice. | ||
521 | */ | ||
522 | return DH_check_ex(dh); | ||
523 | } | ||
524 | |||
525 | const EVP_PKEY_ASN1_METHOD dh_asn1_meth = { | 499 | const EVP_PKEY_ASN1_METHOD dh_asn1_meth = { |
526 | .base_method = &dh_asn1_meth, | 500 | .base_method = &dh_asn1_meth, |
527 | .pkey_id = EVP_PKEY_DH, | 501 | .pkey_id = EVP_PKEY_DH, |
@@ -550,8 +524,4 @@ const EVP_PKEY_ASN1_METHOD dh_asn1_meth = { | |||
550 | .param_print = dh_param_print, | 524 | .param_print = dh_param_print, |
551 | 525 | ||
552 | .pkey_free = dh_free, | 526 | .pkey_free = dh_free, |
553 | |||
554 | .pkey_check = NULL, | ||
555 | .pkey_public_check = dh_pkey_public_check, | ||
556 | .pkey_param_check = dh_pkey_param_check, | ||
557 | }; | 527 | }; |
diff --git a/src/lib/libcrypto/ec/ec_ameth.c b/src/lib/libcrypto/ec/ec_ameth.c index 378261b946..f42093c3db 100644 --- a/src/lib/libcrypto/ec/ec_ameth.c +++ b/src/lib/libcrypto/ec/ec_ameth.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ec_ameth.c,v 1.68 2024/05/10 05:12:03 tb Exp $ */ | 1 | /* $OpenBSD: ec_ameth.c,v 1.69 2024/08/29 16:58:19 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2006. | 3 | * project 2006. |
4 | */ | 4 | */ |
@@ -689,41 +689,6 @@ ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2) | |||
689 | 689 | ||
690 | } | 690 | } |
691 | 691 | ||
692 | static int | ||
693 | ec_pkey_check(const EVP_PKEY *pkey) | ||
694 | { | ||
695 | EC_KEY *eckey = pkey->pkey.ec; | ||
696 | |||
697 | if (eckey->priv_key == NULL) { | ||
698 | ECerror(EC_R_MISSING_PRIVATE_KEY); | ||
699 | return 0; | ||
700 | } | ||
701 | |||
702 | return EC_KEY_check_key(eckey); | ||
703 | } | ||
704 | |||
705 | static int | ||
706 | ec_pkey_public_check(const EVP_PKEY *pkey) | ||
707 | { | ||
708 | EC_KEY *eckey = pkey->pkey.ec; | ||
709 | |||
710 | /* This also checks the private key, but oh, well... */ | ||
711 | return EC_KEY_check_key(eckey); | ||
712 | } | ||
713 | |||
714 | static int | ||
715 | ec_pkey_param_check(const EVP_PKEY *pkey) | ||
716 | { | ||
717 | EC_KEY *eckey = pkey->pkey.ec; | ||
718 | |||
719 | if (eckey->group == NULL) { | ||
720 | ECerror(EC_R_MISSING_PARAMETERS); | ||
721 | return 0; | ||
722 | } | ||
723 | |||
724 | return EC_GROUP_check(eckey->group, NULL); | ||
725 | } | ||
726 | |||
727 | #ifndef OPENSSL_NO_CMS | 692 | #ifndef OPENSSL_NO_CMS |
728 | 693 | ||
729 | static int | 694 | static int |
@@ -1092,8 +1057,4 @@ const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = { | |||
1092 | .pkey_ctrl = ec_pkey_ctrl, | 1057 | .pkey_ctrl = ec_pkey_ctrl, |
1093 | .old_priv_decode = old_ec_priv_decode, | 1058 | .old_priv_decode = old_ec_priv_decode, |
1094 | .old_priv_encode = old_ec_priv_encode, | 1059 | .old_priv_encode = old_ec_priv_encode, |
1095 | |||
1096 | .pkey_check = ec_pkey_check, | ||
1097 | .pkey_public_check = ec_pkey_public_check, | ||
1098 | .pkey_param_check = ec_pkey_param_check, | ||
1099 | }; | 1060 | }; |
diff --git a/src/lib/libcrypto/evp/evp_local.h b/src/lib/libcrypto/evp/evp_local.h index 5d541ffec4..54cd65d0af 100644 --- a/src/lib/libcrypto/evp/evp_local.h +++ b/src/lib/libcrypto/evp/evp_local.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: evp_local.h,v 1.24 2024/08/28 07:15:04 tb Exp $ */ | 1 | /* $OpenBSD: evp_local.h,v 1.25 2024/08/29 16:58:19 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -140,10 +140,6 @@ struct evp_pkey_asn1_method_st { | |||
140 | int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, | 140 | int (*item_sign)(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, |
141 | X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); | 141 | X509_ALGOR *alg1, X509_ALGOR *alg2, ASN1_BIT_STRING *sig); |
142 | 142 | ||
143 | int (*pkey_check)(const EVP_PKEY *pk); | ||
144 | int (*pkey_public_check)(const EVP_PKEY *pk); | ||
145 | int (*pkey_param_check)(const EVP_PKEY *pk); | ||
146 | |||
147 | int (*set_priv_key)(EVP_PKEY *pk, const unsigned char *private_key, | 143 | int (*set_priv_key)(EVP_PKEY *pk, const unsigned char *private_key, |
148 | size_t len); | 144 | size_t len); |
149 | int (*set_pub_key)(EVP_PKEY *pk, const unsigned char *public_key, | 145 | int (*set_pub_key)(EVP_PKEY *pk, const unsigned char *public_key, |
@@ -322,10 +318,6 @@ struct evp_pkey_method_st { | |||
322 | const unsigned char *tbs, size_t tbslen); | 318 | const unsigned char *tbs, size_t tbslen); |
323 | int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, | 319 | int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, |
324 | size_t siglen, const unsigned char *tbs, size_t tbslen); | 320 | size_t siglen, const unsigned char *tbs, size_t tbslen); |
325 | |||
326 | int (*check)(EVP_PKEY *pkey); | ||
327 | int (*public_check)(EVP_PKEY *pkey); | ||
328 | int (*param_check)(EVP_PKEY *pkey); | ||
329 | } /* EVP_PKEY_METHOD */; | 321 | } /* EVP_PKEY_METHOD */; |
330 | 322 | ||
331 | void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); | 323 | void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); |
diff --git a/src/lib/libcrypto/evp/pmeth_gn.c b/src/lib/libcrypto/evp/pmeth_gn.c index 1c355e594a..415690cd0e 100644 --- a/src/lib/libcrypto/evp/pmeth_gn.c +++ b/src/lib/libcrypto/evp/pmeth_gn.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: pmeth_gn.c,v 1.19 2024/04/17 08:24:11 tb Exp $ */ | 1 | /* $OpenBSD: pmeth_gn.c,v 1.20 2024/08/29 16:58:19 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2006. | 3 | * project 2006. |
4 | */ | 4 | */ |
@@ -226,68 +226,30 @@ merr: | |||
226 | } | 226 | } |
227 | LCRYPTO_ALIAS(EVP_PKEY_new_mac_key); | 227 | LCRYPTO_ALIAS(EVP_PKEY_new_mac_key); |
228 | 228 | ||
229 | /* | ||
230 | * XXX - remove the API below in the next bump. | ||
231 | */ | ||
232 | |||
229 | int | 233 | int |
230 | EVP_PKEY_check(EVP_PKEY_CTX *ctx) | 234 | EVP_PKEY_check(EVP_PKEY_CTX *ctx) |
231 | { | 235 | { |
232 | EVP_PKEY *pkey; | 236 | EVPerror(ERR_R_DISABLED); |
233 | 237 | return -2; | |
234 | if ((pkey = ctx->pkey) == NULL) { | ||
235 | EVPerror(EVP_R_NO_KEY_SET); | ||
236 | return 0; | ||
237 | } | ||
238 | |||
239 | if (ctx->pmeth->check != NULL) | ||
240 | return ctx->pmeth->check(pkey); | ||
241 | |||
242 | if (pkey->ameth == NULL || pkey->ameth->pkey_check == NULL) { | ||
243 | EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | ||
244 | return -2; | ||
245 | } | ||
246 | |||
247 | return pkey->ameth->pkey_check(pkey); | ||
248 | } | 238 | } |
249 | LCRYPTO_ALIAS(EVP_PKEY_check); | 239 | LCRYPTO_ALIAS(EVP_PKEY_check); |
250 | 240 | ||
251 | int | 241 | int |
252 | EVP_PKEY_public_check(EVP_PKEY_CTX *ctx) | 242 | EVP_PKEY_public_check(EVP_PKEY_CTX *ctx) |
253 | { | 243 | { |
254 | EVP_PKEY *pkey; | 244 | EVPerror(ERR_R_DISABLED); |
255 | 245 | return -2; | |
256 | if ((pkey = ctx->pkey) == NULL) { | ||
257 | EVPerror(EVP_R_NO_KEY_SET); | ||
258 | return 0; | ||
259 | } | ||
260 | |||
261 | if (ctx->pmeth->public_check != NULL) | ||
262 | return ctx->pmeth->public_check(pkey); | ||
263 | |||
264 | if (pkey->ameth == NULL || pkey->ameth->pkey_public_check == NULL) { | ||
265 | EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | ||
266 | return -2; | ||
267 | } | ||
268 | |||
269 | return pkey->ameth->pkey_public_check(pkey); | ||
270 | } | 246 | } |
271 | LCRYPTO_ALIAS(EVP_PKEY_public_check); | 247 | LCRYPTO_ALIAS(EVP_PKEY_public_check); |
272 | 248 | ||
273 | int | 249 | int |
274 | EVP_PKEY_param_check(EVP_PKEY_CTX *ctx) | 250 | EVP_PKEY_param_check(EVP_PKEY_CTX *ctx) |
275 | { | 251 | { |
276 | EVP_PKEY *pkey; | 252 | EVPerror(ERR_R_DISABLED); |
277 | 253 | return -2; | |
278 | if ((pkey = ctx->pkey) == NULL) { | ||
279 | EVPerror(EVP_R_NO_KEY_SET); | ||
280 | return 0; | ||
281 | } | ||
282 | |||
283 | if (ctx->pmeth->param_check != NULL) | ||
284 | return ctx->pmeth->param_check(pkey); | ||
285 | |||
286 | if (pkey->ameth == NULL || pkey->ameth->pkey_param_check == NULL) { | ||
287 | EVPerror(EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE); | ||
288 | return -2; | ||
289 | } | ||
290 | |||
291 | return pkey->ameth->pkey_param_check(pkey); | ||
292 | } | 254 | } |
293 | LCRYPTO_ALIAS(EVP_PKEY_param_check); | 255 | LCRYPTO_ALIAS(EVP_PKEY_param_check); |
diff --git a/src/lib/libcrypto/rsa/rsa_ameth.c b/src/lib/libcrypto/rsa/rsa_ameth.c index d7ce931733..eb5d599bf0 100644 --- a/src/lib/libcrypto/rsa/rsa_ameth.c +++ b/src/lib/libcrypto/rsa/rsa_ameth.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: rsa_ameth.c,v 1.59 2024/08/28 07:15:04 tb Exp $ */ | 1 | /* $OpenBSD: rsa_ameth.c,v 1.60 2024/08/29 16:58:19 tb Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2006. | 3 | * project 2006. |
4 | */ | 4 | */ |
@@ -1082,12 +1082,6 @@ rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn, | |||
1082 | return 2; | 1082 | return 2; |
1083 | } | 1083 | } |
1084 | 1084 | ||
1085 | static int | ||
1086 | rsa_pkey_check(const EVP_PKEY *pkey) | ||
1087 | { | ||
1088 | return RSA_check_key(pkey->pkey.rsa); | ||
1089 | } | ||
1090 | |||
1091 | #ifndef OPENSSL_NO_CMS | 1085 | #ifndef OPENSSL_NO_CMS |
1092 | static RSA_OAEP_PARAMS * | 1086 | static RSA_OAEP_PARAMS * |
1093 | rsa_oaep_decode(const X509_ALGOR *alg) | 1087 | rsa_oaep_decode(const X509_ALGOR *alg) |
@@ -1235,16 +1229,12 @@ const EVP_PKEY_ASN1_METHOD rsa_asn1_meth = { | |||
1235 | .old_priv_encode = old_rsa_priv_encode, | 1229 | .old_priv_encode = old_rsa_priv_encode, |
1236 | .item_verify = rsa_item_verify, | 1230 | .item_verify = rsa_item_verify, |
1237 | .item_sign = rsa_item_sign, | 1231 | .item_sign = rsa_item_sign, |
1238 | |||
1239 | .pkey_check = rsa_pkey_check, | ||
1240 | }; | 1232 | }; |
1241 | 1233 | ||
1242 | const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = { | 1234 | const EVP_PKEY_ASN1_METHOD rsa2_asn1_meth = { |
1243 | .base_method = &rsa_asn1_meth, | 1235 | .base_method = &rsa_asn1_meth, |
1244 | .pkey_id = EVP_PKEY_RSA2, | 1236 | .pkey_id = EVP_PKEY_RSA2, |
1245 | .pkey_flags = ASN1_PKEY_ALIAS, | 1237 | .pkey_flags = ASN1_PKEY_ALIAS, |
1246 | |||
1247 | .pkey_check = rsa_pkey_check, | ||
1248 | }; | 1238 | }; |
1249 | 1239 | ||
1250 | const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = { | 1240 | const EVP_PKEY_ASN1_METHOD rsa_pss_asn1_meth = { |