Sample code for 30+ languages & platforms
Delphi DLL

Convert CRL PEM to XML

See more PEM Examples

Loads a CRL (Certificate Revocation List) from the PEM file format and converts to XML to allow for visual examination and parsing.

Note: This example requires Chilkat v9.5.0.77 or greater.

Chilkat Delphi DLL Downloads

Delphi DLL
uses
    Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
    Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Asn, Xml, Pem;

...

procedure TForm1.Button1Click(Sender: TObject);
var
success: Boolean;
pem: HCkPem;
numCrls: Integer;
i: Integer;
asn: HCkAsn;
xml: HCkXml;
crlBase64: PWideChar;

begin
success := False;

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

// This example requires Chilkat v9.5.0.77 or greater.
pem := CkPem_Create();

CkPem_putVerboseLogging(pem,True);
success := CkPem_LoadPemFile(pem,'qa_data/crl/sampleCrl.pem','password_not_used');
if (success <> True) then
  begin
    Memo1.Lines.Add(CkPem__lastErrorText(pem));
    Exit;
  end;

numCrls := CkPem_getNumCrls(pem);
i := 0;

asn := CkAsn_Create();
xml := CkXml_Create();
while i < numCrls do
  begin

    // Get the CRL as base64 (multi-line)
    crlBase64 := CkPem__getEncodedItem(pem,'crl','','base64_mime',i);
    if (CkPem_getLastMethodSuccess(pem) <> True) then
      begin
        Memo1.Lines.Add(CkPem__lastErrorText(pem));
        Exit;
      end;

    Memo1.Lines.Add(crlBase64);

    success := CkAsn_LoadEncoded(asn,crlBase64,'base64');
    if (success <> True) then
      begin
        Memo1.Lines.Add(CkAsn__lastErrorText(asn));
        Exit;
      end;

    // Convert ASN.1 to XML and load into xml and re-emit for pretty printing..
    CkXml_LoadXml(xml,CkAsn__asnToXml(asn));
    Memo1.Lines.Add(CkXml__getXml(xml));

    // Use this online tool to generate parsing code from CRL XML: 
    // Generate Parsing Code from XML

    Memo1.Lines.Add('-------------------------------------');
    i := i + 1;
  end;

CkPem_Dispose(pem);
CkAsn_Dispose(asn);
CkXml_Dispose(xml);

end;