aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cryptography/x509/general_name.py19
-rw-r--r--tests/x509/test_x509_ext.py41
2 files changed, 58 insertions, 2 deletions
diff --git a/src/cryptography/x509/general_name.py b/src/cryptography/x509/general_name.py
index abf3a48a..3ad71e4c 100644
--- a/src/cryptography/x509/general_name.py
+++ b/src/cryptography/x509/general_name.py
@@ -123,7 +123,7 @@ class RFC822Name(object):
return not self == other
def __hash__(self):
- return hash(self.value)
+ return hash(self.bytes_value)
def _idna_encode(value):
@@ -205,6 +205,9 @@ class DNSName(object):
def __ne__(self, other):
return not self == other
+ def __hash__(self):
+ return hash(self.bytes_value)
+
@utils.register_interface(GeneralName)
class UniformResourceIdentifier(object):
@@ -306,7 +309,7 @@ class UniformResourceIdentifier(object):
return not self == other
def __hash__(self):
- return hash(self.value)
+ return hash(self.bytes_value)
@utils.register_interface(GeneralName)
@@ -331,6 +334,9 @@ class DirectoryName(object):
def __ne__(self, other):
return not self == other
+ def __hash__(self):
+ return hash(self.value)
+
@utils.register_interface(GeneralName)
class RegisteredID(object):
@@ -354,6 +360,9 @@ class RegisteredID(object):
def __ne__(self, other):
return not self == other
+ def __hash__(self):
+ return hash(self.value)
+
@utils.register_interface(GeneralName)
class IPAddress(object):
@@ -389,6 +398,9 @@ class IPAddress(object):
def __ne__(self, other):
return not self == other
+ def __hash__(self):
+ return hash(self.value)
+
@utils.register_interface(GeneralName)
class OtherName(object):
@@ -416,3 +428,6 @@ class OtherName(object):
def __ne__(self, other):
return not self == other
+
+ def __hash__(self):
+ return hash((self.type_id, self.value))
diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py
index 830283bb..b3ea1f96 100644
--- a/tests/x509/test_x509_ext.py
+++ b/tests/x509/test_x509_ext.py
@@ -1525,6 +1525,13 @@ class TestDNSName(object):
assert n1 != n2
assert not (n2 != n3)
+ def test_hash(self):
+ n1 = x509.DNSName(b"test1")
+ n2 = x509.DNSName(b"test2")
+ n3 = x509.DNSName(b"test2")
+ assert hash(n1) != hash(n2)
+ assert hash(n2) == hash(n3)
+
class TestDirectoryName(object):
def test_not_name(self):
@@ -1571,6 +1578,19 @@ class TestDirectoryName(object):
assert gn != gn2
assert gn != object()
+ def test_hash(self):
+ name = x509.Name([
+ x509.NameAttribute(x509.ObjectIdentifier('2.999.1'), u'value1')
+ ])
+ name2 = x509.Name([
+ x509.NameAttribute(x509.ObjectIdentifier('2.999.2'), u'value2')
+ ])
+ gn = x509.DirectoryName(name)
+ gn2 = x509.DirectoryName(name)
+ gn3 = x509.DirectoryName(name2)
+ assert hash(gn) == hash(gn2)
+ assert hash(gn) != hash(gn3)
+
class TestRFC822Name(object):
def test_repr(self):
@@ -1728,6 +1748,13 @@ class TestRegisteredID(object):
assert gn != gn2
assert gn != object()
+ def test_hash(self):
+ gn = x509.RegisteredID(NameOID.COMMON_NAME)
+ gn2 = x509.RegisteredID(NameOID.COMMON_NAME)
+ gn3 = x509.RegisteredID(ExtensionOID.BASIC_CONSTRAINTS)
+ assert hash(gn) == hash(gn2)
+ assert hash(gn) != hash(gn3)
+
class TestIPAddress(object):
def test_not_ipaddress(self):
@@ -1761,6 +1788,13 @@ class TestIPAddress(object):
assert gn != gn2
assert gn != object()
+ def test_hash(self):
+ gn = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.1"))
+ gn2 = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.1"))
+ gn3 = x509.IPAddress(ipaddress.IPv4Address(u"127.0.0.2"))
+ assert hash(gn) == hash(gn2)
+ assert hash(gn) != hash(gn3)
+
class TestOtherName(object):
def test_invalid_args(self):
@@ -1810,6 +1844,13 @@ class TestOtherName(object):
gn2 = x509.OtherName(x509.ObjectIdentifier("1.2.3.5"), b"derdata")
assert gn != gn2
+ def test_hash(self):
+ gn = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), b"derdata")
+ gn2 = x509.OtherName(x509.ObjectIdentifier("1.2.3.4"), b"derdata")
+ gn3 = x509.OtherName(x509.ObjectIdentifier("1.2.3.5"), b"derdata")
+ assert hash(gn) == hash(gn2)
+ assert hash(gn) != hash(gn3)
+
class TestGeneralNames(object):
def test_get_values_for_type(self):