diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 2363d2bf42df..5ef7a28bc0a3 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -234,6 +234,9 @@ def __eq__(self, other): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.digest) + @utils.register_interface(ExtensionType) class AuthorityInformationAccess(object): diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py index 49a3433cce9c..0f5d782379b3 100644 --- a/tests/test_x509_ext.py +++ b/tests/test_x509_ext.py @@ -656,6 +656,20 @@ def test_ne(self): assert ski != ski2 assert ski != object() + def test_hash(self): + ski1 = x509.SubjectKeyIdentifier( + binascii.unhexlify(b"092384932230498bc980aa8098456f6ff7ff3ac9") + ) + ski2 = x509.SubjectKeyIdentifier( + binascii.unhexlify(b"092384932230498bc980aa8098456f6ff7ff3ac9") + ) + ski3 = x509.SubjectKeyIdentifier( + binascii.unhexlify(b"aa8098456f6ff7ff3ac9092384932230498bc980") + ) + + assert hash(ski1) == hash(ski2) + assert hash(ski1) != hash(ski3) + class TestAuthorityKeyIdentifier(object): def test_authority_cert_issuer_not_generalname(self):