Lines Matching +full:no +full:- +full:cms
2 * Copyright 2013-2021 The OpenSSL Project Authors. All Rights Reserved.
21 #include <openssl/cms.h>
32 if (ri->type != CMS_RECIPINFO_AGREE) { in CMS_RecipientInfo_kari_get0_alg()
37 *palg = ri->d.kari->keyEncryptionAlgorithm; in CMS_RecipientInfo_kari_get0_alg()
39 *pukm = ri->d.kari->ukm; in CMS_RecipientInfo_kari_get0_alg()
48 if (ri->type != CMS_RECIPINFO_AGREE) { in STACK_OF()
52 return ri->d.kari->recipientEncryptedKeys; in STACK_OF()
64 if (ri->type != CMS_RECIPINFO_AGREE) { in CMS_RecipientInfo_kari_get0_orig_id()
68 oik = ri->d.kari->originator; in CMS_RecipientInfo_kari_get0_orig_id()
79 if (oik->type == CMS_OIK_ISSUER_SERIAL) { in CMS_RecipientInfo_kari_get0_orig_id()
81 *issuer = oik->d.issuerAndSerialNumber->issuer; in CMS_RecipientInfo_kari_get0_orig_id()
83 *sno = oik->d.issuerAndSerialNumber->serialNumber; in CMS_RecipientInfo_kari_get0_orig_id()
84 } else if (oik->type == CMS_OIK_KEYIDENTIFIER) { in CMS_RecipientInfo_kari_get0_orig_id()
86 *keyid = oik->d.subjectKeyIdentifier; in CMS_RecipientInfo_kari_get0_orig_id()
87 } else if (oik->type == CMS_OIK_PUBKEY) { in CMS_RecipientInfo_kari_get0_orig_id()
89 *pubalg = oik->d.originatorKey->algorithm; in CMS_RecipientInfo_kari_get0_orig_id()
91 *pubkey = oik->d.originatorKey->publicKey; in CMS_RecipientInfo_kari_get0_orig_id()
101 if (ri->type != CMS_RECIPINFO_AGREE) { in CMS_RecipientInfo_kari_orig_id_cmp()
103 return -2; in CMS_RecipientInfo_kari_orig_id_cmp()
105 oik = ri->d.kari->originator; in CMS_RecipientInfo_kari_orig_id_cmp()
106 if (oik->type == CMS_OIK_ISSUER_SERIAL) in CMS_RecipientInfo_kari_orig_id_cmp()
107 return ossl_cms_ias_cert_cmp(oik->d.issuerAndSerialNumber, cert); in CMS_RecipientInfo_kari_orig_id_cmp()
108 else if (oik->type == CMS_OIK_KEYIDENTIFIER) in CMS_RecipientInfo_kari_orig_id_cmp()
109 return ossl_cms_keyid_cert_cmp(oik->d.subjectKeyIdentifier, cert); in CMS_RecipientInfo_kari_orig_id_cmp()
110 return -1; in CMS_RecipientInfo_kari_orig_id_cmp()
119 CMS_KeyAgreeRecipientIdentifier *rid = rek->rid; in CMS_RecipientEncryptedKey_get0_id()
121 if (rid->type == CMS_REK_ISSUER_SERIAL) { in CMS_RecipientEncryptedKey_get0_id()
123 *issuer = rid->d.issuerAndSerialNumber->issuer; in CMS_RecipientEncryptedKey_get0_id()
125 *sno = rid->d.issuerAndSerialNumber->serialNumber; in CMS_RecipientEncryptedKey_get0_id()
132 } else if (rid->type == CMS_REK_KEYIDENTIFIER) { in CMS_RecipientEncryptedKey_get0_id()
134 *keyid = rid->d.rKeyId->subjectKeyIdentifier; in CMS_RecipientEncryptedKey_get0_id()
136 *tm = rid->d.rKeyId->date; in CMS_RecipientEncryptedKey_get0_id()
138 *other = rid->d.rKeyId->other; in CMS_RecipientEncryptedKey_get0_id()
151 CMS_KeyAgreeRecipientIdentifier *rid = rek->rid; in CMS_RecipientEncryptedKey_cert_cmp()
153 if (rid->type == CMS_REK_ISSUER_SERIAL) in CMS_RecipientEncryptedKey_cert_cmp()
154 return ossl_cms_ias_cert_cmp(rid->d.issuerAndSerialNumber, cert); in CMS_RecipientEncryptedKey_cert_cmp()
155 else if (rid->type == CMS_REK_KEYIDENTIFIER) in CMS_RecipientEncryptedKey_cert_cmp()
156 return ossl_cms_keyid_cert_cmp(rid->d.rKeyId->subjectKeyIdentifier, in CMS_RecipientEncryptedKey_cert_cmp()
159 return -1; in CMS_RecipientEncryptedKey_cert_cmp()
166 CMS_KeyAgreeRecipientInfo *kari = ri->d.kari; in CMS_RecipientInfo_kari_set0_pkey_and_peer()
168 EVP_PKEY_CTX_free(kari->pctx); in CMS_RecipientInfo_kari_set0_pkey_and_peer()
169 kari->pctx = NULL; in CMS_RecipientInfo_kari_set0_pkey_and_peer()
173 pctx = EVP_PKEY_CTX_new_from_pkey(ossl_cms_ctx_get0_libctx(kari->cms_ctx), in CMS_RecipientInfo_kari_set0_pkey_and_peer()
175 ossl_cms_ctx_get0_propq(kari->cms_ctx)); in CMS_RecipientInfo_kari_set0_pkey_and_peer()
186 kari->pctx = pctx; in CMS_RecipientInfo_kari_set0_pkey_and_peer()
200 if (ri->type == CMS_RECIPINFO_AGREE) in CMS_RecipientInfo_kari_get0_ctx()
201 return ri->d.kari->ctx; in CMS_RecipientInfo_kari_get0_ctx()
221 keklen = EVP_CIPHER_CTX_get_key_length(kari->ctx); in cms_kek_cipher()
225 if (EVP_PKEY_derive(kari->pctx, kek, &keklen) <= 0) in cms_kek_cipher()
228 if (!EVP_CipherInit_ex(kari->ctx, NULL, NULL, kek, NULL, enc)) in cms_kek_cipher()
231 if (!EVP_CipherUpdate(kari->ctx, NULL, &outlen, in, inlen)) in cms_kek_cipher()
236 if (!EVP_CipherUpdate(kari->ctx, out, &outlen, in, inlen)) in cms_kek_cipher()
246 EVP_CIPHER_CTX_reset(kari->ctx); in cms_kek_cipher()
247 /* FIXME: WHY IS kari->pctx freed here? /RL */ in cms_kek_cipher()
248 EVP_PKEY_CTX_free(kari->pctx); in cms_kek_cipher()
249 kari->pctx = NULL; in cms_kek_cipher()
253 int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms, in CMS_RecipientInfo_kari_decrypt() argument
263 enckeylen = rek->encryptedKey->length; in CMS_RecipientInfo_kari_decrypt()
264 enckey = rek->encryptedKey->data; in CMS_RecipientInfo_kari_decrypt()
269 if (!cms_kek_cipher(&cek, &ceklen, enckey, enckeylen, ri->d.kari, 0)) in CMS_RecipientInfo_kari_decrypt()
271 ec = ossl_cms_get0_env_enc_content(cms); in CMS_RecipientInfo_kari_decrypt()
272 OPENSSL_clear_free(ec->key, ec->keylen); in CMS_RecipientInfo_kari_decrypt()
273 ec->key = cek; in CMS_RecipientInfo_kari_decrypt()
274 ec->keylen = ceklen; in CMS_RecipientInfo_kari_decrypt()
289 const CMS_CTX *ctx = kari->cms_ctx; in cms_kari_create_ephemeral_key()
306 kari->pctx = pctx; in cms_kari_create_ephemeral_key()
321 const CMS_CTX *ctx = kari->cms_ctx; in cms_kari_set_originator_private_key()
331 kari->pctx = pctx; in cms_kari_set_originator_private_key()
349 ri->d.kari = M_ASN1_new_of(CMS_KeyAgreeRecipientInfo); in ossl_cms_RecipientInfo_kari_init()
350 if (ri->d.kari == NULL) in ossl_cms_RecipientInfo_kari_init()
352 ri->type = CMS_RECIPINFO_AGREE; in ossl_cms_RecipientInfo_kari_init()
354 kari = ri->d.kari; in ossl_cms_RecipientInfo_kari_init()
355 kari->version = 3; in ossl_cms_RecipientInfo_kari_init()
356 kari->cms_ctx = ctx; in ossl_cms_RecipientInfo_kari_init()
362 if (!sk_CMS_RecipientEncryptedKey_push(kari->recipientEncryptedKeys, rek)) { in ossl_cms_RecipientInfo_kari_init()
368 rek->rid->type = CMS_REK_KEYIDENTIFIER; in ossl_cms_RecipientInfo_kari_init()
369 rek->rid->d.rKeyId = M_ASN1_new_of(CMS_RecipientKeyIdentifier); in ossl_cms_RecipientInfo_kari_init()
370 if (rek->rid->d.rKeyId == NULL) in ossl_cms_RecipientInfo_kari_init()
372 if (!ossl_cms_set1_keyid(&rek->rid->d.rKeyId->subjectKeyIdentifier, recip)) in ossl_cms_RecipientInfo_kari_init()
375 rek->rid->type = CMS_REK_ISSUER_SERIAL; in ossl_cms_RecipientInfo_kari_init()
376 if (!ossl_cms_set1_ias(&rek->rid->d.issuerAndSerialNumber, recip)) in ossl_cms_RecipientInfo_kari_init()
386 CMS_OriginatorIdentifierOrKey *oik = ri->d.kari->originator; in ossl_cms_RecipientInfo_kari_init()
392 oik->type = CMS_OIK_KEYIDENTIFIER; in ossl_cms_RecipientInfo_kari_init()
393 oik->d.subjectKeyIdentifier = ASN1_OCTET_STRING_new(); in ossl_cms_RecipientInfo_kari_init()
394 if (oik->d.subjectKeyIdentifier == NULL) in ossl_cms_RecipientInfo_kari_init()
396 if (!ossl_cms_set1_keyid(&oik->d.subjectKeyIdentifier, originator)) in ossl_cms_RecipientInfo_kari_init()
399 oik->type = CMS_REK_ISSUER_SERIAL; in ossl_cms_RecipientInfo_kari_init()
400 if (!ossl_cms_set1_ias(&oik->d.issuerAndSerialNumber, originator)) in ossl_cms_RecipientInfo_kari_init()
409 rek->pkey = recipPubKey; in ossl_cms_RecipientInfo_kari_init()
416 const CMS_CTX *cms_ctx = kari->cms_ctx; in cms_wrap_init()
417 EVP_CIPHER_CTX *ctx = kari->ctx; in cms_wrap_init()
476 int ossl_cms_RecipientInfo_kari_encrypt(const CMS_ContentInfo *cms, in ossl_cms_RecipientInfo_kari_encrypt() argument
485 if (ri->type != CMS_RECIPINFO_AGREE) { in ossl_cms_RecipientInfo_kari_encrypt()
489 kari = ri->d.kari; in ossl_cms_RecipientInfo_kari_encrypt()
490 reks = kari->recipientEncryptedKeys; in ossl_cms_RecipientInfo_kari_encrypt()
491 ec = ossl_cms_get0_env_enc_content(cms); in ossl_cms_RecipientInfo_kari_encrypt()
493 if (!cms_wrap_init(kari, ec->cipher)) in ossl_cms_RecipientInfo_kari_encrypt()
496 * If no originator key set up initialise for ephemeral key the public key in ossl_cms_RecipientInfo_kari_encrypt()
499 if (kari->originator->type == -1) { in ossl_cms_RecipientInfo_kari_encrypt()
500 CMS_OriginatorIdentifierOrKey *oik = kari->originator; in ossl_cms_RecipientInfo_kari_encrypt()
501 oik->type = CMS_OIK_PUBKEY; in ossl_cms_RecipientInfo_kari_encrypt()
502 oik->d.originatorKey = M_ASN1_new_of(CMS_OriginatorPublicKey); in ossl_cms_RecipientInfo_kari_encrypt()
503 if (!oik->d.originatorKey) in ossl_cms_RecipientInfo_kari_encrypt()
514 if (EVP_PKEY_derive_set_peer(kari->pctx, rek->pkey) <= 0) in ossl_cms_RecipientInfo_kari_encrypt()
516 if (!cms_kek_cipher(&enckey, &enckeylen, ec->key, ec->keylen, in ossl_cms_RecipientInfo_kari_encrypt()
519 ASN1_STRING_set0(rek->encryptedKey, enckey, enckeylen); in ossl_cms_RecipientInfo_kari_encrypt()