diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2017-09-13 21:34:59 +0800 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2017-09-13 09:34:59 -0400 |
commit | fbfc36da2a4769045f2373b004ddf0aff906cf38 (patch) | |
tree | 50bdea38adaed2a6969f642b40103ce6506d21df | |
parent | e535985a73a6aee349ac08b07ebe4f652b2eeb29 (diff) | |
download | cryptography-fbfc36da2a4769045f2373b004ddf0aff906cf38.tar.gz cryptography-fbfc36da2a4769045f2373b004ddf0aff906cf38.tar.bz2 cryptography-fbfc36da2a4769045f2373b004ddf0aff906cf38.zip |
implement __hash__ on all GeneralName types (#3907)
Needed to implement __hash__ on AuthorityKeyIdentifier
-rw-r--r-- | src/cryptography/x509/general_name.py | 19 | ||||
-rw-r--r-- | tests/x509/test_x509_ext.py | 41 |
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): |