| PKCS7ContentInfo ::= SEQUENCE { | 
 | 	contentType	ContentType ({ pkcs7_check_content_type }), | 
 | 	content		[0] EXPLICIT SignedData OPTIONAL | 
 | } | 
 |  | 
 | ContentType ::= OBJECT IDENTIFIER ({ pkcs7_note_OID }) | 
 |  | 
 | SignedData ::= SEQUENCE { | 
 | 	version			INTEGER ({ pkcs7_note_signeddata_version }), | 
 | 	digestAlgorithms	DigestAlgorithmIdentifiers, | 
 | 	contentInfo		ContentInfo ({ pkcs7_note_content }), | 
 | 	certificates		CHOICE { | 
 | 		certSet		[0] IMPLICIT ExtendedCertificatesAndCertificates, | 
 | 		certSequence	[2] IMPLICIT Certificates | 
 | 	} OPTIONAL ({ pkcs7_note_certificate_list }), | 
 | 	crls CHOICE { | 
 | 		crlSet		[1] IMPLICIT CertificateRevocationLists, | 
 | 		crlSequence	[3] IMPLICIT CRLSequence | 
 | 	} OPTIONAL, | 
 | 	signerInfos		SignerInfos | 
 | } | 
 |  | 
 | ContentInfo ::= SEQUENCE { | 
 | 	contentType	ContentType ({ pkcs7_note_OID }), | 
 | 	content		[0] EXPLICIT Data OPTIONAL | 
 | } | 
 |  | 
 | Data ::= ANY ({ pkcs7_note_data }) | 
 |  | 
 | DigestAlgorithmIdentifiers ::= CHOICE { | 
 | 	daSet			SET OF DigestAlgorithmIdentifier, | 
 | 	daSequence		SEQUENCE OF DigestAlgorithmIdentifier | 
 | } | 
 |  | 
 | DigestAlgorithmIdentifier ::= SEQUENCE { | 
 | 	algorithm   OBJECT IDENTIFIER ({ pkcs7_note_OID }), | 
 | 	parameters  ANY OPTIONAL | 
 | } | 
 |  | 
 | -- | 
 | -- Certificates and certificate lists | 
 | -- | 
 | ExtendedCertificatesAndCertificates ::= SET OF ExtendedCertificateOrCertificate | 
 |  | 
 | ExtendedCertificateOrCertificate ::= CHOICE { | 
 |   certificate		Certificate,				-- X.509 | 
 |   extendedCertificate	[0] IMPLICIT ExtendedCertificate	-- PKCS#6 | 
 | } | 
 |  | 
 | ExtendedCertificate ::= Certificate -- cheating | 
 |  | 
 | Certificates ::= SEQUENCE OF Certificate | 
 |  | 
 | CertificateRevocationLists ::= SET OF CertificateList | 
 |  | 
 | CertificateList ::= SEQUENCE OF Certificate -- This may be defined incorrectly | 
 |  | 
 | CRLSequence ::= SEQUENCE OF CertificateList | 
 |  | 
 | Certificate ::= ANY ({ pkcs7_extract_cert }) -- X.509 | 
 |  | 
 | -- | 
 | -- Signer information | 
 | -- | 
 | SignerInfos ::= CHOICE { | 
 | 	siSet		SET OF SignerInfo, | 
 | 	siSequence	SEQUENCE OF SignerInfo | 
 | } | 
 |  | 
 | SignerInfo ::= SEQUENCE { | 
 | 	version			INTEGER ({ pkcs7_note_signerinfo_version }), | 
 | 	sid			SignerIdentifier, -- CMS variant, not PKCS#7 | 
 | 	digestAlgorithm		DigestAlgorithmIdentifier ({ pkcs7_sig_note_digest_algo }), | 
 | 	authenticatedAttributes	CHOICE { | 
 | 		aaSet		[0] IMPLICIT SetOfAuthenticatedAttribute | 
 | 					({ pkcs7_sig_note_set_of_authattrs }), | 
 | 		aaSequence	[2] EXPLICIT SEQUENCE OF AuthenticatedAttribute | 
 | 			-- Explicit because easier to compute digest on | 
 | 			-- sequence of attributes and then reuse encoded | 
 | 			-- sequence in aaSequence. | 
 | 	} OPTIONAL, | 
 | 	digestEncryptionAlgorithm | 
 | 				DigestEncryptionAlgorithmIdentifier ({ pkcs7_sig_note_pkey_algo }), | 
 | 	encryptedDigest		EncryptedDigest, | 
 | 	unauthenticatedAttributes CHOICE { | 
 | 		uaSet		[1] IMPLICIT SET OF UnauthenticatedAttribute, | 
 | 		uaSequence	[3] IMPLICIT SEQUENCE OF UnauthenticatedAttribute | 
 | 	} OPTIONAL | 
 | } ({ pkcs7_note_signed_info }) | 
 |  | 
 | SignerIdentifier ::= CHOICE { | 
 | 	-- RFC5652 sec 5.3 | 
 | 	issuerAndSerialNumber IssuerAndSerialNumber, | 
 |         subjectKeyIdentifier [0] IMPLICIT SubjectKeyIdentifier | 
 | } | 
 |  | 
 | IssuerAndSerialNumber ::= SEQUENCE { | 
 | 	issuer			Name ({ pkcs7_sig_note_issuer }), | 
 | 	serialNumber		CertificateSerialNumber ({ pkcs7_sig_note_serial }) | 
 | } | 
 |  | 
 | CertificateSerialNumber ::= INTEGER | 
 |  | 
 | SubjectKeyIdentifier ::= OCTET STRING ({ pkcs7_sig_note_skid }) | 
 |  | 
 | SetOfAuthenticatedAttribute ::= SET OF AuthenticatedAttribute | 
 |  | 
 | AuthenticatedAttribute ::= SEQUENCE { | 
 | 	type			OBJECT IDENTIFIER ({ pkcs7_note_OID }), | 
 | 	values			SET OF ANY ({ pkcs7_sig_note_authenticated_attr }) | 
 | } | 
 |  | 
 | UnauthenticatedAttribute ::= SEQUENCE { | 
 | 	type			OBJECT IDENTIFIER, | 
 | 	values			SET OF ANY | 
 | } | 
 |  | 
 | DigestEncryptionAlgorithmIdentifier ::= SEQUENCE { | 
 | 	algorithm		OBJECT IDENTIFIER ({ pkcs7_note_OID }), | 
 | 	parameters		ANY OPTIONAL | 
 | } | 
 |  | 
 | EncryptedDigest ::= OCTET STRING ({ pkcs7_sig_note_signature }) | 
 |  | 
 | --- | 
 | --- X.500 Name | 
 | --- | 
 | Name ::= SEQUENCE OF RelativeDistinguishedName | 
 |  | 
 | RelativeDistinguishedName ::= SET OF AttributeValueAssertion | 
 |  | 
 | AttributeValueAssertion ::= SEQUENCE { | 
 | 	attributeType		OBJECT IDENTIFIER ({ pkcs7_note_OID }), | 
 | 	attributeValue		ANY | 
 | } |