Sample code for 30+ languages & platforms
Visual FoxPro

Verify JWT with EdDSA / Ed25519 Signature

See more JSON Web Token (JWT) Examples

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

Demonstrates how to verify a JWT that was signed using an Ed25519 private key.

This example verifies the EdDSA signature. It also does the following:

  • Checks to see if the time constraints ("nbf" and "exp") are valid.
  • Recovers the original JOSE header.
  • Recovers the original data.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL lcJsonPubKey
LOCAL loPubKey
LOCAL loJwt
LOCAL lcToken
LOCAL lnSigVerified
LOCAL lnLeeway
LOCAL lnBTimeValid
LOCAL lcPayload
LOCAL lcJoseHeader

lnSuccess = 0

* Demonstrates how to verify a JWT with an EdDSA/Ed25519 Signature
* *** Requires Chilkat v9.5.0.84 or greater.

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

* Use this Ed25519 public key for verification

lcJsonPubKey = '{"kty": "OKP","alg": "EdDSA","crv": "Ed25519","x": "11qYAYKxCrfVS_7TyWQHOg7hcvPapiMlrwIaaPcHURo"}'

loPubKey = CreateObject('Chilkat.PublicKey')
lnSuccess = loPubKey.LoadFromString(lcJsonPubKey)
IF (lnSuccess = 0) THEN
    ? loPubKey.LastErrorText
    RELEASE loPubKey
    CANCEL
ENDIF

loJwt = CreateObject('Chilkat.Jwt')
lcToken = "eyJhbGciOiJFZERTQSJ9.RXhhbXBsZSBvZiBFZDI1NTE5IHNpZ25pbmc.hgyY0il_MGCjP0JzlnLWG1PPOt7-09PGcvMg3AIbQR6dWbhijcNR4ki4iylGjg5BhVsPt9g7sVvpAr_MuM0KAg"

* First verify the signature.
lnSigVerified = loJwt.VerifyJwtPk(lcToken,loPubKey)
? "verified: " + STR(lnSigVerified)

IF (lnSigVerified = 0) THEN
    ? loJwt.LastErrorText
    RELEASE loPubKey
    RELEASE loJwt
    CANCEL
ENDIF

* Let's see if the time constraints, if any, are valid.
* The above JWT was created on the afternoon of 16-May-2016, with an expiration of 1 hour.
* If the current system time is before the "nbf" time, or after the "exp" time,
* then IsTimeValid will return false/0.
* Also, we'll allow a leeway of 60 seconds to account for any clock skew.
* Note: If the token has no "nbf" or "exp" claim fields, then IsTimeValid is always true.
lnLeeway = 60
lnBTimeValid = loJwt.IsTimeValid(lcToken,lnLeeway)
? "time constraints valid: " + STR(lnBTimeValid)

* Recover the original data (the payload).
lcPayload = loJwt.GetPayload(lcToken)
? lcPayload

* Recover the original JOSE header in the same way:
lcJoseHeader = loJwt.GetHeader(lcToken)
? lcJoseHeader

RELEASE loPubKey
RELEASE loJwt