Sample code for 30+ languages & platforms
Xbase++

Create JWS using the Flattened JSON Serialization Format

See more JSON Web Signatures (JWS) Examples

Creates a JSON Web Signature (JWS) containing 1 signature and output using the flattened JSON serialization format.

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

Chilkat Xbase++ Downloads

Xbase++
LOCAL nSuccess
LOCAL oSbEccJwk
LOCAL oEccKey
LOCAL oJwsProtHdr
LOCAL oJwsUnprotHdr
LOCAL oJws
LOCAL nBIncludeBom
LOCAL cPayloadStr
LOCAL cJwsStr
LOCAL oJson

nSuccess := 0

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

//  Note: This example requires Chilkat v9.5.0.66 or greater.

//  The JWS to be created will contain one signature using an ECDSA key.

oSbEccJwk := CreateObject("Chilkat.StringBuilder")
oSbEccJwk:Append('{"kty":"EC",')
oSbEccJwk:Append('"crv":"P-256",')
oSbEccJwk:Append('"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",')
oSbEccJwk:Append('"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",')
oSbEccJwk:Append('"d":"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI"')
oSbEccJwk:Append("}")

oEccKey := CreateObject("Chilkat.PrivateKey")
//  Note: This example loads the ECDSA key from JWK format.  Any format can be loaded
//  into the private key object. (See the online reference documentation..)
nSuccess := oEccKey:LoadJwk(oSbEccJwk:GetAsString())
IF (nSuccess != 1)
    ? oEccKey:LastErrorText
    oSbEccJwk:destroy()
    oEccKey:destroy()
    RETURN
ENDIF

//  ---------------------------------------------------
//  Prepare both a protected and unprotected header.

oJwsProtHdr := CreateObject("Chilkat.JsonObject")
oJwsProtHdr:AppendString("alg", "ES256")

oJwsUnprotHdr := CreateObject("Chilkat.JsonObject")
oJwsUnprotHdr:AppendString("kid", "myEcKey")

//  ---------------------------------------------------
oJws := CreateObject("Chilkat.Jws")

oJws:SetProtectedHeader(0, oJwsProtHdr)
oJws:SetUnprotectedHeader(0, oJwsUnprotHdr)

oJws:SetPrivateKey(0, oEccKey)

nBIncludeBom := 0
cPayloadStr := "In our village, folks say God crumbles up the old moon into stars."
oJws:SetPayload(cPayloadStr, "utf-8", nBIncludeBom)

//  ---------------------------------------------------
//  Create the JWS.
//  Indicate we prefer the non-compact, flattened serialization.
oJws:PreferCompact := 0
oJws:PreferFlattened := 1

cJwsStr := oJws:CreateJws()
IF (oJws:LastMethodSuccess != 1)
    ? oJws:LastErrorText
    oSbEccJwk:destroy()
    oEccKey:destroy()
    oJwsProtHdr:destroy()
    oJwsUnprotHdr:destroy()
    oJws:destroy()
    RETURN
ENDIF

//  The jwsStr is contains the flattened JSON in the smallest possible size, which is a single line.
//  To get in human-readable format, load into a Chilkat JSON object and emit..
oJson := CreateObject("Chilkat.JsonObject")
oJson:Load(cJwsStr)
oJson:EmitCompact := 0
? oJson:Emit()

//  Sample output:

//  { 
//    "payload": "SW4gb3VyIHZpbGxhZ2UsIGZvbGtzIHNheSBHb2QgY3J1bWJsZXMgdXAgdGhlIG9sZCBtb29uIGludG8gc3RhcnMu",
//    "protected": "eyJhbGciOiJFUzI1NiJ9",
//    "header": { 
//      "kid": "myEcKey"
//    },
//    "signature": "b7V2UpDPytr-kMnM_YjiQ3E0J2ucOI9LYA7mt57vccrK1rb84j9areqgQcJwOA00aWGoz4hf6sMTBfobdcJEGg"
//  }

oSbEccJwk:destroy()
oEccKey:destroy()
oJwsProtHdr:destroy()
oJwsUnprotHdr:destroy()
oJws:destroy()
oJson:destroy()