aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/cryptography/hazmat/backends/openssl/x509.py16
-rw-r--r--tests/test_x509.py11
2 files changed, 20 insertions, 7 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index 4bddee4c..2f7d082f 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -873,10 +873,18 @@ class _CertificateRevocationList(object):
yield self._revoked_cert(i)
def __getitem__(self, idx):
- idx = operator.index(idx)
- if not 0 <= idx < len(self):
- raise IndexError
- return self._revoked_cert(idx)
+ if isinstance(idx, slice):
+ start, stop, step = idx.indices(len(self))
+ return [
+ self._revoked_cert(idx) for idx in range(start, stop, step)
+ ]
+ else:
+ idx = operator.index(idx)
+ if idx < 0:
+ idx += len(self)
+ if not 0 <= idx < len(self):
+ raise IndexError
+ return self._revoked_cert(idx)
def __len__(self):
revoked = self._backend._lib.X509_CRL_get_REVOKED(self._x509_crl)
diff --git a/tests/test_x509.py b/tests/test_x509.py
index 099dfd5f..755b65fa 100644
--- a/tests/test_x509.py
+++ b/tests/test_x509.py
@@ -461,15 +461,20 @@ class TestRevokedCertificate(object):
def test_indexing(self, backend):
crl = _load_cert(
- os.path.join("x509", "custom", "crl_empty.pem"),
+ os.path.join("x509", "custom", "crl_all_reasons.pem"),
x509.load_pem_x509_crl,
backend
)
with pytest.raises(IndexError):
- crl[-1]
+ crl[-13]
with pytest.raises(IndexError):
- crl[0]
+ crl[12]
+
+ assert crl[-1].serial_number == crl[11].serial_number
+ assert len(crl[2:4]) == 2
+ assert crl[2:4][0].serial_number == crl[2].serial_number
+ assert crl[2:4][1].serial_number == crl[3].serial_number
@pytest.mark.requires_backend_interface(interface=RSABackend)