Sample code for 30+ languages & platforms
Delphi ActiveX Requires Chilkat v11.0.0+

Verfies an RSA Signature

See more Apple Keychain Examples

Verifies an RSA signature against the original data.

Chilkat Delphi ActiveX Downloads

Delphi ActiveX
var
success: Integer;
bd: TChilkatBinData;
i: Integer;
bdSig: TChilkatBinData;
pubKey: TPublicKey;
rsa: TChilkatRsa;

begin
success := 0;

//  The following data was signed by the following example:
//  RSA Sign using a Private Key on a USB Token or Smartcard
bd := TChilkatBinData.Create(Self);

for i := 0 to 100 do
  begin
    bd.AppendEncoded('000102030405060708090A0B0C0D0E0F','hex');
  end;

//  Load the signature
bdSig := TChilkatBinData.Create(Self);
success := bdSig.LoadFile('rsaSignatures/test1.sig');
if (success = 0) then
  begin
    Memo1.Lines.Add('Failed to load the RSA signature');
    Exit;
  end;

//  Get the public key to be used for signature verification.
pubKey := TPublicKey.Create(Self);
success := pubKey.LoadFromFile('rsaKeys/chilkat-rsa-2048.pem');
if (success = 0) then
  begin
    Memo1.Lines.Add(pubKey.LastErrorText);
    Exit;
  end;

rsa := TChilkatRsa.Create(Self);
success := rsa.UsePublicKey(pubKey.ControlInterface);
if (success = 0) then
  begin
    Memo1.Lines.Add(rsa.LastErrorText);
    Exit;
  end;

//  Verify the hash of the data against the signature.
//  We pass in the original data.  Internally, the hash is generated
//  and used to validate the signature.
//  Validating the RSA signature means two things:  
//  (1) the original data is exactly what was signed, and 
//  (2) it was signed by the owner of the RSA private key.
success := rsa.VerifyBd(bd.ControlInterface,'sha256',bdSig.ControlInterface);

if (success = 0) then
  begin
    Memo1.Lines.Add(rsa.LastErrorText);
    Memo1.Lines.Add('Signature invalid.');
  end
else
  begin
    Memo1.Lines.Add('Signature valid.');
  end;