Merge pull request #2598 from reaperhulk/index-cp

support indexing in CertificatePolicies
diff --git a/src/cryptography/x509/extensions.py b/src/cryptography/x509/extensions.py
index dd2b8e6..4e7a53b 100644
--- a/src/cryptography/x509/extensions.py
+++ b/src/cryptography/x509/extensions.py
@@ -270,6 +270,9 @@
     def __ne__(self, other):
         return not self == other
 
+    def __getitem__(self, idx):
+        return self._descriptions[idx]
+
 
 class AccessDescription(object):
     def __init__(self, access_method, access_location):
@@ -379,6 +382,9 @@
     def __ne__(self, other):
         return not self == other
 
+    def __getitem__(self, idx):
+        return self._distribution_points[idx]
+
 
 class DistributionPoint(object):
     def __init__(self, full_name, relative_name, reasons, crl_issuer):
diff --git a/tests/test_x509_ext.py b/tests/test_x509_ext.py
index 475efbd..7cd24a6 100644
--- a/tests/test_x509_ext.py
+++ b/tests/test_x509_ext.py
@@ -2220,6 +2220,32 @@
         assert aia != aia2
         assert aia != object()
 
+    def test_indexing(self):
+        aia = x509.AuthorityInformationAccess([
+            x509.AccessDescription(
+                AuthorityInformationAccessOID.OCSP,
+                x509.UniformResourceIdentifier(u"http://ocsp.domain.com")
+            ),
+            x509.AccessDescription(
+                AuthorityInformationAccessOID.CA_ISSUERS,
+                x509.UniformResourceIdentifier(u"http://domain.com/ca.crt")
+            ),
+            x509.AccessDescription(
+                AuthorityInformationAccessOID.OCSP,
+                x509.UniformResourceIdentifier(u"http://ocsp2.domain.com")
+            ),
+            x509.AccessDescription(
+                AuthorityInformationAccessOID.OCSP,
+                x509.UniformResourceIdentifier(u"http://ocsp3.domain.com")
+            ),
+            x509.AccessDescription(
+                AuthorityInformationAccessOID.OCSP,
+                x509.UniformResourceIdentifier(u"http://ocsp4.domain.com")
+            ),
+        ])
+        assert aia[-1] == aia[4]
+        assert aia[2:6:2] == [aia[2], aia[4]]
+
 
 @pytest.mark.requires_backend_interface(interface=RSABackend)
 @pytest.mark.requires_backend_interface(interface=X509Backend)
@@ -2948,6 +2974,32 @@
         assert cdp != cdp4
         assert cdp != object()
 
+    def test_indexing(self):
+        ci = x509.CRLDistributionPoints([
+            x509.DistributionPoint(
+                None, None, None,
+                [x509.UniformResourceIdentifier(u"uri://thing")],
+            ),
+            x509.DistributionPoint(
+                None, None, None,
+                [x509.UniformResourceIdentifier(u"uri://thing2")],
+            ),
+            x509.DistributionPoint(
+                None, None, None,
+                [x509.UniformResourceIdentifier(u"uri://thing3")],
+            ),
+            x509.DistributionPoint(
+                None, None, None,
+                [x509.UniformResourceIdentifier(u"uri://thing4")],
+            ),
+            x509.DistributionPoint(
+                None, None, None,
+                [x509.UniformResourceIdentifier(u"uri://thing5")],
+            ),
+        ])
+        assert ci[-1] == ci[4]
+        assert ci[2:6:2] == [ci[2], ci[4]]
+
 
 @pytest.mark.requires_backend_interface(interface=RSABackend)
 @pytest.mark.requires_backend_interface(interface=X509Backend)