Xbase++
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
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()