Visual FoxPro
Visual FoxPro
Create ECSDA Signature using Raw r and s Format (not ASN.1)
See more ECC Examples
Demonstrates how to create an ECDSA signature using the raw r/s format.ECDSA signatures have two equal sized parts, r and s. There are two common formats for encoding the signature:
(a) Concatenating the raw byte array of r and s
(b) Encoding both into a structured ASN.1 / DER sequence.
This example demonstrates how to create a signature that is a byte array of r and s concatenated.
Note: This example requires Chilkat v9.5.0.97 or greater.
Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loSb
LOCAL lcHash
LOCAL loPrivKey
LOCAL loPrng
LOCAL loEcdsa
LOCAL lcEcdsaSigBase64
LOCAL loPubKey
LOCAL lnResult
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
* To create an ECDSA signature, the data first needs to be hashed. Then the hash
* is signed.
loSb = CreateObject('Chilkat.StringBuilder')
loSb.Append("The quick brown fox jumps over the lazy dog")
lcHash = loSb.GetHash("sha256","base64","utf-8")
* Load the ECDSA key to be used for signing.
loPrivKey = CreateObject('Chilkat.PrivateKey')
lnSuccess = loPrivKey.LoadPemFile("qa_data/ecc/secp256r1-key-pkcs8.pem")
IF (lnSuccess <> 1) THEN
? loPrivKey.LastErrorText
RELEASE loSb
RELEASE loPrivKey
CANCEL
ENDIF
loPrng = CreateObject('Chilkat.Prng')
loEcdsa = CreateObject('Chilkat.Ecc')
* Produce a signature that is not ASN.1, but is instead the concatenation
* of the raw r and s signature parts.
* This feature was added in Chilkat v9.5.0.97
loEcdsa.AsnFormat = 0
lcEcdsaSigBase64 = loEcdsa.SignHashENC(lcHash,"base64",loPrivKey,loPrng)
IF (loEcdsa.LastMethodSuccess <> 1) THEN
? loEcdsa.LastErrorText
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
CANCEL
ENDIF
? "ECDSA signature = " + lcEcdsaSigBase64
* -----------------------------------------------------------
* Now let's verify the signature using the public key.
loPubKey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubKey.LoadFromFile("qa_data/ecc/secp256r1-pubkey.pem")
IF (lnSuccess <> 1) THEN
? loPubKey.LastErrorText
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
RELEASE loPubKey
CANCEL
ENDIF
* Note: When verifying, Chilkat will auto-detect the format for both kinds of ECDSA signatures (ASN.1 or binary r+s)
lnResult = loEcdsa.VerifyHashENC(lcHash,lcEcdsaSigBase64,"base64",loPubKey)
IF (lnResult = 1) THEN
? "Signature is valid."
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
RELEASE loPubKey
CANCEL
ENDIF
IF (lnResult = 0) THEN
? "Signature is invalid."
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
RELEASE loPubKey
CANCEL
ENDIF
IF (lnResult < 0) THEN
? loEcdsa.LastErrorText
? "The VerifyHashENC method call failed."
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
RELEASE loPubKey
CANCEL
ENDIF
RELEASE loSb
RELEASE loPrivKey
RELEASE loPrng
RELEASE loEcdsa
RELEASE loPubKey