]> git.ipfire.org Git - thirdparty/openssl.git/blame - doc/crypto/PKCS7_sign.pod
Fix L<> content in manpages
[thirdparty/openssl.git] / doc / crypto / PKCS7_sign.pod
CommitLineData
d30e4c5b
DSH
1=pod
2
3=head1 NAME
4
5PKCS7_sign - create a PKCS#7 signedData structure
6
7=head1 SYNOPSIS
8
c264592d
UM
9 #include <openssl/pkcs7.h>
10
11 PKCS7 *PKCS7_sign(X509 *signcert, EVP_PKEY *pkey, STACK_OF(X509) *certs, BIO *data, int flags);
d30e4c5b
DSH
12
13=head1 DESCRIPTION
14
4cfb986f 15PKCS7_sign() creates and returns a PKCS#7 signedData structure. B<signcert> is
186bb907 16the certificate to sign with, B<pkey> is the corresponding private key.
4cfb986f
DSH
17B<certs> is an optional additional set of certificates to include in the PKCS#7
18structure (for example any intermediate CAs in the chain).
d30e4c5b
DSH
19
20The data to be signed is read from BIO B<data>.
21
22B<flags> is an optional set of flags.
23
24=head1 NOTES
25
4cfb986f
DSH
26Any of the following flags (ored together) can be passed in the B<flags>
27parameter.
d30e4c5b
DSH
28
29Many S/MIME clients expect the signed content to include valid MIME headers. If
30the B<PKCS7_TEXT> flag is set MIME headers for type B<text/plain> are prepended
31to the data.
32
33If B<PKCS7_NOCERTS> is set the signer's certificate will not be included in the
4cfb986f
DSH
34PKCS7 structure, the signer's certificate must still be supplied in the
35B<signcert> parameter though. This can reduce the size of the signature if the
36signers certificate can be obtained by other means: for example a previously
37signed message.
38
39The data being signed is included in the PKCS7 structure, unless
40B<PKCS7_DETACHED> is set in which case it is omitted. This is used for PKCS7
41detached signatures which are used in S/MIME plaintext signed messages for
42example.
43
44Normally the supplied content is translated into MIME canonical format (as
45required by the S/MIME specifications) if B<PKCS7_BINARY> is set no translation
46occurs. This option should be used if the supplied data is in binary format
47otherwise the translation will corrupt it.
48
49The signedData structure includes several PKCS#7 autenticatedAttributes
50including the signing time, the PKCS#7 content type and the supported list of
51ciphers in an SMIMECapabilities attribute. If B<PKCS7_NOATTR> is set then no
52authenticatedAttributes will be used. If B<PKCS7_NOSMIMECAP> is set then just
53the SMIMECapabilities are omitted.
d30e4c5b 54
4cfb986f
DSH
55If present the SMIMECapabilities attribute indicates support for the following
56algorithms: triple DES, 128 bit RC2, 64 bit RC2, DES and 40 bit RC2. If any of
57these algorithms is disabled then it will not be included.
d30e4c5b 58
4cfb986f
DSH
59If the flags B<PKCS7_STREAM> is set then the returned B<PKCS7> structure is
60just initialized ready to perform the signing operation. The signing is however
61B<not> performed and the data to be signed is not read from the B<data>
62parameter. Signing is deferred until after the data has been written. In this
63way data can be signed in a single pass.
d30e4c5b 64
4cfb986f
DSH
65If the B<PKCS7_PARTIAL> flag is set a partial B<PKCS7> structure is output to
66which additional signers and capabilities can be added before finalization.
4e1b50e2 67
4cadedef
DSH
68
69=head1 NOTES
70
4cfb986f
DSH
71If the flag B<PKCS7_STREAM> is set the returned B<PKCS7> structure is B<not>
72complete and outputting its contents via a function that does not properly
73finalize the B<PKCS7> structure will give unpredictable results.
4cadedef 74
9034c56c 75Several functions including SMIME_write_PKCS7(), i2d_PKCS7_bio_stream(),
4cfb986f
DSH
76PEM_write_bio_PKCS7_stream() finalize the structure. Alternatively finalization
77can be performed by obtaining the streaming ASN1 B<BIO> directly using
78BIO_new_PKCS7().
4cadedef 79
4cfb986f
DSH
80If a signer is specified it will use the default digest for the signing
81algorithm. This is B<SHA1> for both RSA and DSA keys.
4e1b50e2 82
fb552ac6 83In OpenSSL 1.0.0 the B<certs>, B<signcert> and B<pkey> parameters can all be
4cfb986f
DSH
84B<NULL> if the B<PKCS7_PARTIAL> flag is set. One or more signers can be added
85using the function B<PKCS7_sign_add_signer()>. B<PKCS7_final()> must also be
86called to finalize the structure if streaming is not enabled. Alternative
87signing digests can also be specified using this method.
4e1b50e2 88
fb552ac6 89In OpenSSL 1.0.0 if B<signcert> and B<pkey> are NULL then a certificates only
4cfb986f 90PKCS#7 structure is output.
4e1b50e2 91
fb552ac6 92In versions of OpenSSL before 1.0.0 the B<signcert> and B<pkey> parameters must
4cfb986f 93B<NOT> be NULL.
4e1b50e2 94
4cfb986f
DSH
95=head1 BUGS
96
97Some advanced attributes such as counter signatures are not supported.
4e1b50e2 98
d30e4c5b
DSH
99=head1 RETURN VALUES
100
4cfb986f
DSH
101PKCS7_sign() returns either a valid PKCS7 structure or NULL if an error
102occurred. The error can be obtained from ERR_get_error(3).
d30e4c5b
DSH
103
104=head1 SEE ALSO
105
9b86974e 106L<ERR_get_error(3)>, L<PKCS7_verify(3)>
d30e4c5b
DSH
107
108=head1 HISTORY
109
4e1b50e2 110PKCS7_sign() was added to OpenSSL 0.9.5
d30e4c5b 111
fb552ac6 112The B<PKCS7_PARTIAL> flag was added in OpenSSL 1.0.0
4cfb986f 113
fb552ac6 114The B<PKCS7_STREAM> flag was added in OpenSSL 1.0.0
4cadedef 115
d30e4c5b 116=cut