summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authortb <>2024-01-13 12:46:59 +0000
committertb <>2024-01-13 12:46:59 +0000
commit5a5cc510924fb6e11afacaa0c864bb2a532ff715 (patch)
tree8efc5eac62bd1c130cab8c89d74ceccd1b1bf1e8 /src
parentffcbcf224e3b614df8406b4f4316bcb3494828b4 (diff)
downloadopenbsd-5a5cc510924fb6e11afacaa0c864bb2a532ff715.tar.gz
openbsd-5a5cc510924fb6e11afacaa0c864bb2a532ff715.tar.bz2
openbsd-5a5cc510924fb6e11afacaa0c864bb2a532ff715.zip
Prepare to remove the EVP_PKEY_meth_* API
After removing the last caller of EVP_PKEY_meth_find() from libssl, none of these is used. And with EVP_PKEY_meth_new() gone, there will no longer be a way to get your hands onto an EVP_PKEY_METHOD that is writable, so none of the silent failures (because they're void functions) should matter in the few weeks until we bump. ok jsing
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/evp/pmeth_lib.c139
1 files changed, 50 insertions, 89 deletions
diff --git a/src/lib/libcrypto/evp/pmeth_lib.c b/src/lib/libcrypto/evp/pmeth_lib.c
index 604181d311..67ab72eff3 100644
--- a/src/lib/libcrypto/evp/pmeth_lib.c
+++ b/src/lib/libcrypto/evp/pmeth_lib.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: pmeth_lib.c,v 1.36 2024/01/04 20:15:01 tb Exp $ */ 1/* $OpenBSD: pmeth_lib.c,v 1.37 2024/01/13 12:46:59 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 */
@@ -101,14 +101,14 @@ static const EVP_PKEY_METHOD *pkey_methods[] = {
101 101
102#define N_PKEY_METHODS (sizeof(pkey_methods) / sizeof(pkey_methods[0])) 102#define N_PKEY_METHODS (sizeof(pkey_methods) / sizeof(pkey_methods[0]))
103 103
104const EVP_PKEY_METHOD * 104static const EVP_PKEY_METHOD *
105EVP_PKEY_meth_find(int type) 105evp_pkey_method_find(int nid)
106{ 106{
107 size_t i; 107 size_t i;
108 108
109 for (i = 0; i < N_PKEY_METHODS; i++) { 109 for (i = 0; i < N_PKEY_METHODS; i++) {
110 const EVP_PKEY_METHOD *pmeth = pkey_methods[i]; 110 const EVP_PKEY_METHOD *pmeth = pkey_methods[i];
111 if (pmeth->pkey_id == type) 111 if (pmeth->pkey_id == nid)
112 return pmeth; 112 return pmeth;
113 } 113 }
114 114
@@ -116,18 +116,18 @@ EVP_PKEY_meth_find(int type)
116} 116}
117 117
118static EVP_PKEY_CTX * 118static EVP_PKEY_CTX *
119evp_pkey_ctx_new(EVP_PKEY *pkey, int id) 119evp_pkey_ctx_new(EVP_PKEY *pkey, int nid)
120{ 120{
121 EVP_PKEY_CTX *pkey_ctx = NULL; 121 EVP_PKEY_CTX *pkey_ctx = NULL;
122 const EVP_PKEY_METHOD *pmeth; 122 const EVP_PKEY_METHOD *pmeth;
123 123
124 if (id == -1) { 124 if (nid == -1) {
125 if (pkey == NULL || pkey->ameth == NULL) 125 if (pkey == NULL || pkey->ameth == NULL)
126 return NULL; 126 return NULL;
127 id = pkey->ameth->pkey_id; 127 nid = pkey->ameth->pkey_id;
128 } 128 }
129 129
130 if ((pmeth = EVP_PKEY_meth_find(id)) == NULL) { 130 if ((pmeth = evp_pkey_method_find(nid)) == NULL) {
131 EVPerror(EVP_R_UNSUPPORTED_ALGORITHM); 131 EVPerror(EVP_R_UNSUPPORTED_ALGORITHM);
132 goto err; 132 goto err;
133 } 133 }
@@ -154,50 +154,6 @@ evp_pkey_ctx_new(EVP_PKEY *pkey, int id)
154 return NULL; 154 return NULL;
155} 155}
156 156
157EVP_PKEY_METHOD*
158EVP_PKEY_meth_new(int id, int flags)
159{
160 EVP_PKEY_METHOD *pmeth;
161
162 if ((pmeth = calloc(1, sizeof(EVP_PKEY_METHOD))) == NULL)
163 return NULL;
164
165 pmeth->pkey_id = id;
166 pmeth->flags = flags | EVP_PKEY_FLAG_DYNAMIC;
167
168 return pmeth;
169}
170
171void
172EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, const EVP_PKEY_METHOD *meth)
173{
174 if (ppkey_id)
175 *ppkey_id = meth->pkey_id;
176 if (pflags)
177 *pflags = meth->flags;
178}
179
180void
181EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src)
182{
183 EVP_PKEY_METHOD preserve;
184
185 preserve.pkey_id = dst->pkey_id;
186 preserve.flags = dst->flags;
187
188 *dst = *src;
189
190 dst->pkey_id = preserve.pkey_id;
191 dst->flags = preserve.flags;
192}
193
194void
195EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth)
196{
197 if (pmeth && (pmeth->flags & EVP_PKEY_FLAG_DYNAMIC))
198 free(pmeth);
199}
200
201EVP_PKEY_CTX * 157EVP_PKEY_CTX *
202EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *engine) 158EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *engine)
203{ 159{
@@ -205,9 +161,9 @@ EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *engine)
205} 161}
206 162
207EVP_PKEY_CTX * 163EVP_PKEY_CTX *
208EVP_PKEY_CTX_new_id(int id, ENGINE *engine) 164EVP_PKEY_CTX_new_id(int nid, ENGINE *engine)
209{ 165{
210 return evp_pkey_ctx_new(NULL, id); 166 return evp_pkey_ctx_new(NULL, nid);
211} 167}
212 168
213EVP_PKEY_CTX * 169EVP_PKEY_CTX *
@@ -241,13 +197,6 @@ EVP_PKEY_CTX_dup(EVP_PKEY_CTX *pctx)
241 return NULL; 197 return NULL;
242} 198}
243 199
244int
245EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth)
246{
247 EVPerror(ERR_R_DISABLED);
248 return 0;
249}
250
251void 200void
252EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx) 201EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx)
253{ 202{
@@ -399,25 +348,62 @@ EVP_PKEY_CTX_get_app_data(EVP_PKEY_CTX *ctx)
399 return ctx->app_data; 348 return ctx->app_data;
400} 349}
401 350
351/*
352 * Remove all the functions below in the next major bump
353 */
354
355const EVP_PKEY_METHOD *
356EVP_PKEY_meth_find(int type)
357{
358 EVPerror(ERR_R_DISABLED);
359 return NULL;
360}
361
362EVP_PKEY_METHOD*
363EVP_PKEY_meth_new(int id, int flags)
364{
365 EVPerror(ERR_R_DISABLED);
366 return NULL;
367}
368
369void
370EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, const EVP_PKEY_METHOD *meth)
371{
372}
373
374void
375EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src)
376{
377}
378
379void
380EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth)
381{
382}
383
384int
385EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth)
386{
387 EVPerror(ERR_R_DISABLED);
388 return 0;
389}
390
402void 391void
403EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth, 392EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
404 int (*init)(EVP_PKEY_CTX *ctx)) 393 int (*init)(EVP_PKEY_CTX *ctx))
405{ 394{
406 pmeth->init = init;
407} 395}
408 396
409void 397void
410EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth, 398EVP_PKEY_meth_set_copy(EVP_PKEY_METHOD *pmeth,
411 int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)) 399 int (*copy)(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src))
412{ 400{
413 pmeth->copy = copy;
414} 401}
415 402
416void 403void
417EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth, 404EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
418 void (*cleanup)(EVP_PKEY_CTX *ctx)) 405 void (*cleanup)(EVP_PKEY_CTX *ctx))
419{ 406{
420 pmeth->cleanup = cleanup;
421} 407}
422 408
423void 409void
@@ -425,8 +411,6 @@ EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
425 int (*paramgen_init)(EVP_PKEY_CTX *ctx), 411 int (*paramgen_init)(EVP_PKEY_CTX *ctx),
426 int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)) 412 int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey))
427{ 413{
428 pmeth->paramgen_init = paramgen_init;
429 pmeth->paramgen = paramgen;
430} 414}
431 415
432void 416void
@@ -434,8 +418,6 @@ EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
434 int (*keygen_init)(EVP_PKEY_CTX *ctx), 418 int (*keygen_init)(EVP_PKEY_CTX *ctx),
435 int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)) 419 int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey))
436{ 420{
437 pmeth->keygen_init = keygen_init;
438 pmeth->keygen = keygen;
439} 421}
440 422
441void 423void
@@ -444,8 +426,6 @@ EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
444 int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, 426 int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
445 const unsigned char *tbs, size_t tbslen)) 427 const unsigned char *tbs, size_t tbslen))
446{ 428{
447 pmeth->sign_init = sign_init;
448 pmeth->sign = sign;
449} 429}
450 430
451void 431void
@@ -454,8 +434,6 @@ EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
454 int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, 434 int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen,
455 const unsigned char *tbs, size_t tbslen)) 435 const unsigned char *tbs, size_t tbslen))
456{ 436{
457 pmeth->verify_init = verify_init;
458 pmeth->verify = verify;
459} 437}
460 438
461void 439void
@@ -465,8 +443,6 @@ EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD *pmeth,
465 unsigned char *sig, size_t *siglen, 443 unsigned char *sig, size_t *siglen,
466 const unsigned char *tbs, size_t tbslen)) 444 const unsigned char *tbs, size_t tbslen))
467{ 445{
468 pmeth->verify_recover_init = verify_recover_init;
469 pmeth->verify_recover = verify_recover;
470} 446}
471 447
472void 448void
@@ -475,8 +451,6 @@ EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
475 int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, 451 int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen,
476 EVP_MD_CTX *mctx)) 452 EVP_MD_CTX *mctx))
477{ 453{
478 pmeth->signctx_init = signctx_init;
479 pmeth->signctx = signctx;
480} 454}
481 455
482void 456void
@@ -485,8 +459,6 @@ EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
485 int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, 459 int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen,
486 EVP_MD_CTX *mctx)) 460 EVP_MD_CTX *mctx))
487{ 461{
488 pmeth->verifyctx_init = verifyctx_init;
489 pmeth->verifyctx = verifyctx;
490} 462}
491 463
492void 464void
@@ -495,8 +467,6 @@ EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
495 int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, 467 int (*encryptfn)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
496 const unsigned char *in, size_t inlen)) 468 const unsigned char *in, size_t inlen))
497{ 469{
498 pmeth->encrypt_init = encrypt_init;
499 pmeth->encrypt = encryptfn;
500} 470}
501 471
502void 472void
@@ -505,8 +475,6 @@ EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
505 int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, 475 int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen,
506 const unsigned char *in, size_t inlen)) 476 const unsigned char *in, size_t inlen))
507{ 477{
508 pmeth->decrypt_init = decrypt_init;
509 pmeth->decrypt = decrypt;
510} 478}
511 479
512void 480void
@@ -514,8 +482,6 @@ EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
514 int (*derive_init)(EVP_PKEY_CTX *ctx), 482 int (*derive_init)(EVP_PKEY_CTX *ctx),
515 int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen)) 483 int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen))
516{ 484{
517 pmeth->derive_init = derive_init;
518 pmeth->derive = derive;
519} 485}
520 486
521void 487void
@@ -523,26 +489,21 @@ EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
523 int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2), 489 int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void *p2),
524 int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type, const char *value)) 490 int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type, const char *value))
525{ 491{
526 pmeth->ctrl = ctrl;
527 pmeth->ctrl_str = ctrl_str;
528} 492}
529 493
530void 494void
531EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, int (*check)(EVP_PKEY *pkey)) 495EVP_PKEY_meth_set_check(EVP_PKEY_METHOD *pmeth, int (*check)(EVP_PKEY *pkey))
532{ 496{
533 pmeth->check = check;
534} 497}
535 498
536void 499void
537EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth, 500EVP_PKEY_meth_set_public_check(EVP_PKEY_METHOD *pmeth,
538 int (*public_check)(EVP_PKEY *pkey)) 501 int (*public_check)(EVP_PKEY *pkey))
539{ 502{
540 pmeth->public_check = public_check;
541} 503}
542 504
543void 505void
544EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth, 506EVP_PKEY_meth_set_param_check(EVP_PKEY_METHOD *pmeth,
545 int (*param_check)(EVP_PKEY *pkey)) 507 int (*param_check)(EVP_PKEY *pkey))
546{ 508{
547 pmeth->param_check = param_check;
548} 509}