diff options
author | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-07-08 16:35:25 -0500 |
---|---|---|
committer | Paul Kehrer <paul.l.kehrer@gmail.com> | 2015-07-08 16:35:25 -0500 |
commit | 366b0f8385bc1a35c25a4316f315c33a84348261 (patch) | |
tree | b1e82ae01e878f7ab1104f11747ef1dad67d982a | |
parent | 28ab45482ec35b9ce417352151cac9b213bae6f2 (diff) | |
parent | 5119125467c7cfe68f052ad804ac6ba88635739c (diff) | |
download | cryptography-366b0f8385bc1a35c25a4316f315c33a84348261.tar.gz cryptography-366b0f8385bc1a35c25a4316f315c33a84348261.tar.bz2 cryptography-366b0f8385bc1a35c25a4316f315c33a84348261.zip |
Merge pull request #2124 from alex/hash-cert
Fixed #2120 -- added __hash__ to x509.Cert
-rw-r--r-- | src/cryptography/hazmat/backends/openssl/x509.py | 11 | ||||
-rw-r--r-- | src/cryptography/x509.py | 6 | ||||
-rw-r--r-- | tests/test_x509.py | 23 |
3 files changed, 33 insertions, 7 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 3b1ff790..68104e69 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -226,15 +226,12 @@ class _Certificate(object): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.public_bytes(serialization.Encoding.DER)) + def fingerprint(self, algorithm): h = hashes.Hash(algorithm, self._backend) - bio = self._backend._create_mem_bio() - res = self._backend._lib.i2d_X509_bio( - bio, self._x509 - ) - assert res == 1 - der = self._backend._read_mem_bio(bio) - h.update(der) + h.update(self.public_bytes(serialization.Encoding.DER)) return h.finalize() @property diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index fb21be2b..f8134958 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -1324,6 +1324,12 @@ class Certificate(object): """ @abc.abstractmethod + def __hash__(self): + """ + Computes a hash. + """ + + @abc.abstractmethod def public_bytes(self, encoding): """ Serializes the certificate to PEM or DER format. diff --git a/tests/test_x509.py b/tests/test_x509.py index 80ae0a22..ccb24d7f 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -347,6 +347,29 @@ class TestRSACertificate(object): assert cert != cert2 assert cert != object() + def test_hash(self, backend): + cert1 = _load_cert( + os.path.join("x509", "custom", "post2000utctime.pem"), + x509.load_pem_x509_certificate, + backend + ) + cert2 = _load_cert( + os.path.join("x509", "custom", "post2000utctime.pem"), + x509.load_pem_x509_certificate, + backend + ) + cert3 = _load_cert( + os.path.join( + "x509", "PKITS_data", "certs", + "ValidGeneralizedTimenotAfterDateTest8EE.crt" + ), + x509.load_der_x509_certificate, + backend + ) + + assert hash(cert1) == hash(cert2) + assert hash(cert1) != hash(cert3) + def test_version_1_cert(self, backend): cert = _load_cert( os.path.join("x509", "v1_cert.pem"), |