Delphi ActiveX
Delphi ActiveX
Get Public Key from CSR
See more CSR Examples
Demonstrates how to get the public key from a CSR.Chilkat Delphi ActiveX Downloads
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB;
...
procedure TForm1.Button1Click(Sender: TObject);
var
success: Integer;
pem: TChilkatPem;
noPassword: WideString;
strBase64: WideString;
asn: TChilkatAsn;
xml: TChilkatXml;
strModulusHex: WideString;
bd: TChilkatBinData;
modulus64: WideString;
xmlPubKey: TChilkatXml;
pubkey: TPublicKey;
preferPkcs1: Integer;
begin
success := 0;
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
pem := TChilkatPem.Create(Self);
// No password is required. Pass an empty password string..
noPassword := '';
success := pem.LoadPemFile('qa_data/csr/csr2.pem',noPassword);
if (success <> 1) then
begin
Memo1.Lines.Add(pem.LastErrorText);
Exit;
end;
strBase64 := pem.GetEncodedItem('csr','','base64',0);
asn := TChilkatAsn.Create(Self);
success := asn.LoadEncoded(strBase64,'base64');
if (success <> 1) then
begin
Memo1.Lines.Add(asn.LastErrorText);
Exit;
end;
// Convert the ASN.1 to XML.
xml := TChilkatXml.Create(Self);
success := xml.LoadXml(asn.AsnToXml());
Memo1.Lines.Add(xml.GetXml());
Memo1.Lines.Add('----');
strModulusHex := xml.GetChildContent('bits');
Memo1.Lines.Add('strModulusHex = ' + strModulusHex);
Memo1.Lines.Add('----');
// We need the modulus as base64.
bd := TChilkatBinData.Create(Self);
bd.AppendEncoded(strModulusHex,'hex');
modulus64 := bd.GetEncoded('base64');
Memo1.Lines.Add('modulus64 = ' + modulus64);
Memo1.Lines.Add('----');
// Build the XML for the public key.
xmlPubKey := TChilkatXml.Create(Self);
xmlPubKey.Tag := 'RSAPublicKey';
xmlPubKey.UpdateChildContent('Modulus',modulus64);
// The RSA exponent will always be decimal 65537 (base64 = AQAB)
xmlPubKey.UpdateChildContent('Exponent','AQAB');
Memo1.Lines.Add('RSA public key as XML:');
Memo1.Lines.Add(xmlPubKey.GetXml());
Memo1.Lines.Add('----');
// Load the XML into a Chilkat public key object.
pubkey := TPublicKey.Create(Self);
success := pubkey.LoadFromString(xmlPubKey.GetXml());
if (success <> 1) then
begin
Memo1.Lines.Add(pubkey.LastErrorText);
Exit;
end;
// Show the public key as PEM.
preferPkcs1 := 1;
Memo1.Lines.Add(pubkey.GetPem(preferPkcs1));
end;