VirtualBox

source: vbox/trunk/src/libs/openssl-3.3.2/doc/man3/CMS_verify.pod

Last change on this file was 108206, checked in by vboxsync, 3 months ago

openssl-3.3.2: Exported all files to OSE and removed .scm-settings ​bugref:10757

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.1 KB
Line 
1=pod
2
3=head1 NAME
4
5CMS_verify, CMS_SignedData_verify,
6CMS_get0_signers - verify a CMS SignedData structure
7
8=head1 SYNOPSIS
9
10 #include <openssl/cms.h>
11
12 int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs, X509_STORE *store,
13 BIO *detached_data, BIO *out, unsigned int flags);
14 BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data,
15 STACK_OF(X509) *scerts, X509_STORE *store,
16 STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls,
17 unsigned int flags,
18 OSSL_LIB_CTX *libctx, const char *propq);
19
20 STACK_OF(X509) *CMS_get0_signers(CMS_ContentInfo *cms);
21
22=head1 DESCRIPTION
23
24CMS_verify() is very similar to L<PKCS7_verify(3)>. It verifies a
25B<CMS SignedData> structure contained in a structure of type B<CMS_ContentInfo>.
26I<cms> points to the B<CMS_ContentInfo> structure to verify.
27The optional I<certs> parameter refers to a set of certificates
28in which to search for signing certificates.
29I<cms> may contain extra untrusted CA certificates that may be used for
30chain building as well as CRLs that may be used for certificate validation.
31I<store> may be NULL or point to
32the trusted certificate store to use for chain verification.
33I<detached_data> refers to the signed data if the content is detached from I<cms>.
34Otherwise I<detached_data> should be NULL and the signed data must be in I<cms>.
35The content is written to the BIO I<out> unless it is NULL.
36I<flags> is an optional set of flags, which can be used to modify the operation.
37
38CMS_SignedData_verify() is like CMS_verify() except that
39it operates on B<CMS SignedData> input in the I<sd> argument,
40it has some additional parameters described next,
41and on success it returns the verified content as a memory BIO.
42The optional I<extra> parameter may be used to provide untrusted CA
43certificates that may be helpful for chain building in certificate validation.
44This list of certificates must not contain duplicates.
45The optional I<crls> parameter may be used to provide extra CRLs.
46Also the list of CRLs must not contain duplicates.
47The optional parameters library context I<libctx> and property query I<propq>
48are used when retrieving algorithms from providers.
49
50CMS_get0_signers() retrieves the signing certificate(s) from I<cms>; it may only
51be called after a successful CMS_verify() or CMS_SignedData_verify() operation.
52
53=head1 VERIFY PROCESS
54
55Normally the verify process proceeds as follows.
56
57Initially some sanity checks are performed on I<cms>. The type of I<cms> must
58be SignedData. There must be at least one signature on the data and if
59the content is detached I<detached_data> cannot be NULL.
60
61An attempt is made to locate all the signing certificate(s), first looking in
62the I<certs> parameter (if it is not NULL) and then looking in any
63certificates contained in the I<cms> structure unless B<CMS_NOINTERN> is set.
64If any signing certificate cannot be located the operation fails.
65
66Each signing certificate is chain verified using the I<smimesign> purpose and
67using the trusted certificate store I<store> if supplied.
68Any internal certificates in the message, which may have been added using
69L<CMS_add1_cert(3)>, are used as untrusted CAs.
70If CRL checking is enabled in I<store> and B<CMS_NOCRL> is not set,
71any internal CRLs, which may have been added using L<CMS_add1_crl(3)>,
72are used in addition to attempting to look them up in I<store>.
73If I<store> is not NULL and any chain verify fails an error code is returned.
74
75Finally the signed content is read (and written to I<out> unless it is NULL)
76and the signature is checked.
77
78If all signatures verify correctly then the function is successful.
79
80Any of the following flags (ored together) can be passed in the I<flags>
81parameter to change the default verify behaviour.
82
83If B<CMS_NOINTERN> is set the certificates in the message itself are not
84searched when locating the signing certificate(s).
85This means that all the signing certificates must be in the I<certs> parameter.
86
87If B<CMS_NOCRL> is set and CRL checking is enabled in I<store> then any
88CRLs in the message itself and provided via the I<crls> parameter are ignored.
89
90If the B<CMS_TEXT> flag is set MIME headers for type C<text/plain> are deleted
91from the content. If the content is not of type C<text/plain> then an error is
92returned.
93
94If B<CMS_NO_SIGNER_CERT_VERIFY> is set the signing certificates are not
95chain verified, unless B<CMS_CADES> flag is also set.
96
97If B<CMS_NO_ATTR_VERIFY> is set the signed attributes signature is not
98verified, unless CMS_CADES flag is also set.
99
100If B<CMS_CADES> is set, each signer certificate is checked against the
101ESS signingCertificate or ESS signingCertificateV2 extension
102that is required in the signed attributes of the signature.
103
104If B<CMS_NO_CONTENT_VERIFY> is set then the content digest is not checked.
105
106=head1 NOTES
107
108One application of B<CMS_NOINTERN> is to only accept messages signed by
109a small number of certificates. The acceptable certificates would be passed
110in the I<certs> parameter. In this case if the signer certificate is not one
111of the certificates supplied in I<certs> then the verify will fail because the
112signer cannot be found.
113
114In some cases the standard techniques for looking up and validating
115certificates are not appropriate: for example an application may wish to
116lookup certificates in a database or perform customised verification. This
117can be achieved by setting and verifying the signer certificates manually
118using the signed data utility functions.
119
120Care should be taken when modifying the default verify behaviour, for example
121setting B<CMS_NO_CONTENT_VERIFY> will totally disable all content verification
122and any modified content will be considered valid. This combination is however
123useful if one merely wishes to write the content to I<out> and its validity
124is not considered important.
125
126Chain verification should arguably be performed using the signing time rather
127than the current time. However, since the signing time is supplied by the
128signer it cannot be trusted without additional evidence (such as a trusted
129timestamp).
130
131=head1 RETURN VALUES
132
133CMS_verify() returns 1 for a successful verification and 0 if an error occurred.
134
135CMS_SignedData_verify() returns a memory BIO containing the verified content,
136or NULL on error.
137
138CMS_get0_signers() returns all signers or NULL if an error occurred.
139
140The error can be obtained from L<ERR_get_error(3)>.
141
142=head1 BUGS
143
144The trusted certificate store is not searched for the signing certificate.
145This is primarily due to the inadequacies of the current B<X509_STORE>
146functionality.
147
148The lack of single pass processing means that the signed content must all
149be held in memory if it is not detached.
150
151=head1 SEE ALSO
152
153L<PKCS7_verify(3)>, L<CMS_add1_cert(3)>, L<CMS_add1_crl(3)>,
154L<OSSL_ESS_check_signing_certs(3)>,
155L<ERR_get_error(3)>, L<CMS_sign(3)>
156
157=head1 HISTORY
158
159CMS_SignedData_verify() was added in OpenSSL 3.2.
160
161=head1 COPYRIGHT
162
163Copyright 2008-2023 The OpenSSL Project Authors. All Rights Reserved.
164
165Licensed under the Apache License 2.0 (the "License"). You may not use
166this file except in compliance with the License. You can obtain a copy
167in the file LICENSE in the source distribution or at
168L<https://www.openssl.org/source/license.html>.
169
170=cut
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette