aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cryptography/hazmat/_oid.py67
-rw-r--r--src/cryptography/x509/oid.py60
2 files changed, 68 insertions, 59 deletions
diff --git a/src/cryptography/hazmat/_oid.py b/src/cryptography/hazmat/_oid.py
new file mode 100644
index 00000000..cfe906cd
--- /dev/null
+++ b/src/cryptography/hazmat/_oid.py
@@ -0,0 +1,67 @@
+# This file is dual licensed under the terms of the Apache License, Version
+# 2.0, and the BSD License. See the LICENSE file in the root of this repository
+# for complete details.
+
+from __future__ import absolute_import, division, print_function
+
+from cryptography import utils
+
+
+class ObjectIdentifier(object):
+ def __init__(self, dotted_string):
+ self._dotted_string = dotted_string
+
+ nodes = self._dotted_string.split(".")
+ intnodes = []
+
+ # There must be at least 2 nodes, the first node must be 0..2, and
+ # if less than 2, the second node cannot have a value outside the
+ # range 0..39. All nodes must be integers.
+ for node in nodes:
+ try:
+ intnodes.append(int(node, 0))
+ except ValueError:
+ raise ValueError(
+ "Malformed OID: %s (non-integer nodes)" % (
+ self._dotted_string))
+
+ if len(nodes) < 2:
+ raise ValueError(
+ "Malformed OID: %s (insufficient number of nodes)" % (
+ self._dotted_string))
+
+ if intnodes[0] > 2:
+ raise ValueError(
+ "Malformed OID: %s (first node outside valid range)" % (
+ self._dotted_string))
+
+ if intnodes[0] < 2 and intnodes[1] >= 40:
+ raise ValueError(
+ "Malformed OID: %s (second node outside valid range)" % (
+ self._dotted_string))
+
+ def __eq__(self, other):
+ if not isinstance(other, ObjectIdentifier):
+ return NotImplemented
+
+ return self.dotted_string == other.dotted_string
+
+ def __ne__(self, other):
+ return not self == other
+
+ def __repr__(self):
+ return "<ObjectIdentifier(oid={0}, name={1})>".format(
+ self.dotted_string,
+ self._name
+ )
+
+ def __hash__(self):
+ return hash(self.dotted_string)
+
+ @property
+ def _name(self):
+ # Lazy import to avoid an import cycle
+ from cryptography.x509.oid import _OID_NAMES
+ return _OID_NAMES.get(self, "Unknown OID")
+
+ dotted_string = utils.read_only_property("_dotted_string")
diff --git a/src/cryptography/x509/oid.py b/src/cryptography/x509/oid.py
index d121a807..ec19007f 100644
--- a/src/cryptography/x509/oid.py
+++ b/src/cryptography/x509/oid.py
@@ -4,68 +4,10 @@
from __future__ import absolute_import, division, print_function
-from cryptography import utils
+from cryptography.hazmat._oid import ObjectIdentifier
from cryptography.hazmat.primitives import hashes
-class ObjectIdentifier(object):
- def __init__(self, dotted_string):
- self._dotted_string = dotted_string
-
- nodes = self._dotted_string.split(".")
- intnodes = []
-
- # There must be at least 2 nodes, the first node must be 0..2, and
- # if less than 2, the second node cannot have a value outside the
- # range 0..39. All nodes must be integers.
- for node in nodes:
- try:
- intnodes.append(int(node, 0))
- except ValueError:
- raise ValueError(
- "Malformed OID: %s (non-integer nodes)" % (
- self._dotted_string))
-
- if len(nodes) < 2:
- raise ValueError(
- "Malformed OID: %s (insufficient number of nodes)" % (
- self._dotted_string))
-
- if intnodes[0] > 2:
- raise ValueError(
- "Malformed OID: %s (first node outside valid range)" % (
- self._dotted_string))
-
- if intnodes[0] < 2 and intnodes[1] >= 40:
- raise ValueError(
- "Malformed OID: %s (second node outside valid range)" % (
- self._dotted_string))
-
- def __eq__(self, other):
- if not isinstance(other, ObjectIdentifier):
- return NotImplemented
-
- return self.dotted_string == other.dotted_string
-
- def __ne__(self, other):
- return not self == other
-
- def __repr__(self):
- return "<ObjectIdentifier(oid={0}, name={1})>".format(
- self.dotted_string,
- self._name
- )
-
- def __hash__(self):
- return hash(self.dotted_string)
-
- @property
- def _name(self):
- return _OID_NAMES.get(self, "Unknown OID")
-
- dotted_string = utils.read_only_property("_dotted_string")
-
-
class ExtensionOID(object):
SUBJECT_DIRECTORY_ATTRIBUTES = ObjectIdentifier("2.5.29.9")
SUBJECT_KEY_IDENTIFIER = ObjectIdentifier("2.5.29.14")