+
+
+CRL_PATH = "revoke.crl"
+
+
+@skipIf(not exists(CRL_PATH), "CACert's revoke.crl not found")
+class TestCACert(TestCase):
+ def test_cer_and_2pass(self):
+ with open(CRL_PATH, "rb") as fd:
+ raw = fd.read()
+ print("DER read")
+ start = time()
+ crl1 = CertificateList().decod(raw)
+ print("DER decoded", time() - start)
+ start = time()
+ der_raw = crl1.encode()
+ print("DER encoded", time() - start)
+ self.assertSequenceEqual(der_raw, raw)
+ buf = BytesIO()
+ start = time()
+ _, state = crl1.encode1st()
+ print("1st pass state size", getsizeof(state))
+ crl1.encode2nd(buf.write, iter(state))
+ print("DER 2pass encoded", time() - start)
+ self.assertSequenceEqual(buf.getvalue(), raw)
+ start = time()
+ cer_raw = encode_cer(crl1)
+ print("CER encoded", time() - start)
+ start = time()
+ crl2 = CertificateList().decod(cer_raw, ctx={"bered": True})
+ print("CER decoded", time() - start)
+ self.assertEqual(crl2, crl1)
+
+ def test_mmaped(self):
+ fd = open(CRL_PATH, "rb")
+ start = time()
+ CertificateList().decod(file_mmaped(fd))
+ print("DER decoded", time() - start)
+
+ def test_evgens(self):
+ fd = open(CRL_PATH, "rb")
+ raw = file_mmaped(fd)
+ print("CRL opened")
+ evgens_count = 0
+ revoked_certs_count = 0
+ start = time()
+ for decode_path, _, _ in CertificateList().decode_evgen(raw):
+ evgens_count += 1
+ if (
+ len(decode_path) == 3 and
+ decode_path[:2] == ("tbsCertList", "revokedCertificates")
+ ):
+ revoked_certs_count += 1
+ print("CRL parsed", time() - start)
+ evgens_upto_count = 0
+ start = time()
+ for decode_path, _, _ in CertificateList().decode_evgen(raw, ctx={
+ "evgen_mode_upto": (
+ (("tbsCertList", "revokedCertificates", any), True),
+ ),
+ }):
+ evgens_upto_count += 1
+ print("CRL upto parsed", time() - start)
+ self.assertEqual(
+ float(evgens_count - evgens_upto_count) / revoked_certs_count,
+ 3,
+ )