summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/cms/cms_enc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/cms/cms_enc.c')
-rw-r--r--src/lib/libcrypto/cms/cms_enc.c33
1 files changed, 14 insertions, 19 deletions
diff --git a/src/lib/libcrypto/cms/cms_enc.c b/src/lib/libcrypto/cms/cms_enc.c
index b3a00f67fa..a04c831f95 100644
--- a/src/lib/libcrypto/cms/cms_enc.c
+++ b/src/lib/libcrypto/cms/cms_enc.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: cms_enc.c,v 1.14 2019/08/10 18:15:52 jsing Exp $ */ 1/* $OpenBSD: cms_enc.c,v 1.15 2019/08/11 10:38:27 jsing Exp $ */
2/* 2/*
3 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 3 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
4 * project. 4 * project.
@@ -84,7 +84,7 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
84 84
85 b = BIO_new(BIO_f_cipher()); 85 b = BIO_new(BIO_f_cipher());
86 if (b == NULL) { 86 if (b == NULL) {
87 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, ERR_R_MALLOC_FAILURE); 87 CMSerror(ERR_R_MALLOC_FAILURE);
88 return NULL; 88 return NULL;
89 } 89 }
90 90
@@ -101,14 +101,13 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
101 ciph = EVP_get_cipherbyobj(calg->algorithm); 101 ciph = EVP_get_cipherbyobj(calg->algorithm);
102 102
103 if (!ciph) { 103 if (!ciph) {
104 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, CMS_R_UNKNOWN_CIPHER); 104 CMSerror(CMS_R_UNKNOWN_CIPHER);
105 goto err; 105 goto err;
106 } 106 }
107 } 107 }
108 108
109 if (EVP_CipherInit_ex(ctx, ciph, NULL, NULL, NULL, enc) <= 0) { 109 if (EVP_CipherInit_ex(ctx, ciph, NULL, NULL, NULL, enc) <= 0) {
110 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 110 CMSerror(CMS_R_CIPHER_INITIALISATION_ERROR);
111 CMS_R_CIPHER_INITIALISATION_ERROR);
112 goto err; 111 goto err;
113 } 112 }
114 113
@@ -123,8 +122,7 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
123 piv = iv; 122 piv = iv;
124 } 123 }
125 } else if (EVP_CIPHER_asn1_to_param(ctx, calg->parameter) <= 0) { 124 } else if (EVP_CIPHER_asn1_to_param(ctx, calg->parameter) <= 0) {
126 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 125 CMSerror(CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR);
127 CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR);
128 goto err; 126 goto err;
129 } 127 }
130 tkeylen = EVP_CIPHER_CTX_key_length(ctx); 128 tkeylen = EVP_CIPHER_CTX_key_length(ctx);
@@ -132,7 +130,7 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
132 if (!enc || !ec->key) { 130 if (!enc || !ec->key) {
133 tkey = OPENSSL_malloc(tkeylen); 131 tkey = OPENSSL_malloc(tkeylen);
134 if (tkey == NULL) { 132 if (tkey == NULL) {
135 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, ERR_R_MALLOC_FAILURE); 133 CMSerror(ERR_R_MALLOC_FAILURE);
136 goto err; 134 goto err;
137 } 135 }
138 if (EVP_CIPHER_CTX_rand_key(ctx, tkey) <= 0) 136 if (EVP_CIPHER_CTX_rand_key(ctx, tkey) <= 0)
@@ -158,8 +156,7 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
158 * which may be useful in MMA. 156 * which may be useful in MMA.
159 */ 157 */
160 if (enc || ec->debug) { 158 if (enc || ec->debug) {
161 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 159 CMSerror(CMS_R_INVALID_KEY_LENGTH);
162 CMS_R_INVALID_KEY_LENGTH);
163 goto err; 160 goto err;
164 } else { 161 } else {
165 /* Use random key */ 162 /* Use random key */
@@ -173,19 +170,17 @@ cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
173 } 170 }
174 171
175 if (EVP_CipherInit_ex(ctx, NULL, NULL, ec->key, piv, enc) <= 0) { 172 if (EVP_CipherInit_ex(ctx, NULL, NULL, ec->key, piv, enc) <= 0) {
176 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 173 CMSerror(CMS_R_CIPHER_INITIALISATION_ERROR);
177 CMS_R_CIPHER_INITIALISATION_ERROR);
178 goto err; 174 goto err;
179 } 175 }
180 if (enc) { 176 if (enc) {
181 calg->parameter = ASN1_TYPE_new(); 177 calg->parameter = ASN1_TYPE_new();
182 if (calg->parameter == NULL) { 178 if (calg->parameter == NULL) {
183 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, ERR_R_MALLOC_FAILURE); 179 CMSerror(ERR_R_MALLOC_FAILURE);
184 goto err; 180 goto err;
185 } 181 }
186 if (EVP_CIPHER_param_to_asn1(ctx, calg->parameter) <= 0) { 182 if (EVP_CIPHER_param_to_asn1(ctx, calg->parameter) <= 0) {
187 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO, 183 CMSerror(CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR);
188 CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR);
189 goto err; 184 goto err;
190 } 185 }
191 /* If parameter type not set omit parameter */ 186 /* If parameter type not set omit parameter */
@@ -215,7 +210,7 @@ cms_EncryptedContent_init(CMS_EncryptedContentInfo *ec,
215 ec->cipher = cipher; 210 ec->cipher = cipher;
216 if (key) { 211 if (key) {
217 if ((ec->key = OPENSSL_malloc(keylen)) == NULL) { 212 if ((ec->key = OPENSSL_malloc(keylen)) == NULL) {
218 CMSerr(CMS_F_CMS_ENCRYPTEDCONTENT_INIT, ERR_R_MALLOC_FAILURE); 213 CMSerror(ERR_R_MALLOC_FAILURE);
219 return 0; 214 return 0;
220 } 215 }
221 memcpy(ec->key, key, keylen); 216 memcpy(ec->key, key, keylen);
@@ -234,19 +229,19 @@ CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph,
234 CMS_EncryptedContentInfo *ec; 229 CMS_EncryptedContentInfo *ec;
235 230
236 if (!key || !keylen) { 231 if (!key || !keylen) {
237 CMSerr(CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY, CMS_R_NO_KEY); 232 CMSerror(CMS_R_NO_KEY);
238 return 0; 233 return 0;
239 } 234 }
240 if (ciph) { 235 if (ciph) {
241 cms->d.encryptedData = M_ASN1_new_of(CMS_EncryptedData); 236 cms->d.encryptedData = M_ASN1_new_of(CMS_EncryptedData);
242 if (!cms->d.encryptedData) { 237 if (!cms->d.encryptedData) {
243 CMSerr(CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY, ERR_R_MALLOC_FAILURE); 238 CMSerror(ERR_R_MALLOC_FAILURE);
244 return 0; 239 return 0;
245 } 240 }
246 cms->contentType = OBJ_nid2obj(NID_pkcs7_encrypted); 241 cms->contentType = OBJ_nid2obj(NID_pkcs7_encrypted);
247 cms->d.encryptedData->version = 0; 242 cms->d.encryptedData->version = 0;
248 } else if (OBJ_obj2nid(cms->contentType) != NID_pkcs7_encrypted) { 243 } else if (OBJ_obj2nid(cms->contentType) != NID_pkcs7_encrypted) {
249 CMSerr(CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY, CMS_R_NOT_ENCRYPTED_DATA); 244 CMSerror(CMS_R_NOT_ENCRYPTED_DATA);
250 return 0; 245 return 0;
251 } 246 }
252 ec = cms->d.encryptedData->encryptedContentInfo; 247 ec = cms->d.encryptedData->encryptedContentInfo;