From 912d3fbc84d72ea112e3a64494e9de69a105b0c3 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 29 Jan 2015 11:19:22 -0600 Subject: add attribute and objectidentifier classes for x509 name --- src/cryptography/x509.py | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) (limited to 'src') diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index be1298b6..8cdf7db5 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -9,6 +9,8 @@ from enum import Enum import six +from cryptography import utils + class Version(Enum): v1 = 0 @@ -29,6 +31,77 @@ class InvalidVersion(Exception): self.parsed_version = parsed_version +class UnknownAttribute(Exception): + pass + + +class Attribute(object): + def __init__(self, oid, value): + if not isinstance(oid, ObjectIdentifier): + raise TypeError("oid argument must be an ObjectIdentifier object") + + self._oid = oid + self._value = value + + oid = utils.read_only_property("_oid") + value = utils.read_only_property("_value") + + def __eq__(self, other): + if not isinstance(other, Attribute): + return NotImplemented + + return ( + self.oid == other.oid and + self.value == other.value + ) + + def __ne__(self, other): + return not self == other + + +class ObjectIdentifier(object): + def __init__(self, oid, name): + self._value = oid + self._name = name + + def __eq__(self, other): + if not isinstance(other, ObjectIdentifier): + return NotImplemented + + return self._value == other._value and self._name == other._name + + def __ne__(self, other): + return not self == other + + def __repr__(self): + return "".format( + self._value, self._name + ) + + value = utils.read_only_property("_value") + + +OID_COMMON_NAME = ObjectIdentifier("2.5.4.3", "commonName") +OID_COUNTRY_NAME = ObjectIdentifier("2.5.4.6", "countryName") +OID_LOCALITY_NAME = ObjectIdentifier("2.5.4.7", "localityName") +OID_STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8", "stateOrProvinceName") +OID_ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10", "organizationName") +OID_ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier( + "2.5.4.11", "organizationalUnitName" +) +OID_SERIAL_NUMBER = ObjectIdentifier("2.5.4.5", "serialNumber") +OID_SURNAME = ObjectIdentifier("2.5.4.4", "surname") +OID_GIVEN_NAME = ObjectIdentifier("2.5.4.42", "givenName") +OID_TITLE = ObjectIdentifier("2.5.4.12", "title") +OID_GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44", "generationQualifier") +OID_DN_QUALIFIER = ObjectIdentifier("2.5.4.46", "dnQualifier") +OID_PSEUDONYM = ObjectIdentifier("2.5.4.65", "pseudonym") +OID_DOMAIN_COMPONENT = ObjectIdentifier( + "0.9.2342.19200300.100.1.25", "domainComponent" +) +OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1", "emailAddress") + + @six.add_metaclass(abc.ABCMeta) class Certificate(object): @abc.abstractmethod -- cgit v1.2.3 From 806bfb24feb254287c588da4887b45025bec3623 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Mon, 2 Feb 2015 17:05:24 -0600 Subject: rename Attribute to NameAttribute and remove name from OID --- src/cryptography/x509.py | 66 +++++++++++++++++++++++++++++------------------- 1 file changed, 40 insertions(+), 26 deletions(-) (limited to 'src') diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index 8cdf7db5..a1f8c5b2 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -12,6 +12,25 @@ import six from cryptography import utils +_OID_NAMES = { + "2.5.4.3": "commonName", + "2.5.4.6": "countryName", + "2.5.4.7": "localityName", + "2.5.4.8": "stateOrProvinceName", + "2.5.4.10": "organizationName", + "2.5.4.11": "organizationalUnitName", + "2.5.4.5": "serialNumber", + "2.5.4.4": "surname", + "2.5.4.42": "givenName", + "2.5.4.12": "title", + "2.5.4.44": "generationQualifier", + "2.5.4.46": "dnQualifier", + "2.5.4.65": "pseudonym", + "0.9.2342.19200300.100.1.25": "domainComponent", + "1.2.840.113549.1.9.1": "emailAddress", +} + + class Version(Enum): v1 = 0 v3 = 2 @@ -31,11 +50,11 @@ class InvalidVersion(Exception): self.parsed_version = parsed_version -class UnknownAttribute(Exception): +class UnknownNameAttribute(Exception): pass -class Attribute(object): +class NameAttribute(object): def __init__(self, oid, value): if not isinstance(oid, ObjectIdentifier): raise TypeError("oid argument must be an ObjectIdentifier object") @@ -47,7 +66,7 @@ class Attribute(object): value = utils.read_only_property("_value") def __eq__(self, other): - if not isinstance(other, Attribute): + if not isinstance(other, NameAttribute): return NotImplemented return ( @@ -60,46 +79,41 @@ class Attribute(object): class ObjectIdentifier(object): - def __init__(self, oid, name): + def __init__(self, oid): self._value = oid - self._name = name def __eq__(self, other): if not isinstance(other, ObjectIdentifier): return NotImplemented - return self._value == other._value and self._name == other._name + return self._value == other._value def __ne__(self, other): return not self == other def __repr__(self): return "".format( - self._value, self._name + self._value, _OID_NAMES.get(self._value, "Unknown OID") ) value = utils.read_only_property("_value") -OID_COMMON_NAME = ObjectIdentifier("2.5.4.3", "commonName") -OID_COUNTRY_NAME = ObjectIdentifier("2.5.4.6", "countryName") -OID_LOCALITY_NAME = ObjectIdentifier("2.5.4.7", "localityName") -OID_STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8", "stateOrProvinceName") -OID_ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10", "organizationName") -OID_ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier( - "2.5.4.11", "organizationalUnitName" -) -OID_SERIAL_NUMBER = ObjectIdentifier("2.5.4.5", "serialNumber") -OID_SURNAME = ObjectIdentifier("2.5.4.4", "surname") -OID_GIVEN_NAME = ObjectIdentifier("2.5.4.42", "givenName") -OID_TITLE = ObjectIdentifier("2.5.4.12", "title") -OID_GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44", "generationQualifier") -OID_DN_QUALIFIER = ObjectIdentifier("2.5.4.46", "dnQualifier") -OID_PSEUDONYM = ObjectIdentifier("2.5.4.65", "pseudonym") -OID_DOMAIN_COMPONENT = ObjectIdentifier( - "0.9.2342.19200300.100.1.25", "domainComponent" -) -OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1", "emailAddress") +OID_COMMON_NAME = ObjectIdentifier("2.5.4.3") +OID_COUNTRY_NAME = ObjectIdentifier("2.5.4.6") +OID_LOCALITY_NAME = ObjectIdentifier("2.5.4.7") +OID_STATE_OR_PROVINCE_NAME = ObjectIdentifier("2.5.4.8") +OID_ORGANIZATION_NAME = ObjectIdentifier("2.5.4.10") +OID_ORGANIZATIONAL_UNIT_NAME = ObjectIdentifier("2.5.4.11") +OID_SERIAL_NUMBER = ObjectIdentifier("2.5.4.5") +OID_SURNAME = ObjectIdentifier("2.5.4.4") +OID_GIVEN_NAME = ObjectIdentifier("2.5.4.42") +OID_TITLE = ObjectIdentifier("2.5.4.12") +OID_GENERATION_QUALIFIER = ObjectIdentifier("2.5.4.44") +OID_DN_QUALIFIER = ObjectIdentifier("2.5.4.46") +OID_PSEUDONYM = ObjectIdentifier("2.5.4.65") +OID_DOMAIN_COMPONENT = ObjectIdentifier("0.9.2342.19200300.100.1.25") +OID_EMAIL_ADDRESS = ObjectIdentifier("1.2.840.113549.1.9.1") @six.add_metaclass(abc.ABCMeta) -- cgit v1.2.3 From a433bb369ad9c0d104bd8d590c2192054fc6a042 Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 4 Feb 2015 12:23:53 -0600 Subject: UnknownNameAttribute is not needed now --- src/cryptography/x509.py | 4 ---- 1 file changed, 4 deletions(-) (limited to 'src') diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index a1f8c5b2..1b8d6357 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -50,10 +50,6 @@ class InvalidVersion(Exception): self.parsed_version = parsed_version -class UnknownNameAttribute(Exception): - pass - - class NameAttribute(object): def __init__(self, oid, value): if not isinstance(oid, ObjectIdentifier): -- cgit v1.2.3 From d44f9a6cb848c4dd6cc0724df5e5f5e4607a857a Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Wed, 4 Feb 2015 14:47:34 -0600 Subject: rename ObjectIdentifier.value to dotted_string --- src/cryptography/x509.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) (limited to 'src') diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index 1b8d6357..7f3ace48 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -75,24 +75,25 @@ class NameAttribute(object): class ObjectIdentifier(object): - def __init__(self, oid): - self._value = oid + def __init__(self, dotted_string): + self._dotted_string = dotted_string def __eq__(self, other): if not isinstance(other, ObjectIdentifier): return NotImplemented - return self._value == other._value + return self._dotted_string == other._dotted_string def __ne__(self, other): return not self == other def __repr__(self): return "".format( - self._value, _OID_NAMES.get(self._value, "Unknown OID") + self._dotted_string, + _OID_NAMES.get(self._dotted_string, "Unknown OID") ) - value = utils.read_only_property("_value") + dotted_string = utils.read_only_property("_dotted_string") OID_COMMON_NAME = ObjectIdentifier("2.5.4.3") -- cgit v1.2.3 From 858b9b7050105ac7bf7da49924608d8ea0e3ec2f Mon Sep 17 00:00:00 2001 From: Paul Kehrer Date: Thu, 5 Feb 2015 09:50:31 -0600 Subject: add descriptions to each OID constant, update object to instance --- src/cryptography/x509.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index 7f3ace48..e280980b 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -53,7 +53,9 @@ class InvalidVersion(Exception): class NameAttribute(object): def __init__(self, oid, value): if not isinstance(oid, ObjectIdentifier): - raise TypeError("oid argument must be an ObjectIdentifier object") + raise TypeError( + "oid argument must be an ObjectIdentifier instance." + ) self._oid = oid self._value = value -- cgit v1.2.3