1 /* $OpenBSD: cms.h,v 1.15 2019/08/11 10:15:30 jsing Exp $ */ 2 /* 3 * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 4 * project. 5 */ 6 /* ==================================================================== 7 * Copyright (c) 2008 The OpenSSL Project. All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in 18 * the documentation and/or other materials provided with the 19 * distribution. 20 * 21 * 3. All advertising materials mentioning features or use of this 22 * software must display the following acknowledgment: 23 * "This product includes software developed by the OpenSSL Project 24 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 25 * 26 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 27 * endorse or promote products derived from this software without 28 * prior written permission. For written permission, please contact 29 * licensing@OpenSSL.org. 30 * 31 * 5. Products derived from this software may not be called "OpenSSL" 32 * nor may "OpenSSL" appear in their names without prior written 33 * permission of the OpenSSL Project. 34 * 35 * 6. Redistributions of any form whatsoever must retain the following 36 * acknowledgment: 37 * "This product includes software developed by the OpenSSL Project 38 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 39 * 40 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 41 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 42 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 43 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 44 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 45 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 46 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 47 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 49 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 50 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 51 * OF THE POSSIBILITY OF SUCH DAMAGE. 52 * ==================================================================== 53 */ 54 module libressl_d.openssl.cms; 55 56 57 private static import core.stdc.config; 58 private static import libressl_d.compat.stdio; 59 private static import libressl_d.compat.sys.types; 60 private static import libressl_d.compat.time; 61 private static import libressl_d.openssl.asn1; 62 private static import libressl_d.openssl.bio; 63 private static import libressl_d.openssl.ossl_typ; 64 private static import libressl_d.openssl.pem; 65 private static import libressl_d.openssl.stack; 66 private static import libressl_d.openssl.x509v3; 67 public import libressl_d.openssl.opensslconf; 68 69 version (OPENSSL_NO_CMS) { 70 } else { 71 public import libressl_d.openssl.x509; 72 public import libressl_d.openssl.x509v3; 73 74 extern (C): 75 nothrow @nogc: 76 77 struct CMS_ContentInfo_st; 78 struct CMS_SignerInfo_st; 79 struct CMS_CertificateChoices; 80 struct CMS_RevocationInfoChoice_st; 81 struct CMS_RecipientInfo_st; 82 struct CMS_ReceiptRequest_st; 83 struct CMS_Receipt_st; 84 struct CMS_RecipientEncryptedKey_st; 85 struct CMS_OtherKeyAttribute_st; 86 87 alias CMS_ContentInfo = .CMS_ContentInfo_st; 88 alias CMS_SignerInfo = .CMS_SignerInfo_st; 89 alias CMS_RevocationInfoChoice = .CMS_RevocationInfoChoice_st; 90 alias CMS_RecipientInfo = .CMS_RecipientInfo_st; 91 alias CMS_ReceiptRequest = .CMS_ReceiptRequest_st; 92 alias CMS_Receipt = .CMS_Receipt_st; 93 alias CMS_RecipientEncryptedKey = .CMS_RecipientEncryptedKey_st; 94 alias CMS_OtherKeyAttribute = .CMS_OtherKeyAttribute_st; 95 96 //DECLARE_STACK_OF(CMS_SignerInfo) 97 struct stack_st_CMS_SignerInfo 98 { 99 libressl_d.openssl.stack._STACK stack; 100 } 101 102 //DECLARE_STACK_OF(CMS_RecipientEncryptedKey) 103 struct stack_st_CMS_RecipientEncryptedKey 104 { 105 libressl_d.openssl.stack._STACK stack; 106 } 107 108 //DECLARE_STACK_OF(CMS_RecipientInfo) 109 struct stack_st_CMS_RecipientInfo 110 { 111 libressl_d.openssl.stack._STACK stack; 112 } 113 114 //DECLARE_STACK_OF(CMS_RevocationInfoChoice) 115 struct stack_st_CMS_RevocationInfoChoice 116 { 117 libressl_d.openssl.stack._STACK stack; 118 } 119 120 .CMS_ContentInfo* CMS_ContentInfo_new(); 121 void CMS_ContentInfo_free(.CMS_ContentInfo* a); 122 .CMS_ContentInfo* d2i_CMS_ContentInfo(.CMS_ContentInfo** a, const (ubyte)** in_, core.stdc.config.c_long len); 123 int i2d_CMS_ContentInfo(.CMS_ContentInfo* a, ubyte** out_); 124 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM CMS_ContentInfo_it; 125 .CMS_ReceiptRequest* CMS_ReceiptRequest_new(); 126 void CMS_ReceiptRequest_free(.CMS_ReceiptRequest* a); 127 .CMS_ReceiptRequest* d2i_CMS_ReceiptRequest(.CMS_ReceiptRequest** a, const (ubyte)** in_, core.stdc.config.c_long len); 128 int i2d_CMS_ReceiptRequest(.CMS_ReceiptRequest* a, ubyte** out_); 129 extern __gshared const libressl_d.openssl.ossl_typ.ASN1_ITEM CMS_ReceiptRequest_it; 130 int CMS_ContentInfo_print_ctx(libressl_d.openssl.bio.BIO* out_, .CMS_ContentInfo* x, int indent, const (libressl_d.openssl.ossl_typ.ASN1_PCTX)* pctx); 131 132 enum CMS_SIGNERINFO_ISSUER_SERIAL = 0; 133 enum CMS_SIGNERINFO_KEYIDENTIFIER = 1; 134 135 enum CMS_RECIPINFO_NONE = -1; 136 enum CMS_RECIPINFO_TRANS = 0; 137 enum CMS_RECIPINFO_AGREE = 1; 138 enum CMS_RECIPINFO_KEK = 2; 139 enum CMS_RECIPINFO_PASS = 3; 140 enum CMS_RECIPINFO_OTHER = 4; 141 142 /* S/MIME related flags */ 143 144 enum CMS_TEXT = 0x01; 145 enum CMS_NOCERTS = 0x02; 146 enum CMS_NO_CONTENT_VERIFY = 0x04; 147 enum CMS_NO_ATTR_VERIFY = 0x08; 148 enum CMS_NOSIGS = .CMS_NO_CONTENT_VERIFY | .CMS_NO_ATTR_VERIFY; 149 enum CMS_NOINTERN = 0x10; 150 enum CMS_NO_SIGNER_CERT_VERIFY = 0x20; 151 enum CMS_NOVERIFY = 0x20; 152 enum CMS_DETACHED = 0x40; 153 enum CMS_BINARY = 0x80; 154 enum CMS_NOATTR = 0x0100; 155 enum CMS_NOSMIMECAP = 0x0200; 156 enum CMS_NOOLDMIMETYPE = 0x0400; 157 enum CMS_CRLFEOL = 0x0800; 158 enum CMS_STREAM = 0x1000; 159 enum CMS_NOCRL = 0x2000; 160 enum CMS_PARTIAL = 0x4000; 161 enum CMS_REUSE_DIGEST = 0x8000; 162 enum CMS_USE_KEYID = 0x010000; 163 enum CMS_DEBUG_DECRYPT = 0x020000; 164 enum CMS_KEY_PARAM = 0x040000; 165 enum CMS_ASCIICRLF = 0x080000; 166 167 const (libressl_d.openssl.asn1.ASN1_OBJECT)* CMS_get0_type(const (.CMS_ContentInfo)* cms); 168 169 libressl_d.openssl.bio.BIO* CMS_dataInit(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* icont); 170 int CMS_dataFinal(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* bio); 171 172 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** CMS_get0_content(.CMS_ContentInfo* cms); 173 int CMS_is_detached(.CMS_ContentInfo* cms); 174 int CMS_set_detached(.CMS_ContentInfo* cms, int detached); 175 176 static assert(libressl_d.openssl.pem.HEADER_PEM_H); 177 .CMS_ContentInfo* PEM_read_bio_CMS(libressl_d.openssl.bio.BIO* bp, .CMS_ContentInfo** x, libressl_d.openssl.pem.pem_password_cb* cb, void* u); 178 .CMS_ContentInfo* PEM_read_CMS(libressl_d.compat.stdio.FILE* fp, .CMS_ContentInfo** x, libressl_d.openssl.pem.pem_password_cb* cb, void* u); 179 int PEM_write_bio_CMS(libressl_d.openssl.bio.BIO* bp, const (.CMS_ContentInfo)* x); 180 int PEM_write_CMS(libressl_d.compat.stdio.FILE* fp, const (.CMS_ContentInfo)* x); 181 182 int CMS_stream(ubyte*** boundary, .CMS_ContentInfo* cms); 183 .CMS_ContentInfo* d2i_CMS_bio(libressl_d.openssl.bio.BIO* bp, .CMS_ContentInfo** cms); 184 int i2d_CMS_bio(libressl_d.openssl.bio.BIO* bp, .CMS_ContentInfo* cms); 185 186 libressl_d.openssl.bio.BIO* BIO_new_CMS(libressl_d.openssl.bio.BIO* out_, .CMS_ContentInfo* cms); 187 int i2d_CMS_bio_stream(libressl_d.openssl.bio.BIO* out_, .CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* in_, int flags); 188 int PEM_write_bio_CMS_stream(libressl_d.openssl.bio.BIO* out_, .CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* in_, int flags); 189 .CMS_ContentInfo* SMIME_read_CMS(libressl_d.openssl.bio.BIO* bio, libressl_d.openssl.bio.BIO** bcont); 190 int SMIME_write_CMS(libressl_d.openssl.bio.BIO* bio, .CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* data, int flags); 191 192 int CMS_final(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* data, libressl_d.openssl.bio.BIO* dcont, uint flags); 193 194 .CMS_ContentInfo* CMS_sign(libressl_d.openssl.ossl_typ.X509* signcert, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, libressl_d.openssl.x509.stack_st_X509* certs, libressl_d.openssl.bio.BIO* data, uint flags); 195 196 .CMS_ContentInfo* CMS_sign_receipt(.CMS_SignerInfo* si, libressl_d.openssl.ossl_typ.X509* signcert, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, libressl_d.openssl.x509.stack_st_X509* certs, uint flags); 197 198 int CMS_data(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* out_, uint flags); 199 .CMS_ContentInfo* CMS_data_create(libressl_d.openssl.bio.BIO* in_, uint flags); 200 201 int CMS_digest_verify(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* dcont, libressl_d.openssl.bio.BIO* out_, uint flags); 202 .CMS_ContentInfo* CMS_digest_create(libressl_d.openssl.bio.BIO* in_, const (libressl_d.openssl.ossl_typ.EVP_MD)* md, uint flags); 203 204 int CMS_EncryptedData_decrypt(.CMS_ContentInfo* cms, const (ubyte)* key, size_t keylen, libressl_d.openssl.bio.BIO* dcont, libressl_d.openssl.bio.BIO* out_, uint flags); 205 206 .CMS_ContentInfo* CMS_EncryptedData_encrypt(libressl_d.openssl.bio.BIO* in_, const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* cipher, const (ubyte)* key, size_t keylen, uint flags); 207 208 int CMS_EncryptedData_set1_key(.CMS_ContentInfo* cms, const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* ciph, const (ubyte)* key, size_t keylen); 209 210 int CMS_verify(.CMS_ContentInfo* cms, libressl_d.openssl.x509.stack_st_X509* certs, libressl_d.openssl.ossl_typ.X509_STORE* store, libressl_d.openssl.bio.BIO* dcont, libressl_d.openssl.bio.BIO* out_, uint flags); 211 212 int CMS_verify_receipt(.CMS_ContentInfo* rcms, .CMS_ContentInfo* ocms, libressl_d.openssl.x509.stack_st_X509* certs, libressl_d.openssl.ossl_typ.X509_STORE* store, uint flags); 213 214 libressl_d.openssl.x509.stack_st_X509* CMS_get0_signers(.CMS_ContentInfo* cms); 215 216 .CMS_ContentInfo* CMS_encrypt(libressl_d.openssl.x509.stack_st_X509* certs, libressl_d.openssl.bio.BIO* in_, const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* cipher, uint flags); 217 218 int CMS_decrypt(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey, libressl_d.openssl.ossl_typ.X509* cert, libressl_d.openssl.bio.BIO* dcont, libressl_d.openssl.bio.BIO* out_, uint flags); 219 220 int CMS_decrypt_set1_pkey(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.EVP_PKEY* pk, libressl_d.openssl.ossl_typ.X509* cert); 221 int CMS_decrypt_set1_key(.CMS_ContentInfo* cms, ubyte* key, size_t keylen, const (ubyte)* id, size_t idlen); 222 int CMS_decrypt_set1_password(.CMS_ContentInfo* cms, ubyte* pass, libressl_d.compat.sys.types.ssize_t passlen); 223 224 .stack_st_CMS_RecipientInfo* CMS_get0_RecipientInfos(.CMS_ContentInfo* cms); 225 int CMS_RecipientInfo_type(.CMS_RecipientInfo* ri); 226 libressl_d.openssl.ossl_typ.EVP_PKEY_CTX* CMS_RecipientInfo_get0_pkey_ctx(.CMS_RecipientInfo* ri); 227 .CMS_ContentInfo* CMS_EnvelopedData_create(const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* cipher); 228 .CMS_RecipientInfo* CMS_add1_recipient_cert(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509* recip, uint flags); 229 int CMS_RecipientInfo_set0_pkey(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.EVP_PKEY* pkey); 230 int CMS_RecipientInfo_ktri_cert_cmp(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.X509* cert); 231 int CMS_RecipientInfo_ktri_get0_algs(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.EVP_PKEY** pk, libressl_d.openssl.ossl_typ.X509** recip, libressl_d.openssl.ossl_typ.X509_ALGOR** palg); 232 int CMS_RecipientInfo_ktri_get0_signer_id(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** keyid, libressl_d.openssl.ossl_typ.X509_NAME** issuer, libressl_d.openssl.ossl_typ.ASN1_INTEGER** sno); 233 234 .CMS_RecipientInfo* CMS_add0_recipient_key(.CMS_ContentInfo* cms, int nid, ubyte* key, size_t keylen, ubyte* id, size_t idlen, libressl_d.openssl.ossl_typ.ASN1_GENERALIZEDTIME* date, libressl_d.openssl.asn1.ASN1_OBJECT* otherTypeId, libressl_d.openssl.asn1.ASN1_TYPE* otherType); 235 236 int CMS_RecipientInfo_kekri_get0_id(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.X509_ALGOR** palg, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** pid, libressl_d.openssl.ossl_typ.ASN1_GENERALIZEDTIME** pdate, libressl_d.openssl.asn1.ASN1_OBJECT** potherid, libressl_d.openssl.asn1.ASN1_TYPE** pothertype); 237 238 int CMS_RecipientInfo_set0_key(.CMS_RecipientInfo* ri, ubyte* key, size_t keylen); 239 240 int CMS_RecipientInfo_kekri_id_cmp(.CMS_RecipientInfo* ri, const (ubyte)* id, size_t idlen); 241 242 int CMS_RecipientInfo_set0_password(.CMS_RecipientInfo* ri, ubyte* pass, libressl_d.compat.sys.types.ssize_t passlen); 243 244 .CMS_RecipientInfo* CMS_add0_recipient_password(.CMS_ContentInfo* cms, int iter, int wrap_nid, int pbe_nid, ubyte* pass, libressl_d.compat.sys.types.ssize_t passlen, const (libressl_d.openssl.ossl_typ.EVP_CIPHER)* kekciph); 245 246 int CMS_RecipientInfo_decrypt(.CMS_ContentInfo* cms, .CMS_RecipientInfo* ri); 247 int CMS_RecipientInfo_encrypt(.CMS_ContentInfo* cms, .CMS_RecipientInfo* ri); 248 249 int CMS_uncompress(.CMS_ContentInfo* cms, libressl_d.openssl.bio.BIO* dcont, libressl_d.openssl.bio.BIO* out_, uint flags); 250 .CMS_ContentInfo* CMS_compress(libressl_d.openssl.bio.BIO* in_, int comp_nid, uint flags); 251 252 int CMS_set1_eContentType(.CMS_ContentInfo* cms, const (libressl_d.openssl.asn1.ASN1_OBJECT)* oid); 253 const (libressl_d.openssl.asn1.ASN1_OBJECT)* CMS_get0_eContentType(.CMS_ContentInfo* cms); 254 255 .CMS_CertificateChoices* CMS_add0_CertificateChoices(.CMS_ContentInfo* cms); 256 int CMS_add0_cert(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509* cert); 257 int CMS_add1_cert(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509* cert); 258 libressl_d.openssl.x509.stack_st_X509* CMS_get1_certs(.CMS_ContentInfo* cms); 259 260 .CMS_RevocationInfoChoice* CMS_add0_RevocationInfoChoice(.CMS_ContentInfo* cms); 261 int CMS_add0_crl(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509_CRL* crl); 262 int CMS_add1_crl(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509_CRL* crl); 263 libressl_d.openssl.x509.stack_st_X509_CRL* CMS_get1_crls(.CMS_ContentInfo* cms); 264 265 int CMS_SignedData_init(.CMS_ContentInfo* cms); 266 .CMS_SignerInfo* CMS_add1_signer(.CMS_ContentInfo* cms, libressl_d.openssl.ossl_typ.X509* signer, libressl_d.openssl.ossl_typ.EVP_PKEY* pk, const (libressl_d.openssl.ossl_typ.EVP_MD)* md, uint flags); 267 libressl_d.openssl.ossl_typ.EVP_PKEY_CTX* CMS_SignerInfo_get0_pkey_ctx(.CMS_SignerInfo* si); 268 libressl_d.openssl.ossl_typ.EVP_MD_CTX* CMS_SignerInfo_get0_md_ctx(.CMS_SignerInfo* si); 269 .stack_st_CMS_SignerInfo* CMS_get0_SignerInfos(.CMS_ContentInfo* cms); 270 271 void CMS_SignerInfo_set1_signer_cert(.CMS_SignerInfo* si, libressl_d.openssl.ossl_typ.X509* signer); 272 int CMS_SignerInfo_get0_signer_id(.CMS_SignerInfo* si, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** keyid, libressl_d.openssl.ossl_typ.X509_NAME** issuer, libressl_d.openssl.ossl_typ.ASN1_INTEGER** sno); 273 int CMS_SignerInfo_cert_cmp(.CMS_SignerInfo* si, libressl_d.openssl.ossl_typ.X509* cert); 274 int CMS_set1_signers_certs(.CMS_ContentInfo* cms, libressl_d.openssl.x509.stack_st_X509* certs, uint flags); 275 void CMS_SignerInfo_get0_algs(.CMS_SignerInfo* si, libressl_d.openssl.ossl_typ.EVP_PKEY** pk, libressl_d.openssl.ossl_typ.X509** signer, libressl_d.openssl.ossl_typ.X509_ALGOR** pdig, libressl_d.openssl.ossl_typ.X509_ALGOR** psig); 276 libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* CMS_SignerInfo_get0_signature(.CMS_SignerInfo* si); 277 int CMS_SignerInfo_sign(.CMS_SignerInfo* si); 278 int CMS_SignerInfo_verify(.CMS_SignerInfo* si); 279 int CMS_SignerInfo_verify_content(.CMS_SignerInfo* si, libressl_d.openssl.bio.BIO* chain); 280 281 int CMS_add_smimecap(.CMS_SignerInfo* si, libressl_d.openssl.asn1.stack_st_X509_ALGOR* algs); 282 int CMS_add_simple_smimecap(libressl_d.openssl.asn1.stack_st_X509_ALGOR** algs, int algnid, int keysize); 283 int CMS_add_standard_smimecap(libressl_d.openssl.asn1.stack_st_X509_ALGOR** smcap); 284 285 int CMS_signed_get_attr_count(const (.CMS_SignerInfo)* si); 286 int CMS_signed_get_attr_by_NID(const (.CMS_SignerInfo)* si, int nid, int lastpos); 287 int CMS_signed_get_attr_by_OBJ(const (.CMS_SignerInfo)* si, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos); 288 libressl_d.openssl.x509.X509_ATTRIBUTE* CMS_signed_get_attr(const (.CMS_SignerInfo)* si, int loc); 289 libressl_d.openssl.x509.X509_ATTRIBUTE* CMS_signed_delete_attr(.CMS_SignerInfo* si, int loc); 290 int CMS_signed_add1_attr(.CMS_SignerInfo* si, libressl_d.openssl.x509.X509_ATTRIBUTE* attr); 291 int CMS_signed_add1_attr_by_OBJ(.CMS_SignerInfo* si, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (void)* bytes, int len); 292 int CMS_signed_add1_attr_by_NID(.CMS_SignerInfo* si, int nid, int type, const (void)* bytes, int len); 293 int CMS_signed_add1_attr_by_txt(.CMS_SignerInfo* si, const (char)* attrname, int type, const (void)* bytes, int len); 294 void* CMS_signed_get0_data_by_OBJ(.CMS_SignerInfo* si, const (libressl_d.openssl.asn1.ASN1_OBJECT)* oid, int lastpos, int type); 295 296 int CMS_unsigned_get_attr_count(const (.CMS_SignerInfo)* si); 297 int CMS_unsigned_get_attr_by_NID(const (.CMS_SignerInfo)* si, int nid, int lastpos); 298 int CMS_unsigned_get_attr_by_OBJ(const (.CMS_SignerInfo)* si, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int lastpos); 299 libressl_d.openssl.x509.X509_ATTRIBUTE* CMS_unsigned_get_attr(const (.CMS_SignerInfo)* si, int loc); 300 libressl_d.openssl.x509.X509_ATTRIBUTE* CMS_unsigned_delete_attr(.CMS_SignerInfo* si, int loc); 301 int CMS_unsigned_add1_attr(.CMS_SignerInfo* si, libressl_d.openssl.x509.X509_ATTRIBUTE* attr); 302 int CMS_unsigned_add1_attr_by_OBJ(.CMS_SignerInfo* si, const (libressl_d.openssl.asn1.ASN1_OBJECT)* obj, int type, const (void)* bytes, int len); 303 int CMS_unsigned_add1_attr_by_NID(.CMS_SignerInfo* si, int nid, int type, const (void)* bytes, int len); 304 int CMS_unsigned_add1_attr_by_txt(.CMS_SignerInfo* si, const (char)* attrname, int type, const (void)* bytes, int len); 305 void* CMS_unsigned_get0_data_by_OBJ(.CMS_SignerInfo* si, libressl_d.openssl.asn1.ASN1_OBJECT* oid, int lastpos, int type); 306 307 static assert(libressl_d.openssl.x509v3.HEADER_X509V3_H); 308 struct stack_st_GENERAL_NAMES; 309 int CMS_get1_ReceiptRequest(.CMS_SignerInfo* si, .CMS_ReceiptRequest** prr); 310 .CMS_ReceiptRequest* CMS_ReceiptRequest_create0(ubyte* id, int idlen, int allorfirst, .stack_st_GENERAL_NAMES* receiptList, .stack_st_GENERAL_NAMES* receiptsTo); 311 int CMS_add1_ReceiptRequest(.CMS_SignerInfo* si, .CMS_ReceiptRequest* rr); 312 void CMS_ReceiptRequest_get0_values(.CMS_ReceiptRequest* rr, libressl_d.openssl.ossl_typ.ASN1_STRING** pcid, int* pallorfirst, .stack_st_GENERAL_NAMES** plist, .stack_st_GENERAL_NAMES** prto); 313 314 int CMS_RecipientInfo_kari_get0_alg(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.X509_ALGOR** palg, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** pukm); 315 .stack_st_CMS_RecipientEncryptedKey* CMS_RecipientInfo_kari_get0_reks(.CMS_RecipientInfo* ri); 316 317 int CMS_RecipientInfo_kari_get0_orig_id(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.X509_ALGOR** pubalg, libressl_d.openssl.ossl_typ.ASN1_BIT_STRING** pubkey, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** keyid, libressl_d.openssl.ossl_typ.X509_NAME** issuer, libressl_d.openssl.ossl_typ.ASN1_INTEGER** sno); 318 319 int CMS_RecipientInfo_kari_orig_id_cmp(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.X509* cert); 320 321 int CMS_RecipientEncryptedKey_get0_id(.CMS_RecipientEncryptedKey* rek, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING** keyid, libressl_d.openssl.ossl_typ.ASN1_GENERALIZEDTIME** tm, .CMS_OtherKeyAttribute** other, libressl_d.openssl.ossl_typ.X509_NAME** issuer, libressl_d.openssl.ossl_typ.ASN1_INTEGER** sno); 322 int CMS_RecipientEncryptedKey_cert_cmp(.CMS_RecipientEncryptedKey* rek, libressl_d.openssl.ossl_typ.X509* cert); 323 int CMS_RecipientInfo_kari_set0_pkey(.CMS_RecipientInfo* ri, libressl_d.openssl.ossl_typ.EVP_PKEY* pk); 324 libressl_d.openssl.ossl_typ.EVP_CIPHER_CTX* CMS_RecipientInfo_kari_get0_ctx(.CMS_RecipientInfo* ri); 325 int CMS_RecipientInfo_kari_decrypt(.CMS_ContentInfo* cms, .CMS_RecipientInfo* ri, .CMS_RecipientEncryptedKey* rek); 326 327 int CMS_SharedInfo_encode(ubyte** pder, libressl_d.openssl.ossl_typ.X509_ALGOR* kekalg, libressl_d.openssl.ossl_typ.ASN1_OCTET_STRING* ukm, int keylen); 328 329 /* Backward compatibility for spelling errors. */ 330 alias CMS_R_UNKNOWN_DIGEST_ALGORITM = .CMS_R_UNKNOWN_DIGEST_ALGORITHM; 331 alias CMS_R_UNSUPPORTED_RECPIENTINFO_TYPE = .CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE; 332 333 int ERR_load_CMS_strings(); 334 335 /* 336 * CMS function codes. 337 */ 338 enum CMS_F_CHECK_CONTENT = 99; 339 enum CMS_F_CMS_ADD0_CERT = 164; 340 enum CMS_F_CMS_ADD0_RECIPIENT_KEY = 100; 341 enum CMS_F_CMS_ADD0_RECIPIENT_PASSWORD = 165; 342 enum CMS_F_CMS_ADD1_RECEIPTREQUEST = 158; 343 enum CMS_F_CMS_ADD1_RECIPIENT_CERT = 101; 344 enum CMS_F_CMS_ADD1_SIGNER = 102; 345 enum CMS_F_CMS_ADD1_SIGNINGTIME = 103; 346 enum CMS_F_CMS_COMPRESS = 104; 347 enum CMS_F_CMS_COMPRESSEDDATA_CREATE = 105; 348 enum CMS_F_CMS_COMPRESSEDDATA_INIT_BIO = 106; 349 enum CMS_F_CMS_COPY_CONTENT = 107; 350 enum CMS_F_CMS_COPY_MESSAGEDIGEST = 108; 351 enum CMS_F_CMS_DATA = 109; 352 enum CMS_F_CMS_DATAFINAL = 110; 353 enum CMS_F_CMS_DATAINIT = 111; 354 enum CMS_F_CMS_DECRYPT = 112; 355 enum CMS_F_CMS_DECRYPT_SET1_KEY = 113; 356 enum CMS_F_CMS_DECRYPT_SET1_PASSWORD = 166; 357 enum CMS_F_CMS_DECRYPT_SET1_PKEY = 114; 358 enum CMS_F_CMS_DIGESTALGORITHM_FIND_CTX = 115; 359 enum CMS_F_CMS_DIGESTALGORITHM_INIT_BIO = 116; 360 enum CMS_F_CMS_DIGESTEDDATA_DO_FINAL = 117; 361 enum CMS_F_CMS_DIGEST_VERIFY = 118; 362 enum CMS_F_CMS_ENCODE_RECEIPT = 161; 363 enum CMS_F_CMS_ENCRYPT = 119; 364 enum CMS_F_CMS_ENCRYPTEDCONTENT_INIT = 179; 365 enum CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO = 120; 366 enum CMS_F_CMS_ENCRYPTEDDATA_DECRYPT = 121; 367 enum CMS_F_CMS_ENCRYPTEDDATA_ENCRYPT = 122; 368 enum CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY = 123; 369 enum CMS_F_CMS_ENVELOPEDDATA_CREATE = 124; 370 enum CMS_F_CMS_ENVELOPEDDATA_INIT_BIO = 125; 371 enum CMS_F_CMS_ENVELOPED_DATA_INIT = 126; 372 enum CMS_F_CMS_ENV_ASN1_CTRL = 171; 373 enum CMS_F_CMS_FINAL = 127; 374 enum CMS_F_CMS_GET0_CERTIFICATE_CHOICES = 128; 375 enum CMS_F_CMS_GET0_CONTENT = 129; 376 enum CMS_F_CMS_GET0_ECONTENT_TYPE = 130; 377 enum CMS_F_CMS_GET0_ENVELOPED = 131; 378 enum CMS_F_CMS_GET0_REVOCATION_CHOICES = 132; 379 enum CMS_F_CMS_GET0_SIGNED = 133; 380 enum CMS_F_CMS_MSGSIGDIGEST_ADD1 = 162; 381 enum CMS_F_CMS_RECEIPTREQUEST_CREATE0 = 159; 382 enum CMS_F_CMS_RECEIPT_VERIFY = 160; 383 enum CMS_F_CMS_RECIPIENTINFO_DECRYPT = 134; 384 enum CMS_F_CMS_RECIPIENTINFO_ENCRYPT = 169; 385 enum CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT = 178; 386 enum CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG = 175; 387 enum CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID = 173; 388 enum CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS = 172; 389 enum CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP = 174; 390 enum CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT = 135; 391 enum CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT = 136; 392 enum CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID = 137; 393 enum CMS_F_CMS_RECIPIENTINFO_KEKRI_ID_CMP = 138; 394 enum CMS_F_CMS_RECIPIENTINFO_KTRI_CERT_CMP = 139; 395 enum CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT = 140; 396 enum CMS_F_CMS_RECIPIENTINFO_KTRI_ENCRYPT = 141; 397 enum CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_ALGS = 142; 398 enum CMS_F_CMS_RECIPIENTINFO_KTRI_GET0_SIGNER_ID = 143; 399 enum CMS_F_CMS_RECIPIENTINFO_PWRI_CRYPT = 167; 400 enum CMS_F_CMS_RECIPIENTINFO_SET0_KEY = 144; 401 enum CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD = 168; 402 enum CMS_F_CMS_RECIPIENTINFO_SET0_PKEY = 145; 403 enum CMS_F_CMS_SD_ASN1_CTRL = 170; 404 enum CMS_F_CMS_SET1_IAS = 176; 405 enum CMS_F_CMS_SET1_KEYID = 177; 406 enum CMS_F_CMS_SET1_SIGNERIDENTIFIER = 146; 407 enum CMS_F_CMS_SET_DETACHED = 147; 408 enum CMS_F_CMS_SIGN = 148; 409 enum CMS_F_CMS_SIGNED_DATA_INIT = 149; 410 enum CMS_F_CMS_SIGNERINFO_CONTENT_SIGN = 150; 411 enum CMS_F_CMS_SIGNERINFO_SIGN = 151; 412 enum CMS_F_CMS_SIGNERINFO_VERIFY = 152; 413 enum CMS_F_CMS_SIGNERINFO_VERIFY_CERT = 153; 414 enum CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT = 154; 415 enum CMS_F_CMS_SIGN_RECEIPT = 163; 416 enum CMS_F_CMS_STREAM = 155; 417 enum CMS_F_CMS_UNCOMPRESS = 156; 418 enum CMS_F_CMS_VERIFY = 157; 419 enum CMS_F_KEK_UNWRAP_KEY = 180; 420 421 /* 422 * CMS reason codes. 423 */ 424 enum CMS_R_ADD_SIGNER_ERROR = 99; 425 enum CMS_R_CERTIFICATE_ALREADY_PRESENT = 175; 426 enum CMS_R_CERTIFICATE_HAS_NO_KEYID = 160; 427 enum CMS_R_CERTIFICATE_VERIFY_ERROR = 100; 428 enum CMS_R_CIPHER_INITIALISATION_ERROR = 101; 429 enum CMS_R_CIPHER_PARAMETER_INITIALISATION_ERROR = 102; 430 enum CMS_R_CMS_DATAFINAL_ERROR = 103; 431 enum CMS_R_CMS_LIB = 104; 432 enum CMS_R_CONTENTIDENTIFIER_MISMATCH = 170; 433 enum CMS_R_CONTENT_NOT_FOUND = 105; 434 enum CMS_R_CONTENT_TYPE_MISMATCH = 171; 435 enum CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA = 106; 436 enum CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA = 107; 437 enum CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA = 108; 438 enum CMS_R_CONTENT_VERIFY_ERROR = 109; 439 enum CMS_R_CTRL_ERROR = 110; 440 enum CMS_R_CTRL_FAILURE = 111; 441 enum CMS_R_DECRYPT_ERROR = 112; 442 enum CMS_R_ERROR_GETTING_PUBLIC_KEY = 113; 443 enum CMS_R_ERROR_READING_MESSAGEDIGEST_ATTRIBUTE = 114; 444 enum CMS_R_ERROR_SETTING_KEY = 115; 445 enum CMS_R_ERROR_SETTING_RECIPIENTINFO = 116; 446 enum CMS_R_INVALID_ENCRYPTED_KEY_LENGTH = 117; 447 enum CMS_R_INVALID_KEY_ENCRYPTION_PARAMETER = 176; 448 enum CMS_R_INVALID_KEY_LENGTH = 118; 449 enum CMS_R_MD_BIO_INIT_ERROR = 119; 450 enum CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH = 120; 451 enum CMS_R_MESSAGEDIGEST_WRONG_LENGTH = 121; 452 enum CMS_R_MSGSIGDIGEST_ERROR = 172; 453 enum CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE = 162; 454 enum CMS_R_MSGSIGDIGEST_WRONG_LENGTH = 163; 455 enum CMS_R_NEED_ONE_SIGNER = 164; 456 enum CMS_R_NOT_A_SIGNED_RECEIPT = 165; 457 enum CMS_R_NOT_ENCRYPTED_DATA = 122; 458 enum CMS_R_NOT_KEK = 123; 459 enum CMS_R_NOT_KEY_AGREEMENT = 181; 460 enum CMS_R_NOT_KEY_TRANSPORT = 124; 461 enum CMS_R_NOT_PWRI = 177; 462 enum CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE = 125; 463 enum CMS_R_NO_CIPHER = 126; 464 enum CMS_R_NO_CONTENT = 127; 465 enum CMS_R_NO_CONTENT_TYPE = 173; 466 enum CMS_R_NO_DEFAULT_DIGEST = 128; 467 enum CMS_R_NO_DIGEST_SET = 129; 468 enum CMS_R_NO_KEY = 130; 469 enum CMS_R_NO_KEY_OR_CERT = 174; 470 enum CMS_R_NO_MATCHING_DIGEST = 131; 471 enum CMS_R_NO_MATCHING_RECIPIENT = 132; 472 enum CMS_R_NO_MATCHING_SIGNATURE = 166; 473 enum CMS_R_NO_MSGSIGDIGEST = 167; 474 enum CMS_R_NO_PASSWORD = 178; 475 enum CMS_R_NO_PRIVATE_KEY = 133; 476 enum CMS_R_NO_PUBLIC_KEY = 134; 477 enum CMS_R_NO_RECEIPT_REQUEST = 168; 478 enum CMS_R_NO_SIGNERS = 135; 479 enum CMS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE = 136; 480 enum CMS_R_RECEIPT_DECODE_ERROR = 169; 481 enum CMS_R_RECIPIENT_ERROR = 137; 482 enum CMS_R_SIGNER_CERTIFICATE_NOT_FOUND = 138; 483 enum CMS_R_SIGNFINAL_ERROR = 139; 484 enum CMS_R_SMIME_TEXT_ERROR = 140; 485 enum CMS_R_STORE_INIT_ERROR = 141; 486 enum CMS_R_TYPE_NOT_COMPRESSED_DATA = 142; 487 enum CMS_R_TYPE_NOT_DATA = 143; 488 enum CMS_R_TYPE_NOT_DIGESTED_DATA = 144; 489 enum CMS_R_TYPE_NOT_ENCRYPTED_DATA = 145; 490 enum CMS_R_TYPE_NOT_ENVELOPED_DATA = 146; 491 enum CMS_R_UNABLE_TO_FINALIZE_CONTEXT = 147; 492 enum CMS_R_UNKNOWN_CIPHER = 148; 493 enum CMS_R_UNKNOWN_DIGEST_ALGORITHM = 149; 494 enum CMS_R_UNKNOWN_ID = 150; 495 enum CMS_R_UNSUPPORTED_COMPRESSION_ALGORITHM = 151; 496 enum CMS_R_UNSUPPORTED_CONTENT_TYPE = 152; 497 enum CMS_R_UNSUPPORTED_KEK_ALGORITHM = 153; 498 enum CMS_R_UNSUPPORTED_KEY_ENCRYPTION_ALGORITHM = 179; 499 enum CMS_R_UNSUPPORTED_RECIPIENTINFO_TYPE = 155; 500 enum CMS_R_UNSUPPORTED_RECIPIENT_TYPE = 154; 501 enum CMS_R_UNSUPPORTED_TYPE = 156; 502 enum CMS_R_UNWRAP_ERROR = 157; 503 enum CMS_R_UNWRAP_FAILURE = 180; 504 enum CMS_R_VERIFICATION_FAILURE = 158; 505 enum CMS_R_WRAP_ERROR = 159; 506 }