diff options
author | tb <> | 2022-01-09 15:15:25 +0000 |
---|---|---|
committer | tb <> | 2022-01-09 15:15:25 +0000 |
commit | 12dd2352d38b1ef2237d623bc6b869d169e71567 (patch) | |
tree | b42edbe525fc7c43874d4c14d0981bb1cb4e2d3d /src/lib/libcrypto/evp/evp_locl.h | |
parent | 98fb653e64884887dde11a1e705e45a6290548d1 (diff) | |
download | openbsd-12dd2352d38b1ef2237d623bc6b869d169e71567.tar.gz openbsd-12dd2352d38b1ef2237d623bc6b869d169e71567.tar.bz2 openbsd-12dd2352d38b1ef2237d623bc6b869d169e71567.zip |
Prepare to provide EVP_MD_CTX{,_set}_pkey_ctx()
This API with very strange ownership handling is used by Ruby 3.1,
unfortunately.
For unclear reasons, it was decided that the caller retains ownership of
the pctx passed in. EVP_PKEY_CTX aren't refcounted, so a flag was added to
make sure that md_ctx->pctx is not freed in EVP_MD_CTX_{cleanup,reset}().
Since EVP_MD_CTX_copy_ex() duplicates the md_ctx->pctx, the flag also needs
to be unset on the duplicated EVP_MD_CTX.
ok inoguchi jsing
Diffstat (limited to 'src/lib/libcrypto/evp/evp_locl.h')
-rw-r--r-- | src/lib/libcrypto/evp/evp_locl.h | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/lib/libcrypto/evp/evp_locl.h b/src/lib/libcrypto/evp/evp_locl.h index ec4cc6d63d..5eef0b244f 100644 --- a/src/lib/libcrypto/evp/evp_locl.h +++ b/src/lib/libcrypto/evp/evp_locl.h | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: evp_locl.h,v 1.17 2021/12/12 21:21:58 tb Exp $ */ | 1 | /* $OpenBSD: evp_locl.h,v 1.18 2022/01/09 15:15:25 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 | */ |
@@ -61,6 +61,12 @@ | |||
61 | 61 | ||
62 | __BEGIN_HIDDEN_DECLS | 62 | __BEGIN_HIDDEN_DECLS |
63 | 63 | ||
64 | /* | ||
65 | * Don't free md_ctx->pctx in EVP_MD_CTX_cleanup(). Needed for ownership | ||
66 | * handling in EVP_MD_CTX_set_pkey_ctx(). | ||
67 | */ | ||
68 | #define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 | ||
69 | |||
64 | /* Macros to code block cipher wrappers */ | 70 | /* Macros to code block cipher wrappers */ |
65 | 71 | ||
66 | /* Wrapper functions for each cipher mode */ | 72 | /* Wrapper functions for each cipher mode */ |