1 .\" $NetBSD: CMS_encrypt.3,v 1.14 2015/06/12 17:01:13 christos Exp $
3 .\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.28)
6 .\" ========================================================================
7 .de Sp \" Vertical space (when we can't use .PP)
11 .de Vb \" Begin verbatim text
16 .de Ve \" End verbatim text
20 .\" Set up some character translations and predefined strings. \*(-- will
21 .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
22 .\" double quote, and \*(R" will give a right double quote. \*(C+ will
23 .\" give a nicer C++. Capital omega is used to do unbreakable dashes and
24 .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
25 .\" nothing in troff, for use with C<>.
27 .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
31 . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
32 . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
47 .\" Escape single quotes in literal strings from groff's Unicode transform.
51 .\" If the F register is turned on, we'll generate index entries on stderr for
52 .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
53 .\" entries marked with X<> in POD. Of course, you'll have to process the
54 .\" output yourself in some meaningful fashion.
56 .\" Avoid warning from groff about undefined register 'F'.
60 .if \n(.g .if rF .nr rF 1
61 .if (\n(rF:(\n(.g==0)) \{
64 . tm Index:\\$1\t\\n%\t"\\$2"
74 .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
75 .\" Fear. Run. Save yourself. No user-serviceable parts.
76 . \" fudge factors for nroff and troff
85 . ds #H ((1u-(\\\\n(.fu%2u))*.13m)
91 . \" simple accents for nroff and troff
101 . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
102 . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
103 . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
104 . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
105 . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
106 . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
108 . \" troff and (daisy-wheel) nroff accents
109 .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
110 .ds 8 \h'\*(#H'\(*b\h'-\*(#H'
111 .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
112 .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
113 .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
114 .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
115 .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
116 .ds ae a\h'-(\w'a'u*4/10)'e
117 .ds Ae A\h'-(\w'A'u*4/10)'E
118 . \" corrections for vroff
119 .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
120 .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
121 . \" for low resolution devices (crt and lpr)
122 .if \n(.H>23 .if \n(.V>19 \
135 .\" ========================================================================
137 .IX Title "CMS_encrypt 3"
138 .TH CMS_encrypt 3 "2009-12-26" "1.0.1n" "OpenSSL"
139 .\" For nroff, turn off justification. Always turn off hyphenation; it makes
140 .\" way too many mistakes in technical documents.
145 \& CMS_encrypt \- create a CMS envelopedData structure
150 .IX Header "SYNOPSIS"
152 \& #include <openssl/cms.h>
154 \& CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags);
157 .IX Header "DESCRIPTION"
158 \&\fICMS_encrypt()\fR creates and returns a \s-1CMS\s0 EnvelopedData structure. \fBcerts\fR
159 is a list of recipient certificates. \fBin\fR is the content to be encrypted.
160 \&\fBcipher\fR is the symmetric cipher to use. \fBflags\fR is an optional set of flags.
163 Only certificates carrying \s-1RSA\s0 keys are supported so the recipient certificates
164 supplied to this function must all contain \s-1RSA\s0 public keys, though they do not
165 have to be signed using the \s-1RSA\s0 algorithm.
167 \&\fIEVP_des_ede3_cbc()\fR (triple \s-1DES\s0) is the algorithm of choice for S/MIME use
168 because most clients will support it.
170 The algorithm passed in the \fBcipher\fR parameter must support \s-1ASN1\s0 encoding of
173 Many browsers implement a \*(L"sign and encrypt\*(R" option which is simply an S/MIME
174 envelopedData containing an S/MIME signed message. This can be readily produced
175 by storing the S/MIME signed message in a memory \s-1BIO\s0 and passing it to
176 \&\fICMS_encrypt()\fR.
178 The following flags can be passed in the \fBflags\fR parameter.
180 If the \fB\s-1CMS_TEXT\s0\fR flag is set \s-1MIME\s0 headers for type \fBtext/plain\fR are
181 prepended to the data.
183 Normally the supplied content is translated into \s-1MIME\s0 canonical format (as
184 required by the S/MIME specifications) if \fB\s-1CMS_BINARY\s0\fR is set no translation
185 occurs. This option should be used if the supplied data is in binary format
186 otherwise the translation will corrupt it. If \fB\s-1CMS_BINARY\s0\fR is set then
187 \&\fB\s-1CMS_TEXT\s0\fR is ignored.
189 OpenSSL will by default identify recipient certificates using issuer name
190 and serial number. If \fB\s-1CMS_USE_KEYID\s0\fR is set it will use the subject key
191 identifier value instead. An error occurs if all recipient certificates do not
192 have a subject key identifier extension.
194 If the \fB\s-1CMS_STREAM\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is
195 returned suitable for streaming I/O: no data is read from the \s-1BIO \s0\fBin\fR.
197 If the \fB\s-1CMS_PARTIAL\s0\fR flag is set a partial \fBCMS_ContentInfo\fR structure is
198 returned to which additional recipients and attributes can be added before
201 The data being encrypted is included in the CMS_ContentInfo structure, unless
202 \&\fB\s-1CMS_DETACHED\s0\fR is set in which case it is omitted. This is rarely used in
203 practice and is not supported by \fISMIME_write_CMS()\fR.
206 If the flag \fB\s-1CMS_STREAM\s0\fR is set the returned \fBCMS_ContentInfo\fR structure is
207 \&\fBnot\fR complete and outputting its contents via a function that does not
208 properly finalize the \fBCMS_ContentInfo\fR structure will give unpredictable
211 Several functions including \fISMIME_write_CMS()\fR, \fIi2d_CMS_bio_stream()\fR,
212 \&\fIPEM_write_bio_CMS_stream()\fR finalize the structure. Alternatively finalization
213 can be performed by obtaining the streaming \s-1ASN1 \s0\fB\s-1BIO\s0\fR directly using
214 \&\fIBIO_new_CMS()\fR.
216 The recipients specified in \fBcerts\fR use a \s-1CMS\s0 KeyTransRecipientInfo info
217 structure. KEKRecipientInfo is also supported using the flag \fB\s-1CMS_PARTIAL\s0\fR
218 and \fICMS_add0_recipient_key()\fR.
220 The parameter \fBcerts\fR may be \s-1NULL\s0 if \fB\s-1CMS_PARTIAL\s0\fR is set and recipients
221 added later using \fICMS_add1_recipient_cert()\fR or \fICMS_add0_recipient_key()\fR.
223 .IX Header "RETURN VALUES"
224 \&\fICMS_encrypt()\fR returns either a CMS_ContentInfo structure or \s-1NULL\s0 if an error
225 occurred. The error can be obtained from \fIERR_get_error\fR\|(3).
227 .IX Header "SEE ALSO"
228 \&\fIERR_get_error\fR\|(3), \fICMS_decrypt\fR\|(3)
231 \&\fICMS_decrypt()\fR was added to OpenSSL 0.9.8
232 The \fB\s-1CMS_STREAM\s0\fR flag was first supported in OpenSSL 1.0.0.