diff options
author | Alex Gaynor <alex.gaynor@gmail.com> | 2015-07-08 20:59:16 -0400 |
---|---|---|
committer | Alex Gaynor <alex.gaynor@gmail.com> | 2015-07-08 20:59:16 -0400 |
commit | 978137d89e99314e823ab206d482d23e6a830329 (patch) | |
tree | db7255ef8add97cc87ef32552d0084c8bc1e7744 | |
parent | 366b0f8385bc1a35c25a4316f315c33a84348261 (diff) | |
download | cryptography-978137d89e99314e823ab206d482d23e6a830329.tar.gz cryptography-978137d89e99314e823ab206d482d23e6a830329.tar.bz2 cryptography-978137d89e99314e823ab206d482d23e6a830329.zip |
Fixed #2127 -- added __hash__ to CSR
-rw-r--r-- | src/cryptography/hazmat/backends/openssl/x509.py | 3 | ||||
-rw-r--r-- | src/cryptography/x509.py | 6 | ||||
-rw-r--r-- | tests/test_x509.py | 20 |
3 files changed, 29 insertions, 0 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py index 68104e69..a4013389 100644 --- a/src/cryptography/hazmat/backends/openssl/x509.py +++ b/src/cryptography/hazmat/backends/openssl/x509.py @@ -709,6 +709,9 @@ class _CertificateSigningRequest(object): def __ne__(self, other): return not self == other + def __hash__(self): + return hash(self.public_bytes(serialization.Encoding.DER)) + def public_key(self): pkey = self._backend._lib.X509_REQ_get_pubkey(self._x509_req) assert pkey != self._backend._ffi.NULL diff --git a/src/cryptography/x509.py b/src/cryptography/x509.py index f8134958..0ad1d4f9 100644 --- a/src/cryptography/x509.py +++ b/src/cryptography/x509.py @@ -1410,6 +1410,12 @@ class CertificateSigningRequest(object): """ @abc.abstractmethod + def __hash__(self): + """ + Computes a hash. + """ + + @abc.abstractmethod def public_key(self): """ Returns the public key diff --git a/tests/test_x509.py b/tests/test_x509.py index ccb24d7f..9c97e969 100644 --- a/tests/test_x509.py +++ b/tests/test_x509.py @@ -746,6 +746,26 @@ class TestRSACertificateRequest(object): assert request1 != request2 assert request1 != object() + def test_hash(self, backend): + request1 = _load_cert( + os.path.join("x509", "requests", "rsa_sha1.pem"), + x509.load_pem_x509_csr, + backend + ) + request2 = _load_cert( + os.path.join("x509", "requests", "rsa_sha1.pem"), + x509.load_pem_x509_csr, + backend + ) + request3 = _load_cert( + os.path.join("x509", "requests", "san_rsa_sha1.pem"), + x509.load_pem_x509_csr, + backend + ) + + assert hash(request1) == hash(request2) + assert hash(request1) != hash(request3) + @pytest.mark.requires_backend_interface(interface=X509Backend) class TestCertificateSigningRequestBuilder(object): |