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