Sample code for 30+ languages & platforms
Xbase++

Create JWT Using Ed25519 Private Key (EdDSA)

See more JSON Web Token (JWT) Examples

Demonstrates how to create a JWT using an Ed25519 private key. If the private key is Ed25519, which is an EdDSA algorithm, the JOSE header's "alg" member should be set to "EdDSA".

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

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oPrivKey
LOCAL oJwt
LOCAL oJose
LOCAL oClaims
LOCAL nCurDateTime
LOCAL cToken

nSuccess := 0

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

//  Demonstrates how to create a JWT using an Ed25519 private key.

oPrivKey := CreateObject("Chilkat.PrivateKey")

//  Load an Ed25519 (EdDSA) private key from a PEM file.
nSuccess := oPrivKey:LoadPemFile("qa_data/eddsa/ed25519.pem")
IF (nSuccess != 1)
    ? oPrivKey:LastErrorText
    oPrivKey:destroy()
    RETURN
ENDIF

oJwt := CreateObject("Chilkat.Jwt")

//  Build the JOSE header
oJose := CreateObject("Chilkat.JsonObject")

//  -----------------------------------------------------------------
//  Note: This example requires Chilkat v9.5.0.95 or greater.
//  -----------------------------------------------------------------
nSuccess := oJose:AppendString("alg", "EdDSA")
nSuccess := oJose:AppendString("typ", "JWT")

//  Now build the JWT claims (also known as the payload)
oClaims := CreateObject("Chilkat.JsonObject")
nSuccess := oClaims:AppendString("iss", "http://example.org")
nSuccess := oClaims:AppendString("sub", "John")
nSuccess := oClaims:AppendString("aud", "http://example.com")

//  (optional) Set the timestamp of when the JWT was created to now.
nCurDateTime := oJwt:GenNumericDate(0)
nSuccess := oClaims:AddIntAt(-1, "iat", nCurDateTime)

//  (optional)  Set the "not process before" timestamp to now.
nSuccess := oClaims:AddIntAt(-1, "nbf", nCurDateTime)

//  (optional)  Set the timestamp defining an expiration time (end time) for the token
//  to be now + 1 hour (3600 seconds)
nSuccess := oClaims:AddIntAt(-1, "exp", nCurDateTime + 3600)

//  Produce the smallest possible JWT:
oJwt:AutoCompact := 1

//  Create the JWT token.
cToken := oJwt:CreateJwtPk(oJose:Emit(), oClaims:Emit(), oPrivKey)

? cToken

//  Example output:
//  eyJhbGciOiJFZERTQSIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwOi8vZXhhbXBsZS5vcmciLCJzdWIiOiJKb2huIiwiYXVkIjoiaHR0cDovL2V4YW1wbGUuY29tIiwiaWF0IjoxNjg3OTcwNjgyLCJuYmYiOjE2ODc5NzA2ODIsImV4cCI6MTY4Nzk3NDI4Mn0.eyfrDJfuWJSJVJPfAUYb_p_c-LF_YULHGRaZx82MLLjMLCCFEEGckp8icuayf5bLW9ah20LzYYt0JgOBIB0RDg

oPrivKey:destroy()
oJwt:destroy()
oJose:destroy()
oClaims:destroy()