Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loSbEccJwk
LOCAL loEccKey
LOCAL loJwsProtHdr
LOCAL loJwsUnprotHdr
LOCAL loJws
LOCAL lnBIncludeBom
LOCAL lcPayloadStr
LOCAL lcJwsStr
LOCAL loJson

lnSuccess = 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.

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

loEccKey = 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..)
lnSuccess = loEccKey.LoadJwk(loSbEccJwk.GetAsString())
IF (lnSuccess <> 1) THEN
    ? loEccKey.LastErrorText
    RELEASE loSbEccJwk
    RELEASE loEccKey
    CANCEL
ENDIF

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

loJwsProtHdr = CreateObject('Chilkat.JsonObject')
loJwsProtHdr.AppendString("alg","ES256")

loJwsUnprotHdr = CreateObject('Chilkat.JsonObject')
loJwsUnprotHdr.AppendString("kid","myEcKey")

* ---------------------------------------------------
loJws = CreateObject('Chilkat.Jws')

loJws.SetProtectedHeader(0,loJwsProtHdr)
loJws.SetUnprotectedHeader(0,loJwsUnprotHdr)

loJws.SetPrivateKey(0,loEccKey)

lnBIncludeBom = 0
lcPayloadStr = "In our village, folks say God crumbles up the old moon into stars."
loJws.SetPayload(lcPayloadStr,"utf-8",lnBIncludeBom)

* ---------------------------------------------------
* Create the JWS.
* Indicate we prefer the non-compact, flattened serialization.
loJws.PreferCompact = 0
loJws.PreferFlattened = 1

lcJwsStr = loJws.CreateJws()
IF (loJws.LastMethodSuccess <> 1) THEN
    ? loJws.LastErrorText
    RELEASE loSbEccJwk
    RELEASE loEccKey
    RELEASE loJwsProtHdr
    RELEASE loJwsUnprotHdr
    RELEASE loJws
    CANCEL
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..
loJson = CreateObject('Chilkat.JsonObject')
loJson.Load(lcJwsStr)
loJson.EmitCompact = 0
? loJson.Emit()

* Sample output:

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

RELEASE loSbEccJwk
RELEASE loEccKey
RELEASE loJwsProtHdr
RELEASE loJwsUnprotHdr
RELEASE loJws
RELEASE loJson