DataFlex
DataFlex
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 DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSbEccJwk
Variant vEccKey
Handle hoEccKey
ProtHdr Handle hoJwsProtHdr
Variant vJwsUnprotHdr
Handle hoJwsUnprotHdr
Handle hoJws
Boolean iBIncludeBom
String sPayloadStr
String sJwsStr
Handle hoJson
String sTemp1
Boolean bTemp1
Move False To iSuccess
// 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.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbEccJwk
If (Not(IsComObjectCreated(hoSbEccJwk))) Begin
Send CreateComObject of hoSbEccJwk
End
Get ComAppend Of hoSbEccJwk '{"kty":"EC",' To iSuccess
Get ComAppend Of hoSbEccJwk '"crv":"P-256",' To iSuccess
Get ComAppend Of hoSbEccJwk '"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",' To iSuccess
Get ComAppend Of hoSbEccJwk '"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",' To iSuccess
Get ComAppend Of hoSbEccJwk '"d":"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI"' To iSuccess
Get ComAppend Of hoSbEccJwk "}" To iSuccess
Get Create (RefClass(cComChilkatPrivateKey)) To hoEccKey
If (Not(IsComObjectCreated(hoEccKey))) Begin
Send CreateComObject of hoEccKey
End
// 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..)
Get ComGetAsString Of hoSbEccJwk To sTemp1
Get ComLoadJwk Of hoEccKey sTemp1 To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoEccKey To sTemp1
Showln sTemp1
Procedure_Return
End
// ---------------------------------------------------
// Prepare both a protected and unprotected header.
Get Create (RefClass(cComChilkatJsonObject)) To hoJwsProtHdr
If (Not(IsComObjectCreated(hoJwsProtHdr))) Begin
Send CreateComObject of hoJwsProtHdr
End
Get ComAppendString Of hoJwsProtHdr "alg" "ES256" To iSuccess
Get Create (RefClass(cComChilkatJsonObject)) To hoJwsUnprotHdr
If (Not(IsComObjectCreated(hoJwsUnprotHdr))) Begin
Send CreateComObject of hoJwsUnprotHdr
End
Get ComAppendString Of hoJwsUnprotHdr "kid" "myEcKey" To iSuccess
// ---------------------------------------------------
Get Create (RefClass(cComChilkatJws)) To hoJws
If (Not(IsComObjectCreated(hoJws))) Begin
Send CreateComObject of hoJws
End
Get pvComObject of hoJwsProtHdr to vJwsProtHdr
Get ComSetProtectedHeader Of hoJws 0 vJwsProtHdr To iSuccess
Get pvComObject of hoJwsUnprotHdr to vJwsUnprotHdr
Get ComSetUnprotectedHeader Of hoJws 0 vJwsUnprotHdr To iSuccess
Get pvComObject of hoEccKey to vEccKey
Get ComSetPrivateKey Of hoJws 0 vEccKey To iSuccess
Move False To iBIncludeBom
Move "In our village, folks say God crumbles up the old moon into stars." To sPayloadStr
Get ComSetPayload Of hoJws sPayloadStr "utf-8" iBIncludeBom To iSuccess
// ---------------------------------------------------
// Create the JWS.
// Indicate we prefer the non-compact, flattened serialization.
Set ComPreferCompact Of hoJws To False
Set ComPreferFlattened Of hoJws To True
Get ComCreateJws Of hoJws To sJwsStr
Get ComLastMethodSuccess Of hoJws To bTemp1
If (bTemp1 <> True) Begin
Get ComLastErrorText Of hoJws To sTemp1
Showln sTemp1
Procedure_Return
End
// 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..
Get Create (RefClass(cComChilkatJsonObject)) To hoJson
If (Not(IsComObjectCreated(hoJson))) Begin
Send CreateComObject of hoJson
End
Get ComLoad Of hoJson sJwsStr To iSuccess
Set ComEmitCompact Of hoJson To False
Get ComEmit Of hoJson To sTemp1
Showln sTemp1
// Sample output:
// {
// "payload": "SW4gb3VyIHZpbGxhZ2UsIGZvbGtzIHNheSBHb2QgY3J1bWJsZXMgdXAgdGhlIG9sZCBtb29uIGludG8gc3RhcnMu",
// "protected": "eyJhbGciOiJFUzI1NiJ9",
// "header": {
// "kid": "myEcKey"
// },
// "signature": "b7V2UpDPytr-kMnM_YjiQ3E0J2ucOI9LYA7mt57vccrK1rb84j9areqgQcJwOA00aWGoz4hf6sMTBfobdcJEGg"
// }
End_Procedure