summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/man/CMS_sign.3
blob: af75a20d6bb41d6bd7e65a394e31c9ac2df94aa8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
.Dd $Mdocdate: November 11 2015 $
.Dt CMS_SIGN 3
.Os
.Sh NAME
.Nm CMS_sign
.Nd create a CMS SignedData structure
.Sh SYNOPSIS
.In openssl/cms.h
.Ft CMS_ContentInfo *
.Fo CMS_sign
.Fa "X509 *signcert"
.Fa "EVP_PKEY *pkey"
.Fa "STACK_OF(X509) *certs"
.Fa "BIO *data"
.Fa "unsigned int flags"
.Fc
.Sh DESCRIPTION
.Fn CMS_sign
creates and returns a CMS SignedData structure.
.Fa signcert
is the certificate to sign with,
.Fa pkey
is the corresponding private key.
.Fa certs
is an optional additional set of certificates to include in the CMS
structure (for example any intermediate CAs in the chain).
Any or all of these parameters can be
.Dv NULL ,
see
.Sx NOTES
below.
.Pp
The data to be signed is read from
.Fa data .
.Pp
.Fa flags
is an optional set of flags.
.Sh NOTES
Any of the following flags (OR'ed together) can be passed in the
.Fa flags
parameter.
.Pp
Many S/MIME clients expect the signed content to include valid MIME
headers.
If the
.Dv CMS_TEXT
flag is set, MIME headers for type
.Sy text/plain
are prepended to the data.
.Pp
If
.Dv CMS_NOCERTS
is set, the signer's certificate will not be included in the
.Vt CMS_ContentInfo
structure, the signer's certificate must still be supplied in the
.Fa signcert
parameter though.
This can reduce the size of the signature if the signers certificate can
be obtained by other means: for example a previously signed message.
.Pp
The data being signed is included in the
.Vt CMS_ContentInfo
structure, unless
.Dv CMS_DETACHED
is set, in which case it is omitted.
This is used for
.Vt CMS_ContentInfo
detached signatures which are used in S/MIME plaintext signed
messages for example.
.Pp
Normally the supplied content is translated into MIME canonical format
(as required by the S/MIME specifications); if
.Dv CMS_BINARY
is set, no translation occurs.
This option should be used if the supplied data is in binary format;
otherwise the translation will corrupt it.
.Pp
The SignedData structure includes several CMS signedAttributes including
the signing time, the CMS content type and the supported list of ciphers
in an SMIMECapabilities attribute.
If
.Dv CMS_NOATTR
is set, then no signedAttributes will be used.
If
.Dv CMS_NOSMIMECAP
is set, then just the SMIMECapabilities are omitted.
.Pp
If present, the SMIMECapabilities attribute indicates support for the
following algorithms in preference order: 256 bit AES, Gost R3411-94,
Gost 28147-89, 192 bit AES, 128 bit AES, triple DES, 128 bit RC2, 64 bit
RC2, DES and 40 bit RC2.
If any of these algorithms is not available, then it will not be
included: for example the GOST algorithms will not be included if
the GOST ENGINE is not loaded.
.Pp
OpenSSL will by default identify signing certificates using issuer name
and serial number.
If
.Dv CMS_USE_KEYID
is set, it will use the subject key identifier value instead.
An error occurs if the signing certificate does not have a subject key
identifier extension.
.Pp
If the flag
.Dv CMS_STREAM
is set, then the returned
.Vt CMS_ContentInfo
structure is just initialized ready to perform the signing operation.
The signing is however
.Em not
performed and the data to be signed is not read from the
.Fa data
parameter.
Signing is deferred until after the data has been written.
In this way, data can be signed in a single pass.
.Pp
If the
.Dv CMS_PARTIAL
flag is set, a partial
.Vt CMS_ContentInfo
structure is output to which additional signers and capabilities can be
added before finalization.
.Pp
If the flag
.Dv CMS_STREAM
is set, the returned
.Vt CMS_ContentInfo
structure is
.Em not
complete and outputting its contents via a function that does not
properly finalize the
.Vt CMS_ContentInfo
structure will give unpredictable results.
.Pp
Several functions including
.Xr SMIME_write_CMS 3 ,
.Xr i2d_CMS_bio_stream 3 ,
.Xr PEM_write_bio_CMS_stream 3
finalize the structure.
Alternatively finalization can be performed by obtaining the streaming
ASN1
.Vt BIO
directly using
.Xr BIO_new_CMS 3 .
.Pp
If a signer is specified, it will use the default digest for the signing
algorithm.
This is SHA1 for both RSA and DSA keys.
.Pp
If
.Fa signcert
and
.Fa pkey
are
.Dv NULL ,
then a certificates only CMS structure is output.
.Pp
The function
.Fn CMS_sign
is a basic CMS signing function whose output will be suitable for many
purposes.
For finer control of the output format the
.Fa certs ,
.Fa signcert
and
.Fa pkey
parameters can all be
.Dv NULL
and the
.Dv CMS_PARTIAL
flag set.
Then one or more signers can be added using the function
.Xr CMS_sign_add1_signer 3 ,
non default digests can be used and custom attributes added.
.Xr CMS_final 3
must then be called to finalize the structure if streaming is not
enabled.
.Sh RETURN VALUES
.Fn CMS_sign
returns either a valid
.Vt CMS_ContentInfo
structure or
.Dv NULL
if an error occurred.
The error can be obtained from
.Xr ERR_get_error 3 .
.Sh SEE ALSO
.Xr CMS_verify 3 ,
.Xr ERR_get_error 3
.Sh HISTORY
.Fn CMS_sign
was added to OpenSSL 0.9.8.
.Pp
The
.Dv CMS_STREAM
flag is only supported for detached data in OpenSSL 0.9.8.
It is supported for embedded data in OpenSSL 1.0.0 and later.
.Sh BUGS
Some attributes such as counter signatures are not supported.