blob: 87601f856362b99f7eaba831bfc9215746123c3a [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,
Alex Gaynore8e14872015-08-09 19:23:44 -040027 _OID_NAMES.get(self, "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 Kehrerc315c892015-08-09 21:16:02 -050036class ExtensionOID(object):
37 SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9")
38 SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14")
39 KEY_USAGE = ObjectIdentifier("2.5.29.15")
40 SUBJECT_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.17")
41 ISSUER_ALTERNATIVE_NAME = ObjectIdentifier("2.5.29.18")
42 BASIC_CONSTRAINTS = ObjectIdentifier("2.5.29.19")
43 NAME_CONSTRAINTS = ObjectIdentifier("2.5.29.30")
44 CRL_DISTRIBUTION_POINTS = ObjectIdentifier("2.5.29.31")
45 CERTIFICATE_POLICIES = ObjectIdentifier("2.5.29.32")
46 POLICY_MAPPINGS = ObjectIdentifier("2.5.29.33")
47 AUTHORITY_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.35")
48 POLICY_CONSTRAINTS = ObjectIdentifier("2.5.29.36")
49 EXTENDED_KEY_USAGE = ObjectIdentifier("2.5.29.37")
50 FRESHEST_CRL = ObjectIdentifier("2.5.29.46")
51 INHIBIT_ANY_POLICY = ObjectIdentifier("2.5.29.54")
52 AUTHORITY_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.1")
53 SUBJECT_INFORMATION_ACCESS = ObjectIdentifier("1.3.6.1.5.5.7.1.11")
54 OCSP_NO_CHECK = ObjectIdentifier("1.3.6.1.5.5.7.48.1.5")
55
56
Paul Kehrer64431d02015-08-09 13:55:59 -050057OID_CRL_REASON = ObjectIdentifier("2.5.29.21")
58OID_INVALIDITY_DATE = ObjectIdentifier("2.5.29.24")
59OID_CERTIFICATE_ISSUER = ObjectIdentifier("2.5.29.29")
Paul Kehrer64431d02015-08-09 13:55:59 -050060
61OID_COMMON_NAME = ObjectIdentifier("2.5.4.3")
62OID_COUNTRY_NAME = ObjectIdentifier("2.5.4.6")
63OID_LOCALITY_NAME = ObjectIdentifier("2.5.4.7")
64OID_STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8")
65OID_ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10")
66OID_ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11")
67OID_SERIAL_NUMBER = ObjectIdentifier("2.5.4.5")
68OID_SURNAME = ObjectIdentifier("2.5.4.4")
69OID_GIVEN_NAME = ObjectIdentifier("2.5.4.42")
70OID_TITLE = ObjectIdentifier("2.5.4.12")
71OID_GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44")
72OID_DN_QUALIFIER = ObjectIdentifier("2.5.4.46")
73OID_PSEUDONYM = ObjectIdentifier("2.5.4.65")
74OID_DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25")
75OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1")
76
Paul Kehrer02f87332015-08-09 22:32:55 -050077
78class SignatureAlgorithmOID(object):
79 RSA_WITH_MD5 = ObjectIdentifier("1.2.840.113549.1.1.4")
80 RSA_WITH_SHA1 = ObjectIdentifier("1.2.840.113549.1.1.5")
81 RSA_WITH_SHA224 = ObjectIdentifier("1.2.840.113549.1.1.14")
82 RSA_WITH_SHA256 = ObjectIdentifier("1.2.840.113549.1.1.11")
83 RSA_WITH_SHA384 = ObjectIdentifier("1.2.840.113549.1.1.12")
84 RSA_WITH_SHA512 = ObjectIdentifier("1.2.840.113549.1.1.13")
85 ECDSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10045.4.1")
86 ECDSA_WITH_SHA224 = ObjectIdentifier("1.2.840.10045.4.3.1")
87 ECDSA_WITH_SHA256 = ObjectIdentifier("1.2.840.10045.4.3.2")
88 ECDSA_WITH_SHA384 = ObjectIdentifier("1.2.840.10045.4.3.3")
89 ECDSA_WITH_SHA512 = ObjectIdentifier("1.2.840.10045.4.3.4")
90 DSA_WITH_SHA1 = ObjectIdentifier("1.2.840.10040.4.3")
91 DSA_WITH_SHA224 = ObjectIdentifier("2.16.840.1.101.3.4.3.1")
92 DSA_WITH_SHA256 = ObjectIdentifier("2.16.840.1.101.3.4.3.2")
Paul Kehrer64431d02015-08-09 13:55:59 -050093
94_SIG_OIDS_TO_HASH = {
Paul Kehrer02f87332015-08-09 22:32:55 -050095 SignatureAlgorithmOID.RSA_WITH_MD5.dotted_string: hashes.MD5(),
96 SignatureAlgorithmOID.RSA_WITH_SHA1.dotted_string: hashes.SHA1(),
97 SignatureAlgorithmOID.RSA_WITH_SHA224.dotted_string: hashes.SHA224(),
98 SignatureAlgorithmOID.RSA_WITH_SHA256.dotted_string: hashes.SHA256(),
99 SignatureAlgorithmOID.RSA_WITH_SHA384.dotted_string: hashes.SHA384(),
100 SignatureAlgorithmOID.RSA_WITH_SHA512.dotted_string: hashes.SHA512(),
101 SignatureAlgorithmOID.ECDSA_WITH_SHA1.dotted_string: hashes.SHA1(),
102 SignatureAlgorithmOID.ECDSA_WITH_SHA224.dotted_string: hashes.SHA224(),
103 SignatureAlgorithmOID.ECDSA_WITH_SHA256.dotted_string: hashes.SHA256(),
104 SignatureAlgorithmOID.ECDSA_WITH_SHA384.dotted_string: hashes.SHA384(),
105 SignatureAlgorithmOID.ECDSA_WITH_SHA512.dotted_string: hashes.SHA512(),
106 SignatureAlgorithmOID.DSA_WITH_SHA1.dotted_string: hashes.SHA1(),
107 SignatureAlgorithmOID.DSA_WITH_SHA224.dotted_string: hashes.SHA224(),
108 SignatureAlgorithmOID.DSA_WITH_SHA256.dotted_string: hashes.SHA256()
Paul Kehrer64431d02015-08-09 13:55:59 -0500109}
110
111OID_SERVER_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.1")
112OID_CLIENT_AUTH = ObjectIdentifier("1.3.6.1.5.5.7.3.2")
113OID_CODE_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.3")
114OID_EMAIL_PROTECTION = ObjectIdentifier("1.3.6.1.5.5.7.3.4")
115OID_TIME_STAMPING = ObjectIdentifier("1.3.6.1.5.5.7.3.8")
116OID_OCSP_SIGNING = ObjectIdentifier("1.3.6.1.5.5.7.3.9")
117
118OID_CA_ISSUERS = ObjectIdentifier("1.3.6.1.5.5.7.48.2")
119OID_OCSP = ObjectIdentifier("1.3.6.1.5.5.7.48.1")
120
121OID_CPS_QUALIFIER = ObjectIdentifier("1.3.6.1.5.5.7.2.1")
122OID_CPS_USER_NOTICE = ObjectIdentifier("1.3.6.1.5.5.7.2.2")
123OID_ANY_POLICY = ObjectIdentifier("2.5.29.32.0")
Alex Gaynor7f57e9b2015-08-09 17:05:46 -0400124
125_OID_NAMES = {
Alex Gaynore8e14872015-08-09 19:23:44 -0400126 OID_COMMON_NAME: "commonName",
127 OID_COUNTRY_NAME: "countryName",
128 OID_LOCALITY_NAME: "localityName",
129 OID_STATE_OR_PROVINCE_NAME: "stateOrProvinceName",
130 OID_ORGANIZATION_NAME: "organizationName",
131 OID_ORGANIZATIONAL_UNIT_NAME: "organizationalUnitName",
132 OID_SERIAL_NUMBER: "serialNumber",
133 OID_SURNAME: "surname",
134 OID_GIVEN_NAME: "givenName",
135 OID_TITLE: "title",
136 OID_GENERATION_QUALIFIER: "generationQualifier",
137 OID_DN_QUALIFIER: "dnQualifier",
138 OID_PSEUDONYM: "pseudonym",
139 OID_DOMAIN_COMPONENT: "domainComponent",
140 OID_EMAIL_ADDRESS: "emailAddress",
Paul Kehrer02f87332015-08-09 22:32:55 -0500141 SignatureAlgorithmOID.RSA_WITH_MD5: "md5WithRSAEncryption",
142 SignatureAlgorithmOID.RSA_WITH_SHA1: "sha1WithRSAEncryption",
143 SignatureAlgorithmOID.RSA_WITH_SHA224: "sha224WithRSAEncryption",
144 SignatureAlgorithmOID.RSA_WITH_SHA256: "sha256WithRSAEncryption",
145 SignatureAlgorithmOID.RSA_WITH_SHA384: "sha384WithRSAEncryption",
146 SignatureAlgorithmOID.RSA_WITH_SHA512: "sha512WithRSAEncryption",
147 SignatureAlgorithmOID.ECDSA_WITH_SHA1: "ecdsa-with-SHA1",
148 SignatureAlgorithmOID.ECDSA_WITH_SHA224: "ecdsa-with-SHA224",
149 SignatureAlgorithmOID.ECDSA_WITH_SHA256: "ecdsa-with-SHA256",
150 SignatureAlgorithmOID.ECDSA_WITH_SHA384: "ecdsa-with-SHA384",
151 SignatureAlgorithmOID.ECDSA_WITH_SHA512: "ecdsa-with-SHA512",
152 SignatureAlgorithmOID.DSA_WITH_SHA1: "dsa-with-sha1",
153 SignatureAlgorithmOID.DSA_WITH_SHA224: "dsa-with-sha224",
154 SignatureAlgorithmOID.DSA_WITH_SHA256: "dsa-with-sha256",
Alex Gaynore8e14872015-08-09 19:23:44 -0400155 OID_SERVER_AUTH: "serverAuth",
156 OID_CLIENT_AUTH: "clientAuth",
157 OID_CODE_SIGNING: "codeSigning",
158 OID_EMAIL_PROTECTION: "emailProtection",
159 OID_TIME_STAMPING: "timeStamping",
160 OID_OCSP_SIGNING: "OCSPSigning",
Paul Kehrerc315c892015-08-09 21:16:02 -0500161 ExtensionOID.SUBJECT_DIRECTORY_ATTRIBUTES: "subjectDirectoryAttributes",
162 ExtensionOID.SUBJECT_KEY_IDENTIFIER: "subjectKeyIdentifier",
163 ExtensionOID.KEY_USAGE: "keyUsage",
164 ExtensionOID.SUBJECT_ALTERNATIVE_NAME: "subjectAltName",
165 ExtensionOID.ISSUER_ALTERNATIVE_NAME: "issuerAltName",
166 ExtensionOID.BASIC_CONSTRAINTS: "basicConstraints",
Alex Gaynore8e14872015-08-09 19:23:44 -0400167 OID_CRL_REASON: "cRLReason",
168 OID_INVALIDITY_DATE: "invalidityDate",
169 OID_CERTIFICATE_ISSUER: "certificateIssuer",
Paul Kehrerc315c892015-08-09 21:16:02 -0500170 ExtensionOID.NAME_CONSTRAINTS: "nameConstraints",
171 ExtensionOID.CRL_DISTRIBUTION_POINTS: "cRLDistributionPoints",
172 ExtensionOID.CERTIFICATE_POLICIES: "certificatePolicies",
173 ExtensionOID.POLICY_MAPPINGS: "policyMappings",
174 ExtensionOID.AUTHORITY_KEY_IDENTIFIER: "authorityKeyIdentifier",
175 ExtensionOID.POLICY_CONSTRAINTS: "policyConstraints",
176 ExtensionOID.EXTENDED_KEY_USAGE: "extendedKeyUsage",
177 ExtensionOID.FRESHEST_CRL: "freshestCRL",
178 ExtensionOID.INHIBIT_ANY_POLICY: "inhibitAnyPolicy",
179 ExtensionOID.AUTHORITY_INFORMATION_ACCESS: "authorityInfoAccess",
180 ExtensionOID.SUBJECT_INFORMATION_ACCESS: "subjectInfoAccess",
181 ExtensionOID.OCSP_NO_CHECK: "OCSPNoCheck",
Alex Gaynore8e14872015-08-09 19:23:44 -0400182 OID_OCSP: "OCSP",
183 OID_CA_ISSUERS: "caIssuers",
184 OID_CPS_QUALIFIER: "id-qt-cps",
185 OID_CPS_USER_NOTICE: "id-qt-unotice",
Alex Gaynor7f57e9b2015-08-09 17:05:46 -0400186}