1-- SPDX-License-Identifier: BSD-3-Clause
2--
3-- Copyright (C) 2009 IETF Trust and the persons identified as authors
4-- of the code
5--
6-- https://www.rfc-editor.org/rfc/rfc5652#section-3
7
8PKCS7ContentInfo ::= SEQUENCE {
9	contentType	ContentType ({ pkcs7_check_content_type }),
10	content		[0] EXPLICIT SignedData OPTIONAL
11}
12
13ContentType ::= OBJECT IDENTIFIER ({ pkcs7_note_OID })
14
15SignedData ::= SEQUENCE {
16	version			INTEGER ({ pkcs7_note_signeddata_version }),
17	digestAlgorithms	DigestAlgorithmIdentifiers,
18	contentInfo		ContentInfo ({ pkcs7_note_content }),
19	certificates		CHOICE {
20		certSet		[0] IMPLICIT ExtendedCertificatesAndCertificates,
21		certSequence	[2] IMPLICIT Certificates
22	} OPTIONAL ({ pkcs7_note_certificate_list }),
23	crls CHOICE {
24		crlSet		[1] IMPLICIT CertificateRevocationLists,
25		crlSequence	[3] IMPLICIT CRLSequence
26	} OPTIONAL,
27	signerInfos		SignerInfos
28}
29
30ContentInfo ::= SEQUENCE {
31	contentType	ContentType ({ pkcs7_note_OID }),
32	content		[0] EXPLICIT Data OPTIONAL
33}
34
35Data ::= ANY ({ pkcs7_note_data })
36
37DigestAlgorithmIdentifiers ::= CHOICE {
38	daSet			SET OF DigestAlgorithmIdentifier,
39	daSequence		SEQUENCE OF DigestAlgorithmIdentifier
40}
41
42DigestAlgorithmIdentifier ::= SEQUENCE {
43	algorithm   OBJECT IDENTIFIER ({ pkcs7_note_OID }),
44	parameters  ANY OPTIONAL
45}
46
47--
48-- Certificates and certificate lists
49--
50ExtendedCertificatesAndCertificates ::= SET OF ExtendedCertificateOrCertificate
51
52ExtendedCertificateOrCertificate ::= CHOICE {
53  certificate		Certificate,				-- X.509
54  extendedCertificate	[0] IMPLICIT ExtendedCertificate	-- PKCS#6
55}
56
57ExtendedCertificate ::= Certificate -- cheating
58
59Certificates ::= SEQUENCE OF Certificate
60
61CertificateRevocationLists ::= SET OF CertificateList
62
63CertificateList ::= SEQUENCE OF Certificate -- This may be defined incorrectly
64
65CRLSequence ::= SEQUENCE OF CertificateList
66
67Certificate ::= ANY ({ pkcs7_extract_cert }) -- X.509
68
69--
70-- Signer information
71--
72SignerInfos ::= CHOICE {
73	siSet		SET OF SignerInfo,
74	siSequence	SEQUENCE OF SignerInfo
75}
76
77SignerInfo ::= SEQUENCE {
78	version			INTEGER ({ pkcs7_note_signerinfo_version }),
79	sid			SignerIdentifier, -- CMS variant, not PKCS#7
80	digestAlgorithm		DigestAlgorithmIdentifier ({ pkcs7_sig_note_digest_algo }),
81	authenticatedAttributes	CHOICE {
82		aaSet		[0] IMPLICIT SetOfAuthenticatedAttribute
83					({ pkcs7_sig_note_set_of_authattrs }),
84		aaSequence	[2] EXPLICIT SEQUENCE OF AuthenticatedAttribute
85			-- Explicit because easier to compute digest on
86			-- sequence of attributes and then reuse encoded
87			-- sequence in aaSequence.
88	} OPTIONAL,
89	digestEncryptionAlgorithm
90				DigestEncryptionAlgorithmIdentifier ({ pkcs7_sig_note_pkey_algo }),
91	encryptedDigest		EncryptedDigest,
92	unauthenticatedAttributes CHOICE {
93		uaSet		[1] IMPLICIT SET OF UnauthenticatedAttribute,
94		uaSequence	[3] IMPLICIT SEQUENCE OF UnauthenticatedAttribute
95	} OPTIONAL
96} ({ pkcs7_note_signed_info })
97
98SignerIdentifier ::= CHOICE {
99	-- RFC5652 sec 5.3
100	issuerAndSerialNumber IssuerAndSerialNumber,
101        subjectKeyIdentifier [0] IMPLICIT SubjectKeyIdentifier
102}
103
104IssuerAndSerialNumber ::= SEQUENCE {
105	issuer			Name ({ pkcs7_sig_note_issuer }),
106	serialNumber		CertificateSerialNumber ({ pkcs7_sig_note_serial })
107}
108
109CertificateSerialNumber ::= INTEGER
110
111SubjectKeyIdentifier ::= OCTET STRING ({ pkcs7_sig_note_skid })
112
113SetOfAuthenticatedAttribute ::= SET OF AuthenticatedAttribute
114
115AuthenticatedAttribute ::= SEQUENCE {
116	type			OBJECT IDENTIFIER ({ pkcs7_note_OID }),
117	values			SET OF ANY ({ pkcs7_sig_note_authenticated_attr })
118}
119
120UnauthenticatedAttribute ::= SEQUENCE {
121	type			OBJECT IDENTIFIER,
122	values			SET OF ANY
123}
124
125DigestEncryptionAlgorithmIdentifier ::= SEQUENCE {
126	algorithm		OBJECT IDENTIFIER ({ pkcs7_note_OID }),
127	parameters		ANY OPTIONAL
128}
129
130EncryptedDigest ::= OCTET STRING ({ pkcs7_sig_note_signature })
131
132---
133--- X.500 Name
134---
135Name ::= SEQUENCE OF RelativeDistinguishedName
136
137RelativeDistinguishedName ::= SET OF AttributeValueAssertion
138
139AttributeValueAssertion ::= SEQUENCE {
140	attributeType		OBJECT IDENTIFIER ({ pkcs7_note_OID }),
141	attributeValue		ANY
142}
143