PureBasic
PureBasic
Verfies an RSA Signature
See more Apple Keychain Examples
Verifies an RSA signature against the original data.Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkRsa.pb"
IncludeFile "CkPublicKey.pb"
Procedure ChilkatExample()
success.i = 0
; The following data was signed by the following example:
; RSA Sign using a Private Key on a USB Token or Smartcard
bd.i = CkBinData::ckCreate()
If bd.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
i.i
For i = 0 To 100
CkBinData::ckAppendEncoded(bd,"000102030405060708090A0B0C0D0E0F","hex")
Next
; Load the signature
bdSig.i = CkBinData::ckCreate()
If bdSig.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bdSig,"rsaSignatures/test1.sig")
If success = 0
Debug "Failed to load the RSA signature"
CkBinData::ckDispose(bd)
CkBinData::ckDispose(bdSig)
ProcedureReturn
EndIf
; Get the public key to be used for signature verification.
pubKey.i = CkPublicKey::ckCreate()
If pubKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPublicKey::ckLoadFromFile(pubKey,"rsaKeys/chilkat-rsa-2048.pem")
If success = 0
Debug CkPublicKey::ckLastErrorText(pubKey)
CkBinData::ckDispose(bd)
CkBinData::ckDispose(bdSig)
CkPublicKey::ckDispose(pubKey)
ProcedureReturn
EndIf
rsa.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkRsa::ckUsePublicKey(rsa,pubKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkBinData::ckDispose(bd)
CkBinData::ckDispose(bdSig)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
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.
success = CkRsa::ckVerifyBd(rsa,bd,"sha256",bdSig)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
Debug "Signature invalid."
Else
Debug "Signature valid."
EndIf
CkBinData::ckDispose(bd)
CkBinData::ckDispose(bdSig)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndProcedure