aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Kehrer <paul.l.kehrer@gmail.com>2015-12-24 12:51:14 -0600
committerPaul Kehrer <paul.l.kehrer@gmail.com>2015-12-24 12:51:14 -0600
commit1e63b8470ceb4abdada68b8fce03365fbcd37a2a (patch)
tree51b05a9d2e050be14db885020ac73c230fe4d3db /src
parentb9d9021b9961c8616b6ed4ec987d76dead284059 (diff)
parentde85d5a3e790dde1da669bbb49a17aadc1ad7122 (diff)
downloadcryptography-1e63b8470ceb4abdada68b8fce03365fbcd37a2a.tar.gz
cryptography-1e63b8470ceb4abdada68b8fce03365fbcd37a2a.tar.bz2
cryptography-1e63b8470ceb4abdada68b8fce03365fbcd37a2a.zip
Merge pull request #2564 from alex/crl-index-perf
Make indexing a CRL O(1) instead of O(n).
Diffstat (limited to 'src')
-rw-r--r--src/cryptography/hazmat/backends/openssl/x509.py13
1 files changed, 11 insertions, 2 deletions
diff --git a/src/cryptography/hazmat/backends/openssl/x509.py b/src/cryptography/hazmat/backends/openssl/x509.py
index 7b9f71cd..a470adbd 100644
--- a/src/cryptography/hazmat/backends/openssl/x509.py
+++ b/src/cryptography/hazmat/backends/openssl/x509.py
@@ -6,6 +6,7 @@ from __future__ import absolute_import, division, print_function
import datetime
import ipaddress
+import operator
from email.utils import parseaddr
@@ -872,8 +873,16 @@ class _CertificateRevocationList(object):
yield self._revoked_cert(i)
def __getitem__(self, idx):
- # TODO: indexing is O(n)
- return list(self)[idx]
+ if isinstance(idx, slice):
+ start, stop, step = idx.indices(len(self))
+ return [self._revoked_cert(i) for i 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)