1# This file is dual licensed under the terms of the Apache License, Version
2# 2.0, and the BSD License. See the LICENSE file in the root of this repository
3# for complete details.
4
5from __future__ import annotations
6
7from cryptography.hazmat.bindings._rust import (
8 ObjectIdentifier as ObjectIdentifier,
9)
10from cryptography.hazmat.primitives import hashes
11
12
13class ExtensionOID:
14 SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9")
15 SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14")
16 KEY_USAGE = ObjectIdentifier("2.5.29.15")
17 SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17")
18 ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18")
19 BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19")
20 NAME_CONSTRAINTS = ObjectIdentifier("2.5.29.30")
21 CRL_DISTRIBUTION_POINTS = ObjectIdentifier("2.5.29.31")
22 CERTIFICATE_POLICIES = ObjectIdentifier("2.5.29.32")
23 POLICY_MAPPINGS = ObjectIdentifier("2.5.29.33")
24 AUTHORITY_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.35")
25 POLICY_CONSTRAINTS = ObjectIdentifier("2.5.29.36")
26 EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37")
27 FRESHEST_CRL = ObjectIdentifier("2.5.29.46")
28 INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54")
29 ISSUING_DISTRIBUTION_POINT = ObjectIdentifier("2.5.29.28")
30 AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1")
31 SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11")
32 OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5")
33 TLS_FEATURE = ObjectIdentifier("1.3.6.1.5.5.7.1.24")
34 CRL_NUMBER = ObjectIdentifier("2.5.29.20")
35 DELTA_CRL_INDICATOR = ObjectIdentifier("2.5.29.27")
36 PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier(
37 "1.3.6.1.4.1.11129.2.4.2"
38 )
39 PRECERT_POISON = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.3")
40 SIGNED_CERTIFICATE_TIMESTAMPS = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.5")
41 MS_CERTIFICATE_TEMPLATE = ObjectIdentifier("1.3.6.1.4.1.311.21.7")
42 ADMISSIONS = ObjectIdentifier("1.3.36.8.3.3")
43
44
45class OCSPExtensionOID:
46 NONCE = ObjectIdentifier("1.3.6.1.5.5.7.48.1.2")
47 ACCEPTABLE_RESPONSES = ObjectIdentifier("1.3.6.1.5.5.7.48.1.4")
48
49
50class CRLEntryExtensionOID:
51 CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29")
52 CRL_REASON = ObjectIdentifier("2.5.29.21")
53 INVALIDITY_DATE = ObjectIdentifier("2.5.29.24")
54
55
56class NameOID:
57 COMMON_NAME = ObjectIdentifier("2.5.4.3")
58 COUNTRY_NAME = ObjectIdentifier("2.5.4.6")
59 LOCALITY_NAME = ObjectIdentifier("2.5.4.7")
60 STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8")
61 STREET_ADDRESS = ObjectIdentifier("2.5.4.9")
62 ORGANIZATION_IDENTIFIER = ObjectIdentifier("2.5.4.97")
63 ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10")
64 ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11")
65 SERIAL_NUMBER = ObjectIdentifier("2.5.4.5")
66 SURNAME = ObjectIdentifier("2.5.4.4")
67 GIVEN_NAME = ObjectIdentifier("2.5.4.42")
68 TITLE = ObjectIdentifier("2.5.4.12")
69 INITIALS = ObjectIdentifier("2.5.4.43")
70 GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44")
71 X500_UNIQUE_IDENTIFIER = ObjectIdentifier("2.5.4.45")
72 DN_QUALIFIER = ObjectIdentifier("2.5.4.46")
73 PSEUDONYM = ObjectIdentifier("2.5.4.65")
74 USER_ID = ObjectIdentifier("0.9.2342.19200300.100.1.1")
75 DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25")
76 EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1")
77 JURISDICTION_COUNTRY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.3")
78 JURISDICTION_LOCALITY_NAME = ObjectIdentifier("1.3.6.1.4.1.311.60.2.1.1")
79 JURISDICTION_STATE_OR_PROVINCE_NAME = ObjectIdentifier(
80 "1.3.6.1.4.1.311.60.2.1.2"
81 )
82 BUSINESS_CATEGORY = ObjectIdentifier("2.5.4.15")
83 POSTAL_ADDRESS = ObjectIdentifier("2.5.4.16")
84 POSTAL_CODE = ObjectIdentifier("2.5.4.17")
85 INN = ObjectIdentifier("1.2.643.3.131.1.1")
86 OGRN = ObjectIdentifier("1.2.643.100.1")
87 SNILS = ObjectIdentifier("1.2.643.100.3")
88 UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2")
89
90
91class SignatureAlgorithmOID:
92 RSA_WITH_MD5 = ObjectIdentifier("1.2.840.113549.1.1.4")
93 RSA_WITH_SHA1 = ObjectIdentifier("1.2.840.113549.1.1.5")
94 # This is an alternate OID for RSA with SHA1 that is occasionally seen
95 _RSA_WITH_SHA1 = ObjectIdentifier("1.3.14.3.2.29")
96 RSA_WITH_SHA224 = ObjectIdentifier("1.2.840.113549.1.1.14")
97 RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11")
98 RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12")
99 RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13")
100 RSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.13")
101 RSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.14")
102 RSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.15")
103 RSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.16")
104 RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10")
105 ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1")
106 ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1")
107 ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2")
108 ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3")
109 ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4")
110 ECDSA_WITH_SHA3_224 = ObjectIdentifier("2.16.840.1.101.3.4.3.9")
111 ECDSA_WITH_SHA3_256 = ObjectIdentifier("2.16.840.1.101.3.4.3.10")
112 ECDSA_WITH_SHA3_384 = ObjectIdentifier("2.16.840.1.101.3.4.3.11")
113 ECDSA_WITH_SHA3_512 = ObjectIdentifier("2.16.840.1.101.3.4.3.12")
114 DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3")
115 DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1")
116 DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2")
117 DSA_WITH_SHA384 = ObjectIdentifier("2.16.840.1.101.3.4.3.3")
118 DSA_WITH_SHA512 = ObjectIdentifier("2.16.840.1.101.3.4.3.4")
119 ED25519 = ObjectIdentifier("1.3.101.112")
120 ED448 = ObjectIdentifier("1.3.101.113")
121 GOSTR3411_94_WITH_3410_2001 = ObjectIdentifier("1.2.643.2.2.3")
122 GOSTR3410_2012_WITH_3411_2012_256 = ObjectIdentifier("1.2.643.7.1.1.3.2")
123 GOSTR3410_2012_WITH_3411_2012_512 = ObjectIdentifier("1.2.643.7.1.1.3.3")
124
125
126_SIG_OIDS_TO_HASH: dict[ObjectIdentifier, hashes.HashAlgorithm | None] = {
127 SignatureAlgorithmOID.RSA_WITH_MD5: hashes.MD5(),
128 SignatureAlgorithmOID.RSA_WITH_SHA1: hashes.SHA1(),
129 SignatureAlgorithmOID._RSA_WITH_SHA1: hashes.SHA1(),
130 SignatureAlgorithmOID.RSA_WITH_SHA224: hashes.SHA224(),
131 SignatureAlgorithmOID.RSA_WITH_SHA256: hashes.SHA256(),
132 SignatureAlgorithmOID.RSA_WITH_SHA384: hashes.SHA384(),
133 SignatureAlgorithmOID.RSA_WITH_SHA512: hashes.SHA512(),
134 SignatureAlgorithmOID.RSA_WITH_SHA3_224: hashes.SHA3_224(),
135 SignatureAlgorithmOID.RSA_WITH_SHA3_256: hashes.SHA3_256(),
136 SignatureAlgorithmOID.RSA_WITH_SHA3_384: hashes.SHA3_384(),
137 SignatureAlgorithmOID.RSA_WITH_SHA3_512: hashes.SHA3_512(),
138 SignatureAlgorithmOID.ECDSA_WITH_SHA1: hashes.SHA1(),
139 SignatureAlgorithmOID.ECDSA_WITH_SHA224: hashes.SHA224(),
140 SignatureAlgorithmOID.ECDSA_WITH_SHA256: hashes.SHA256(),
141 SignatureAlgorithmOID.ECDSA_WITH_SHA384: hashes.SHA384(),
142 SignatureAlgorithmOID.ECDSA_WITH_SHA512: hashes.SHA512(),
143 SignatureAlgorithmOID.ECDSA_WITH_SHA3_224: hashes.SHA3_224(),
144 SignatureAlgorithmOID.ECDSA_WITH_SHA3_256: hashes.SHA3_256(),
145 SignatureAlgorithmOID.ECDSA_WITH_SHA3_384: hashes.SHA3_384(),
146 SignatureAlgorithmOID.ECDSA_WITH_SHA3_512: hashes.SHA3_512(),
147 SignatureAlgorithmOID.DSA_WITH_SHA1: hashes.SHA1(),
148 SignatureAlgorithmOID.DSA_WITH_SHA224: hashes.SHA224(),
149 SignatureAlgorithmOID.DSA_WITH_SHA256: hashes.SHA256(),
150 SignatureAlgorithmOID.ED25519: None,
151 SignatureAlgorithmOID.ED448: None,
152 SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: None,
153 SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: None,
154 SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: None,
155}
156
157
158class PublicKeyAlgorithmOID:
159 DSA = ObjectIdentifier("1.2.840.10040.4.1")
160 EC_PUBLIC_KEY = ObjectIdentifier("1.2.840.10045.2.1")
161 RSAES_PKCS1_v1_5 = ObjectIdentifier("1.2.840.113549.1.1.1")
162 RSASSA_PSS = ObjectIdentifier("1.2.840.113549.1.1.10")
163 X25519 = ObjectIdentifier("1.3.101.110")
164 X448 = ObjectIdentifier("1.3.101.111")
165 ED25519 = ObjectIdentifier("1.3.101.112")
166 ED448 = ObjectIdentifier("1.3.101.113")
167
168
169class ExtendedKeyUsageOID:
170 SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1")
171 CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2")
172 CODE_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.3")
173 EMAIL_PROTECTION = ObjectIdentifier("1.3.6.1.5.5.7.3.4")
174 TIME_STAMPING = ObjectIdentifier("1.3.6.1.5.5.7.3.8")
175 OCSP_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.9")
176 ANY_EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37.0")
177 SMARTCARD_LOGON = ObjectIdentifier("1.3.6.1.4.1.311.20.2.2")
178 KERBEROS_PKINIT_KDC = ObjectIdentifier("1.3.6.1.5.2.3.5")
179 IPSEC_IKE = ObjectIdentifier("1.3.6.1.5.5.7.3.17")
180 CERTIFICATE_TRANSPARENCY = ObjectIdentifier("1.3.6.1.4.1.11129.2.4.4")
181
182
183class AuthorityInformationAccessOID:
184 CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2")
185 OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1")
186
187
188class SubjectInformationAccessOID:
189 CA_REPOSITORY = ObjectIdentifier("1.3.6.1.5.5.7.48.5")
190
191
192class CertificatePoliciesOID:
193 CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1")
194 CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2")
195 ANY_POLICY = ObjectIdentifier("2.5.29.32.0")
196
197
198class AttributeOID:
199 CHALLENGE_PASSWORD = ObjectIdentifier("1.2.840.113549.1.9.7")
200 UNSTRUCTURED_NAME = ObjectIdentifier("1.2.840.113549.1.9.2")
201
202
203_OID_NAMES = {
204 NameOID.COMMON_NAME: "commonName",
205 NameOID.COUNTRY_NAME: "countryName",
206 NameOID.LOCALITY_NAME: "localityName",
207 NameOID.STATE_OR_PROVINCE_NAME: "stateOrProvinceName",
208 NameOID.STREET_ADDRESS: "streetAddress",
209 NameOID.ORGANIZATION_NAME: "organizationName",
210 NameOID.ORGANIZATIONAL_UNIT_NAME: "organizationalUnitName",
211 NameOID.SERIAL_NUMBER: "serialNumber",
212 NameOID.SURNAME: "surname",
213 NameOID.GIVEN_NAME: "givenName",
214 NameOID.TITLE: "title",
215 NameOID.GENERATION_QUALIFIER: "generationQualifier",
216 NameOID.X500_UNIQUE_IDENTIFIER: "x500UniqueIdentifier",
217 NameOID.DN_QUALIFIER: "dnQualifier",
218 NameOID.PSEUDONYM: "pseudonym",
219 NameOID.USER_ID: "userID",
220 NameOID.DOMAIN_COMPONENT: "domainComponent",
221 NameOID.EMAIL_ADDRESS: "emailAddress",
222 NameOID.JURISDICTION_COUNTRY_NAME: "jurisdictionCountryName",
223 NameOID.JURISDICTION_LOCALITY_NAME: "jurisdictionLocalityName",
224 NameOID.JURISDICTION_STATE_OR_PROVINCE_NAME: (
225 "jurisdictionStateOrProvinceName"
226 ),
227 NameOID.BUSINESS_CATEGORY: "businessCategory",
228 NameOID.POSTAL_ADDRESS: "postalAddress",
229 NameOID.POSTAL_CODE: "postalCode",
230 NameOID.INN: "INN",
231 NameOID.OGRN: "OGRN",
232 NameOID.SNILS: "SNILS",
233 NameOID.UNSTRUCTURED_NAME: "unstructuredName",
234 SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption",
235 SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption",
236 SignatureAlgorithmOID.RSA_WITH_SHA224: "sha224WithRSAEncryption",
237 SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption",
238 SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption",
239 SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption",
240 SignatureAlgorithmOID.RSASSA_PSS: "RSASSA-PSS",
241 SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1",
242 SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224",
243 SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256",
244 SignatureAlgorithmOID.ECDSA_WITH_SHA384: "ecdsa-with-SHA384",
245 SignatureAlgorithmOID.ECDSA_WITH_SHA512: "ecdsa-with-SHA512",
246 SignatureAlgorithmOID.DSA_WITH_SHA1: "dsa-with-sha1",
247 SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224",
248 SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256",
249 SignatureAlgorithmOID.ED25519: "ed25519",
250 SignatureAlgorithmOID.ED448: "ed448",
251 SignatureAlgorithmOID.GOSTR3411_94_WITH_3410_2001: (
252 "GOST R 34.11-94 with GOST R 34.10-2001"
253 ),
254 SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_256: (
255 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)"
256 ),
257 SignatureAlgorithmOID.GOSTR3410_2012_WITH_3411_2012_512: (
258 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)"
259 ),
260 PublicKeyAlgorithmOID.DSA: "dsaEncryption",
261 PublicKeyAlgorithmOID.EC_PUBLIC_KEY: "id-ecPublicKey",
262 PublicKeyAlgorithmOID.RSAES_PKCS1_v1_5: "rsaEncryption",
263 PublicKeyAlgorithmOID.RSASSA_PSS: "rsassaPss",
264 PublicKeyAlgorithmOID.X25519: "X25519",
265 PublicKeyAlgorithmOID.X448: "X448",
266 ExtendedKeyUsageOID.SERVER_AUTH: "serverAuth",
267 ExtendedKeyUsageOID.CLIENT_AUTH: "clientAuth",
268 ExtendedKeyUsageOID.CODE_SIGNING: "codeSigning",
269 ExtendedKeyUsageOID.EMAIL_PROTECTION: "emailProtection",
270 ExtendedKeyUsageOID.TIME_STAMPING: "timeStamping",
271 ExtendedKeyUsageOID.OCSP_SIGNING: "OCSPSigning",
272 ExtendedKeyUsageOID.SMARTCARD_LOGON: "msSmartcardLogin",
273 ExtendedKeyUsageOID.KERBEROS_PKINIT_KDC: "pkInitKDC",
274 ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES: "subjectDirectoryAttributes",
275 ExtensionOID.SUBJECT_KEY_IDENTIFIER: "subjectKeyIdentifier",
276 ExtensionOID.KEY_USAGE: "keyUsage",
277 ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName",
278 ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName",
279 ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints",
280 ExtensionOID.PRECERT_SIGNED_CERTIFICATE_TIMESTAMPS: (
281 "signedCertificateTimestampList"
282 ),
283 ExtensionOID.SIGNED_CERTIFICATE_TIMESTAMPS: (
284 "signedCertificateTimestampList"
285 ),
286 ExtensionOID.PRECERT_POISON: "ctPoison",
287 ExtensionOID.MS_CERTIFICATE_TEMPLATE: "msCertificateTemplate",
288 ExtensionOID.ADMISSIONS: "Admissions",
289 CRLEntryExtensionOID.CRL_REASON: "cRLReason",
290 CRLEntryExtensionOID.INVALIDITY_DATE: "invalidityDate",
291 CRLEntryExtensionOID.CERTIFICATE_ISSUER: "certificateIssuer",
292 ExtensionOID.NAME_CONSTRAINTS: "nameConstraints",
293 ExtensionOID.CRL_DISTRIBUTION_POINTS: "cRLDistributionPoints",
294 ExtensionOID.CERTIFICATE_POLICIES: "certificatePolicies",
295 ExtensionOID.POLICY_MAPPINGS: "policyMappings",
296 ExtensionOID.AUTHORITY_KEY_IDENTIFIER: "authorityKeyIdentifier",
297 ExtensionOID.POLICY_CONSTRAINTS: "policyConstraints",
298 ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage",
299 ExtensionOID.FRESHEST_CRL: "freshestCRL",
300 ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy",
301 ExtensionOID.ISSUING_DISTRIBUTION_POINT: "issuingDistributionPoint",
302 ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess",
303 ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess",
304 ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck",
305 ExtensionOID.CRL_NUMBER: "cRLNumber",
306 ExtensionOID.DELTA_CRL_INDICATOR: "deltaCRLIndicator",
307 ExtensionOID.TLS_FEATURE: "TLSFeature",
308 AuthorityInformationAccessOID.OCSP: "OCSP",
309 AuthorityInformationAccessOID.CA_ISSUERS: "caIssuers",
310 SubjectInformationAccessOID.CA_REPOSITORY: "caRepository",
311 CertificatePoliciesOID.CPS_QUALIFIER: "id-qt-cps",
312 CertificatePoliciesOID.CPS_USER_NOTICE: "id-qt-unotice",
313 OCSPExtensionOID.NONCE: "OCSPNonce",
314 AttributeOID.CHALLENGE_PASSWORD: "challengePassword",
315}