Sample code for 30+ languages & platforms
Lianja

Verfies an RSA Signature

See more Apple Keychain Examples

Verifies an RSA signature against the original data.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

// The following data was signed by the following example:
// RSA Sign using a Private Key on a USB Token or Smartcard
loBd = createobject("CkBinData")

for i = 0 to 100
    loBd.AppendEncoded("000102030405060708090A0B0C0D0E0F","hex")
next

// Load the signature
loBdSig = createobject("CkBinData")
llSuccess = loBdSig.LoadFile("rsaSignatures/test1.sig")
if (llSuccess = .F.) then
    ? "Failed to load the RSA signature"
    release loBd
    release loBdSig
    return
endif

// Get the public key to be used for signature verification.
loPubKey = createobject("CkPublicKey")
llSuccess = loPubKey.LoadFromFile("rsaKeys/chilkat-rsa-2048.pem")
if (llSuccess = .F.) then
    ? loPubKey.LastErrorText
    release loBd
    release loBdSig
    release loPubKey
    return
endif

loRsa = createobject("CkRsa")
llSuccess = loRsa.UsePublicKey(loPubKey)
if (llSuccess = .F.) then
    ? loRsa.LastErrorText
    release loBd
    release loBdSig
    release loPubKey
    release loRsa
    return
endif

// 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.
llSuccess = loRsa.VerifyBd(loBd,"sha256",loBdSig)

if (llSuccess = .F.) then
    ? loRsa.LastErrorText
    ? "Signature invalid."
else
    ? "Signature valid."
endif



release loBd
release loBdSig
release loPubKey
release loRsa