PureBasic
PureBasic
Verify the RSA Signature of a SHA256 Hash
See more RSA Examples
Demonstrates how to verify an RSA signature of a SHA256 hash.Chilkat PureBasic Downloads
IncludeFile "CkBinData.pb"
IncludeFile "CkPublicKey.pb"
IncludeFile "CkRsa.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; Let's say you have a file containing the 32-bytes of a SHA256 hash,
; and a file that is an RSA signature of those 32 bytes.
; Here's how you verify using the RSA public key found in a PEM.
pubKey.i = CkPublicKey::ckCreate()
If pubKey.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkPublicKey::ckLoadFromFile(pubKey,"rsaPubKey.pem")
If success = 0
Debug CkPublicKey::ckLastErrorText(pubKey)
CkPublicKey::ckDispose(pubKey)
ProcedureReturn
EndIf
rsa.i = CkRsa::ckCreate()
If rsa.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Get the public key.
success = CkRsa::ckUsePublicKey(rsa,pubKey)
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
ProcedureReturn
EndIf
; Get the 32-byte SHA256 hash.
bdHash.i = CkBinData::ckCreate()
If bdHash.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bdHash,"myHash.sha256")
If success = 0
Debug "Failed to load SHA256 hash."
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
CkBinData::ckDispose(bdHash)
ProcedureReturn
EndIf
; Get the RSA signature to be validated.
bdSig.i = CkBinData::ckCreate()
If bdSig.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkBinData::ckLoadFile(bdSig,"mySig.sig")
If success = 0
Debug "Failed to load RSA signature."
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
CkBinData::ckDispose(bdHash)
CkBinData::ckDispose(bdSig)
ProcedureReturn
EndIf
; Verify the signature against the SHA256 hash.
enc.s = "base64"
CkRsa::setCkEncodingMode(rsa, enc)
success = CkRsa::ckVerifyHashENC(rsa,CkBinData::ckGetEncoded(bdHash,enc),"sha256",CkBinData::ckGetEncoded(bdSig,enc))
If success = 0
Debug CkRsa::ckLastErrorText(rsa)
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
CkBinData::ckDispose(bdHash)
CkBinData::ckDispose(bdSig)
ProcedureReturn
EndIf
Debug "Signature validated."
CkPublicKey::ckDispose(pubKey)
CkRsa::ckDispose(rsa)
CkBinData::ckDispose(bdHash)
CkBinData::ckDispose(bdSig)
ProcedureReturn
EndProcedure