aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2017-09-14 04:24:30 +0800
committerAlex Gaynor <alex.gaynor@gmail.com>2017-09-13 16:24:30 -0400
commit979c26303fbd6a2f4044855d989f4a74a4d51ac5 (patch)
tree1aae87422896b36a11a34f1f4ffe08e583e62edc
parentbdad051b9987951b4838e5c3458f6ba38b4e2ccf (diff)
downloadcryptography-979c26303fbd6a2f4044855d989f4a74a4d51ac5.tar.gz
cryptography-979c26303fbd6a2f4044855d989f4a74a4d51ac5.tar.bz2
cryptography-979c26303fbd6a2f4044855d989f4a74a4d51ac5.zip
add aki hash (#3910)
* Implement __hash__ on AuthorityKeyIdentifier * Adding dirname to fix build issue on AuthorityKeyIdentifier test * .authority_cert_issuer to str * use a tuple and not a str repr
-rw-r--r--src/cryptography/x509/extensions.py9
-rw-r--r--tests/x509/test_x509_ext.py11
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):