summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/pmeth_lib.c
diff options
context:
space:
mode:
authortb <>2021-12-03 14:18:06 +0000
committertb <>2021-12-03 14:18:06 +0000
commit3a616b37697e883a646f8587fdb0e5f838e0b41a (patch)
tree5cae9107a5a714abf239bd21271a57087f01893d /src/lib/libcrypto/evp/pmeth_lib.c
parentbd634dd15594b3e9c78eb50c254cc44a25b8cba5 (diff)
downloadopenbsd-3a616b37697e883a646f8587fdb0e5f838e0b41a.tar.gz
openbsd-3a616b37697e883a646f8587fdb0e5f838e0b41a.tar.bz2
openbsd-3a616b37697e883a646f8587fdb0e5f838e0b41a.zip
Fix EVP_PKEY_{asn1,meth}_copy once and for all
It is very easy to forget to copy over newly added methods. Everyone working in this corner has run into this. Instead, preserve what needs preserving and use a struct copy, so all methods get copied from src to dest. tweak/ok jsing
Diffstat (limited to 'src/lib/libcrypto/evp/pmeth_lib.c')
-rw-r--r--src/lib/libcrypto/evp/pmeth_lib.c41
1 files changed, 7 insertions, 34 deletions
diff --git a/src/lib/libcrypto/evp/pmeth_lib.c b/src/lib/libcrypto/evp/pmeth_lib.c
index 36bfe8d9fc..359e57d74c 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.16 2019/11/01 15:08:57 jsing Exp $ */ 1/* $OpenBSD: pmeth_lib.c,v 1.17 2021/12/03 14:18:06 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 */
@@ -272,42 +272,15 @@ EVP_PKEY_meth_get0_info(int *ppkey_id, int *pflags, const EVP_PKEY_METHOD *meth)
272void 272void
273EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src) 273EVP_PKEY_meth_copy(EVP_PKEY_METHOD *dst, const EVP_PKEY_METHOD *src)
274{ 274{
275 dst->init = src->init; 275 EVP_PKEY_METHOD preserve;
276 dst->copy = src->copy;
277 dst->cleanup = src->cleanup;
278 276
279 dst->paramgen_init = src->paramgen_init; 277 preserve.pkey_id = dst->pkey_id;
280 dst->paramgen = src->paramgen; 278 preserve.flags = dst->flags;
281 279
282 dst->keygen_init = src->keygen_init; 280 *dst = *src;
283 dst->keygen = src->keygen;
284 281
285 dst->sign_init = src->sign_init; 282 dst->pkey_id = preserve.pkey_id;
286 dst->sign = src->sign; 283 dst->flags = preserve.flags;
287
288 dst->verify_init = src->verify_init;
289 dst->verify = src->verify;
290
291 dst->verify_recover_init = src->verify_recover_init;
292 dst->verify_recover = src->verify_recover;
293
294 dst->signctx_init = src->signctx_init;
295 dst->signctx = src->signctx;
296
297 dst->verifyctx_init = src->verifyctx_init;
298 dst->verifyctx = src->verifyctx;
299
300 dst->encrypt_init = src->encrypt_init;
301 dst->encrypt = src->encrypt;
302
303 dst->decrypt_init = src->decrypt_init;
304 dst->decrypt = src->decrypt;
305
306 dst->derive_init = src->derive_init;
307 dst->derive = src->derive;
308
309 dst->ctrl = src->ctrl;
310 dst->ctrl_str = src->ctrl_str;
311} 284}
312 285
313void 286void