diff options
author | Jon Spillett <jon.spillett@oracle.com> | 2021-02-17 17:56:36 +1000 |
---|---|---|
committer | Pauli <pauli@openssl.org> | 2021-04-30 09:15:50 +1000 |
commit | b536880c45722777df5ebe62897a6efcef757945 (patch) | |
tree | 015ad29f74586e3407079864fa686ffcde658fad /crypto/pkcs7 | |
parent | d77ba503a2cf1c83098baca345327761b991d191 (diff) |
Add library context and property query support into the PKCS12 API
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14434)
Diffstat (limited to 'crypto/pkcs7')
-rw-r--r-- | crypto/pkcs7/pk7_lib.c | 31 | ||||
-rw-r--r-- | crypto/pkcs7/pk7_local.h | 2 |
2 files changed, 33 insertions, 0 deletions
diff --git a/crypto/pkcs7/pk7_lib.c b/crypto/pkcs7/pk7_lib.c index bf959a28d2..a4b62f40dd 100644 --- a/crypto/pkcs7/pk7_lib.c +++ b/crypto/pkcs7/pk7_lib.c @@ -469,6 +469,37 @@ const PKCS7_CTX *ossl_pkcs7_get0_ctx(const PKCS7 *p7) return p7 != NULL ? &p7->ctx : NULL; } +void ossl_pkcs7_set0_libctx(PKCS7 *p7, OSSL_LIB_CTX *ctx) +{ + p7->ctx.libctx = ctx; +} + +int ossl_pkcs7_set1_propq(PKCS7 *p7, const char *propq) +{ + if (p7->ctx.propq != NULL) { + OPENSSL_free(p7->ctx.propq); + p7->ctx.propq = NULL; + } + if (propq != NULL) { + p7->ctx.propq = OPENSSL_strdup(propq); + if (p7->ctx.propq == NULL) { + ERR_raise(ERR_LIB_PROV, ERR_R_MALLOC_FAILURE); + return 0; + } + } + return 1; +} + +int ossl_pkcs7_ctx_propagate(const PKCS7 *from, PKCS7 *to) +{ + ossl_pkcs7_set0_libctx(to, from->ctx.libctx); + if (!ossl_pkcs7_set1_propq(to, from->ctx.propq)) + return 0; + + ossl_pkcs7_resolve_libctx(to); + return 1; +} + OSSL_LIB_CTX *ossl_pkcs7_ctx_get0_libctx(const PKCS7_CTX *ctx) { return ctx != NULL ? ctx->libctx : NULL; diff --git a/crypto/pkcs7/pk7_local.h b/crypto/pkcs7/pk7_local.h index 177ecc196b..8deb342b79 100644 --- a/crypto/pkcs7/pk7_local.h +++ b/crypto/pkcs7/pk7_local.h @@ -12,3 +12,5 @@ const PKCS7_CTX *ossl_pkcs7_get0_ctx(const PKCS7 *p7); OSSL_LIB_CTX *ossl_pkcs7_ctx_get0_libctx(const PKCS7_CTX *ctx); const char *ossl_pkcs7_ctx_get0_propq(const PKCS7_CTX *ctx); + +int ossl_pkcs7_ctx_propagate(const PKCS7 *from, PKCS7 *to); |