aboutsummaryrefslogtreecommitdiff
path: root/crypto/openssl/crypto/cms/cms_env.c
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/openssl/crypto/cms/cms_env.c')
-rw-r--r--crypto/openssl/crypto/cms/cms_env.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/crypto/openssl/crypto/cms/cms_env.c b/crypto/openssl/crypto/cms/cms_env.c
index bd1f3e7345d4..99cf1dcb396c 100644
--- a/crypto/openssl/crypto/cms/cms_env.c
+++ b/crypto/openssl/crypto/cms/cms_env.c
@@ -26,7 +26,7 @@ static void cms_env_set_version(CMS_EnvelopedData *env);
#define CMS_ENVELOPED_STANDARD 1
#define CMS_ENVELOPED_AUTH 2
-static int cms_get_enveloped_type(const CMS_ContentInfo *cms)
+static int cms_get_enveloped_type_simple(const CMS_ContentInfo *cms)
{
int nid = OBJ_obj2nid(cms->contentType);
@@ -38,11 +38,28 @@ static int cms_get_enveloped_type(const CMS_ContentInfo *cms)
return CMS_ENVELOPED_AUTH;
default:
- ERR_raise(ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA);
return 0;
}
}
+static int cms_get_enveloped_type(const CMS_ContentInfo *cms)
+{
+ int ret = cms_get_enveloped_type_simple(cms);
+
+ if (ret == 0)
+ ERR_raise(ERR_LIB_CMS, CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA);
+ return ret;
+}
+
+void ossl_cms_env_enc_content_free(const CMS_ContentInfo *cinf)
+{
+ if (cms_get_enveloped_type_simple(cinf) != 0) {
+ CMS_EncryptedContentInfo *ec = ossl_cms_get0_env_enc_content(cinf);
+ if (ec != NULL)
+ OPENSSL_clear_free(ec->key, ec->keylen);
+ }
+}
+
CMS_EnvelopedData *ossl_cms_get0_enveloped(CMS_ContentInfo *cms)
{
if (OBJ_obj2nid(cms->contentType) != NID_pkcs7_enveloped) {