Sample code for 30+ languages & platforms
Visual FoxPro

Ed25519ph Sign and Verify

See more Ed25519 Examples

Demonstrates how to create an Ed25519ph signature, and then to verify it.

Note: This example requires Chilkat v9.5.0.91 or greater.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcPrivKeyHex
LOCAL lcPubKeyHex
LOCAL loPrivKey
LOCAL loBd
LOCAL loEddsa
LOCAL lcHexSig
LOCAL loPubKey
LOCAL lnBVerified

lnSuccess = 0

* This example assumes the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.

* Use the following test vector from https://www.rfc-editor.org/rfc/rfc8032#page-30

*    -----TEST abc
* 
*    ALGORITHM:
*    Ed25519ph
* 
*    SECRET KEY:
*    833fe62409237b9d62ec77587520911e
*    9a759cec1d19755b7da901b96dca3d42
* 
*    PUBLIC KEY:
*    ec172b93ad5e563bf4932c70e1245034
*    c35467ef2efd4d64ebf819683467e2bf
* 
*    MESSAGE (length 3 bytes):
*    616263
* 
*    SIGNATURE:
*    98a70222f0b8121aa9d30f813d683f80
*    9e462b469c7ff87639499bb94e6dae41
*    31f85042463c2a355a2003d062adf5aa
*    a10b8c61e636062aaad11c2a26083406

lcPrivKeyHex = "833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42"
lcPubKeyHex = "ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf"

loPrivKey = CreateObject('Chilkat.PrivateKey')
lnSuccess = loPrivKey.LoadEd25519(lcPrivKeyHex,lcPubKeyHex)
IF (lnSuccess = 0) THEN
    ? loPrivKey.LastErrorText
    RELEASE loPrivKey
    CANCEL
ENDIF

* The data to be signed...
loBd = CreateObject('Chilkat.BinData')
loBd.AppendEncoded("616263","hex")

loEddsa = CreateObject('Chilkat.EdDSA')
* Indicate we want the Ed25519ph instance.
loEddsa.Algorithm = "Ed25519ph"

lcHexSig = loEddsa.SignBdENC(loBd,"hexlower",loPrivKey)

? "signature = " + lcHexSig

* The expected output is: 98a70222f0b8121aa9d30f813d683f80....

* Verify the signature..
loPubKey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubKey.LoadEd25519(lcPubKeyHex)
IF (lnSuccess = 0) THEN
    ? loPubKey.LastErrorText
    RELEASE loPrivKey
    RELEASE loBd
    RELEASE loEddsa
    RELEASE loPubKey
    CANCEL
ENDIF

lnBVerified = loEddsa.VerifyBdENC(loBd,lcHexSig,"hexlower",loPubKey)
IF (lnBVerified = 0) THEN
    ? loEddsa.LastErrorText
    ? "Failed to verify the signature."
    RELEASE loPrivKey
    RELEASE loBd
    RELEASE loEddsa
    RELEASE loPubKey
    CANCEL
ENDIF

? "The Ed25519ph signature is verified!"

RELEASE loPrivKey
RELEASE loBd
RELEASE loEddsa
RELEASE loPubKey