PowerBuilder
PowerBuilder
ECDSA Sign and Verify Data using Different Hash Algorithms
See more ECC Examples
Demonstrates how to create ECDSA signatures on data using different hash algorithms.Note: This example requires Chilkat v9.5.0.85 or greater because the SignBd and VerifyBd methods were added in v9.5.0.85.
Chilkat PowerBuilder Downloads
integer li_rc
integer li_Success
oleobject loo_PrivKey
oleobject loo_Bd
oleobject loo_Ecdsa
oleobject loo_Prng
string ls_Sig
oleobject loo_PubKey
oleobject loo_Ecc2
integer li_Result
li_Success = 0
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First load an ECDSA private key to be used for signing.
loo_PrivKey = create oleobject
li_rc = loo_PrivKey.ConnectToNewObject("Chilkat.PrivateKey")
if li_rc < 0 then
destroy loo_PrivKey
MessageBox("Error","Connecting to COM object failed")
return
end if
li_Success = loo_PrivKey.LoadEncryptedPemFile("qa_data/ecc/secp256r1-key-pkcs8-secret.pem","secret")
if li_Success = 0 then
Write-Debug loo_PrivKey.LastErrorText
destroy loo_PrivKey
return
end if
// Load some data to be signed.
loo_Bd = create oleobject
li_rc = loo_Bd.ConnectToNewObject("Chilkat.BinData")
li_Success = loo_Bd.LoadFile("qa_data/hamlet.xml")
if li_Success = 0 then
Write-Debug "Failed to load file to be hashed."
destroy loo_PrivKey
destroy loo_Bd
return
end if
loo_Ecdsa = create oleobject
li_rc = loo_Ecdsa.ConnectToNewObject("Chilkat.Ecc")
loo_Prng = create oleobject
li_rc = loo_Prng.ConnectToNewObject("Chilkat.Prng")
// Sign the sha256 hash of the data. Return the ECDSA signature in the base64 encoding.
Write-Debug "ECDSA signing the sha256 hash of the data..."
ls_Sig = loo_Ecdsa.SignBd(loo_Bd,"sha256","base64",loo_PrivKey,loo_Prng)
Write-Debug "sig = " + ls_Sig
// Verify the signature against the original data.
// (We must use the same hash algorithm that was used when signing.)
// Load the public key that corresponds to the private key used for signing.
loo_PubKey = create oleobject
li_rc = loo_PubKey.ConnectToNewObject("Chilkat.PublicKey")
li_Success = loo_PubKey.LoadFromFile("qa_data/ecc/secp256r1-pub.pem")
if li_Success = 0 then
Write-Debug loo_PubKey.LastErrorText
destroy loo_PrivKey
destroy loo_Bd
destroy loo_Ecdsa
destroy loo_Prng
destroy loo_PubKey
return
end if
loo_Ecc2 = create oleobject
li_rc = loo_Ecc2.ConnectToNewObject("Chilkat.Ecc")
li_Result = loo_Ecc2.VerifyBd(loo_Bd,"sha256",ls_Sig,"base64",loo_PubKey)
if li_Result <> 1 then
Write-Debug loo_Ecc2.LastErrorText
destroy loo_PrivKey
destroy loo_Bd
destroy loo_Ecdsa
destroy loo_Prng
destroy loo_PubKey
destroy loo_Ecc2
return
end if
Write-Debug "Verified!"
// ----------------------------------------------------------------------------------------
// Let's do the same thing, but with sha384 hashing...
Write-Debug "--------------------------------------------"
Write-Debug "ECDSA signing the sha384 hash of the data..."
ls_Sig = loo_Ecdsa.SignBd(loo_Bd,"sha384","base64",loo_PrivKey,loo_Prng)
Write-Debug "sig = " + ls_Sig
li_Result = loo_Ecc2.VerifyBd(loo_Bd,"sha384",ls_Sig,"base64",loo_PubKey)
if li_Result <> 1 then
Write-Debug loo_Ecc2.LastErrorText
destroy loo_PrivKey
destroy loo_Bd
destroy loo_Ecdsa
destroy loo_Prng
destroy loo_PubKey
destroy loo_Ecc2
return
end if
Write-Debug "Verified!"
destroy loo_PrivKey
destroy loo_Bd
destroy loo_Ecdsa
destroy loo_Prng
destroy loo_PubKey
destroy loo_Ecc2