diff options
-rw-r--r-- | src/cryptography/x509/extensions.py | 9 | ||||
-rw-r--r-- | tests/x509/test_x509_ext.py | 11 |
2 files changed, 19 insertions, 1 deletions
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py index 01378b38..8880f744 100644 --- a/src/cryptography/x509/extensions.py +++ b/src/cryptography/x509/extensions.py @@ -213,6 +213,15 @@ class AuthorityKeyIdentifier(object): def __ne__(self, other): return not self == other + def __hash__(self): + if self.authority_cert_issuer is None: + aci = None + else: + aci = tuple(self.authority_cert_issuer) + return hash(( + self.key_identifier, aci, self.authority_cert_serial_number + )) + key_identifier = utils.read_only_property("_key_identifier") authority_cert_issuer = utils.read_only_property("_authority_cert_issuer") authority_cert_serial_number = utils.read_only_property( diff --git a/tests/x509/test_x509_ext.py b/tests/x509/test_x509_ext.py index 6010e77d..22b4cc5b 100644 --- a/tests/x509/test_x509_ext.py +++ b/tests/x509/test_x509_ext.py @@ -907,7 +907,6 @@ class TestSubjectKeyIdentifier(object): ski3 = x509.SubjectKeyIdentifier( binascii.unhexlify(b"aa8098456f6ff7ff3ac9092384932230498bc980") ) - assert hash(ski1) == hash(ski2) assert hash(ski1) != hash(ski3) @@ -1025,6 +1024,16 @@ class TestAuthorityKeyIdentifier(object): assert aki != aki5 assert aki != object() + def test_hash(self): + dirname = x509.DirectoryName( + x509.Name([x509.NameAttribute(NameOID.COMMON_NAME, u'myCN')]) + ) + aki1 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) + aki2 = x509.AuthorityKeyIdentifier(b"digest", [dirname], 1234) + aki3 = x509.AuthorityKeyIdentifier(b"digest", None, None) + assert hash(aki1) == hash(aki2) + assert hash(aki1) != hash(aki3) + class TestBasicConstraints(object): def test_ca_not_boolean(self): |