hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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
}