class CertificationRevocationListImpl implements CertificationRevocationList {

  public static List<String> getCrlDistributionPoints(X509Certificate certificate)
  {
    List<String> urls = new ArrayList<>();
    try
    {
      if (certificate == null || certificate.getNonCriticalExtensionOIDs() == null
          || !certificate.getNonCriticalExtensionOIDs().contains(Extension.cRLDistributionPoints.getId()))
      {
        return urls;
      }
      CRLDistPoint distPoint = CRLDistPoint.getInstance(JcaX509ExtensionUtils.parseExtensionValue(certificate.getExtensionValue(Extension.cRLDistributionPoints.getId())));
      for ( DistributionPoint dp : distPoint.getDistributionPoints() )
      {
        DistributionPointName distributionPoint = dp.getDistributionPoint();
        if (distributionPoint != null && distributionPoint.getType() == DistributionPointName.FULL_NAME)
        {
          for ( GeneralName genName : ((GeneralNames)distributionPoint.getName()).getNames() )
          {
            if (genName.getTagNo() == GeneralName.uniformResourceIdentifier)
            {
              urls.add(DERIA5String.getInstance(genName.getName()).getString());
            }
          }
        }
      }
      return urls;
    }
    catch (IOException e)
    {
      log.error("Could not read CRL Distribution Points from certificate with distinguished name: {} ",
                certificate.getSubjectDN().toString(),
                e);
    }
    return urls;
  }

  private  CertificationRevocationListImpl(Set<X509Certificate> masterList,
                                          X509Certificate cscaRootCertificate,
                                          CrlFetcher crlFetcher);

}