blob: a607f44269a1a81dbfa07bbc7ceac17eeb3edd9d [file] [log] [blame]
Paul Kehrer64431d02015-08-09 13:55:59 -05001# 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 absolute_import, division, print_function
6
7from cryptography import utils
8from cryptography.hazmat.primitives import hashes
9
10
11class ObjectIdentifier(object):
12 def __init__(self, dotted_string):
13 self._dotted_string = dotted_string
14
15 def __eq__(self, other):
16 if not isinstance(other, ObjectIdentifier):
17 return NotImplemented
18
Alex Gaynor7f57e9b2015-08-09 17:05:46 -040019 return self.dotted_string == other.dotted_string
Paul Kehrer64431d02015-08-09 13:55:59 -050020
21 def __ne__(self, other):
22 return not self == other
23
24 def __repr__(self):
25 return "<ObjectIdentifier(oid={0}, name={1})>".format(
Alex Gaynor7f57e9b2015-08-09 17:05:46 -040026 self.dotted_string,
27 _OID_NAMES.get(self.dotted_string, "Unknown OID")
Paul Kehrer64431d02015-08-09 13:55:59 -050028 )
29
30 def __hash__(self):
31 return hash(self.dotted_string)
32
33 dotted_string = utils.read_only_property("_dotted_string")
34
35
Paul Kehrer64431d02015-08-09 13:55:59 -050036OID_SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9")
37OID_SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14")
38OID_KEY_USAGE = ObjectIdentifier("2.5.29.15")
39OID_SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17")
40OID_ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18")
41OID_BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19")
42OID_CRL_REASON = ObjectIdentifier("2.5.29.21")
43OID_INVALIDITY_DATE = ObjectIdentifier("2.5.29.24")
44OID_CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29")
45OID_NAME_CONSTRAINTS = ObjectIdentifier("2.5.29.30")
46OID_CRL_DISTRIBUTION_POINTS = ObjectIdentifier("2.5.29.31")
47OID_CERTIFICATE_POLICIES = ObjectIdentifier("2.5.29.32")
48OID_POLICY_MAPPINGS = ObjectIdentifier("2.5.29.33")
49OID_AUTHORITY_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.35")
50OID_POLICY_CONSTRAINTS = ObjectIdentifier("2.5.29.36")
51OID_EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37")
52OID_FRESHEST_CRL = ObjectIdentifier("2.5.29.46")
53OID_INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54")
54OID_AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1")
55OID_SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11")
56OID_OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5")
57
58OID_COMMON_NAME = ObjectIdentifier("2.5.4.3")
59OID_COUNTRY_NAME = ObjectIdentifier("2.5.4.6")
60OID_LOCALITY_NAME = ObjectIdentifier("2.5.4.7")
61OID_STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8")
62OID_ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10")
63OID_ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11")
64OID_SERIAL_NUMBER = ObjectIdentifier("2.5.4.5")
65OID_SURNAME = ObjectIdentifier("2.5.4.4")
66OID_GIVEN_NAME = ObjectIdentifier("2.5.4.42")
67OID_TITLE = ObjectIdentifier("2.5.4.12")
68OID_GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44")
69OID_DN_QUALIFIER = ObjectIdentifier("2.5.4.46")
70OID_PSEUDONYM = ObjectIdentifier("2.5.4.65")
71OID_DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25")
72OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1")
73
74OID_RSA_WITH_MD5 = ObjectIdentifier("1.2.840.113549.1.1.4")
75OID_RSA_WITH_SHA1 = ObjectIdentifier("1.2.840.113549.1.1.5")
76OID_RSA_WITH_SHA224 = ObjectIdentifier("1.2.840.113549.1.1.14")
77OID_RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11")
78OID_RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12")
79OID_RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13")
80OID_ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1")
81OID_ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1")
82OID_ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2")
83OID_ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3")
84OID_ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4")
85OID_DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3")
86OID_DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1")
87OID_DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2")
88
89_SIG_OIDS_TO_HASH = {
90 OID_RSA_WITH_MD5.dotted_string: hashes.MD5(),
91 OID_RSA_WITH_SHA1.dotted_string: hashes.SHA1(),
92 OID_RSA_WITH_SHA224.dotted_string: hashes.SHA224(),
93 OID_RSA_WITH_SHA256.dotted_string: hashes.SHA256(),
94 OID_RSA_WITH_SHA384.dotted_string: hashes.SHA384(),
95 OID_RSA_WITH_SHA512.dotted_string: hashes.SHA512(),
96 OID_ECDSA_WITH_SHA1.dotted_string: hashes.SHA1(),
97 OID_ECDSA_WITH_SHA224.dotted_string: hashes.SHA224(),
98 OID_ECDSA_WITH_SHA256.dotted_string: hashes.SHA256(),
99 OID_ECDSA_WITH_SHA384.dotted_string: hashes.SHA384(),
100 OID_ECDSA_WITH_SHA512.dotted_string: hashes.SHA512(),
101 OID_DSA_WITH_SHA1.dotted_string: hashes.SHA1(),
102 OID_DSA_WITH_SHA224.dotted_string: hashes.SHA224(),
103 OID_DSA_WITH_SHA256.dotted_string: hashes.SHA256()
104}
105
106OID_SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1")
107OID_CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2")
108OID_CODE_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.3")
109OID_EMAIL_PROTECTION = ObjectIdentifier("1.3.6.1.5.5.7.3.4")
110OID_TIME_STAMPING = ObjectIdentifier("1.3.6.1.5.5.7.3.8")
111OID_OCSP_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.9")
112
113OID_CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2")
114OID_OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1")
115
116OID_CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1")
117OID_CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2")
118OID_ANY_POLICY = ObjectIdentifier("2.5.29.32.0")
Alex Gaynor7f57e9b2015-08-09 17:05:46 -0400119
120_OID_NAMES = {
121 OID_COMMON_NAME.dotted_string: "commonName",
122 OID_COUNTRY_NAME.dotted_string: "countryName",
123 OID_LOCALITY_NAME.dotted_string: "localityName",
124 OID_STATE_OR_PROVINCE_NAME.dotted_string: "stateOrProvinceName",
125 OID_ORGANIZATION_NAME.dotted_string: "organizationName",
126 OID_ORGANIZATIONAL_UNIT_NAME.dotted_string: "organizationalUnitName",
127 OID_SERIAL_NUMBER.dotted_string: "serialNumber",
128 OID_SURNAME.dotted_string: "surname",
129 OID_GIVEN_NAME.dotted_string: "givenName",
130 OID_TITLE.dotted_string: "title",
131 OID_GENERATION_QUALIFIER.dotted_string: "generationQualifier",
132 OID_DN_QUALIFIER.dotted_string: "dnQualifier",
133 OID_PSEUDONYM.dotted_string: "pseudonym",
134 OID_DOMAIN_COMPONENT.dotted_string: "domainComponent",
135 OID_EMAIL_ADDRESS.dotted_string: "emailAddress",
136 "1.2.840.113549.1.1.4": "md5WithRSAEncryption",
137 "1.2.840.113549.1.1.5": "sha1WithRSAEncryption",
138 "1.2.840.113549.1.1.14": "sha224WithRSAEncryption",
139 "1.2.840.113549.1.1.11": "sha256WithRSAEncryption",
140 "1.2.840.113549.1.1.12": "sha384WithRSAEncryption",
141 "1.2.840.113549.1.1.13": "sha512WithRSAEncryption",
142 "1.2.840.10045.4.1": "ecdsa-with-SHA1",
143 "1.2.840.10045.4.3.1": "ecdsa-with-SHA224",
144 "1.2.840.10045.4.3.2": "ecdsa-with-SHA256",
145 "1.2.840.10045.4.3.3": "ecdsa-with-SHA384",
146 "1.2.840.10045.4.3.4": "ecdsa-with-SHA512",
147 "1.2.840.10040.4.3": "dsa-with-sha1",
148 "2.16.840.1.101.3.4.3.1": "dsa-with-sha224",
149 "2.16.840.1.101.3.4.3.2": "dsa-with-sha256",
150 "1.3.6.1.5.5.7.3.1": "serverAuth",
151 "1.3.6.1.5.5.7.3.2": "clientAuth",
152 "1.3.6.1.5.5.7.3.3": "codeSigning",
153 "1.3.6.1.5.5.7.3.4": "emailProtection",
154 "1.3.6.1.5.5.7.3.8": "timeStamping",
155 "1.3.6.1.5.5.7.3.9": "OCSPSigning",
156 "2.5.29.9": "subjectDirectoryAttributes",
157 "2.5.29.14": "subjectKeyIdentifier",
158 "2.5.29.15": "keyUsage",
159 "2.5.29.17": "subjectAltName",
160 "2.5.29.18": "issuerAltName",
161 "2.5.29.19": "basicConstraints",
162 "2.5.29.21": "cRLReason",
163 "2.5.29.24": "invalidityDate",
164 "2.5.29.29": "certificateIssuer",
165 "2.5.29.30": "nameConstraints",
166 "2.5.29.31": "cRLDistributionPoints",
167 "2.5.29.32": "certificatePolicies",
168 "2.5.29.33": "policyMappings",
169 "2.5.29.35": "authorityKeyIdentifier",
170 "2.5.29.36": "policyConstraints",
171 "2.5.29.37": "extendedKeyUsage",
172 "2.5.29.46": "freshestCRL",
173 "2.5.29.54": "inhibitAnyPolicy",
174 "1.3.6.1.5.5.7.1.1": "authorityInfoAccess",
175 "1.3.6.1.5.5.7.1.11": "subjectInfoAccess",
176 "1.3.6.1.5.5.7.48.1.5": "OCSPNoCheck",
177 "1.3.6.1.5.5.7.48.1": "OCSP",
178 "1.3.6.1.5.5.7.48.2": "caIssuers",
179 "1.3.6.1.5.5.7.2.1": "id-qt-cps",
180 "1.3.6.1.5.5.7.2.2": "id-qt-unotice",
181}