DataFlex
DataFlex
Validate a JWS Using ECDSA P-521 SHA-512
See more JSON Web Signatures (JWS) Examples
Validates a JSON Web Signature (JWS) that uses ECDSA P-521 SHA-512Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoSbPubKey
Variant vPubKey
Handle hoPubKey
Handle hoJws
Integer iSignatureIndex
Variant vSbJws
Handle hoSbJws
Integer v
Variant vJoseHeader
Handle hoJoseHeader
String sTemp1
Move False To iSuccess
// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// This example takes a JSON signature in compact serialization format,
// and uses an ECDSA public key to validate and recover the protected header and payload.
// We only need a public key for signature validation. This is the ECDSA public key
// that is used:
// {"kty":"EC",
// "crv":"P-521",
// "x":"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk",
// "y":"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2"
// }
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbPubKey
If (Not(IsComObjectCreated(hoSbPubKey))) Begin
Send CreateComObject of hoSbPubKey
End
Get ComAppend Of hoSbPubKey '{"kty":"EC",' To iSuccess
Get ComAppend Of hoSbPubKey '"crv":"P-521",' To iSuccess
Get ComAppend Of hoSbPubKey '"x":"AekpBQ8ST8a8VcfVOTNl353vSrDCLLJXmPk06wTjxrrjcBpXp5EOnYG_NjFZ6OvLFV1jSfS9tsz4qUxcWceqwQGk",' To iSuccess
Get ComAppend Of hoSbPubKey '"y":"ADSmRA43Z1DSNx_RvcLI87cdL07l6jQyyBXMoxVg_l2Th-x3S1WDhjDly79ajL4Kkd0AZMaZmh9ubmf63e3kyMj2"' To iSuccess
Get ComAppend Of hoSbPubKey "}" To iSuccess
Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey
If (Not(IsComObjectCreated(hoPubKey))) Begin
Send CreateComObject of hoPubKey
End
Get ComGetAsString Of hoSbPubKey To sTemp1
Get ComLoadFromString Of hoPubKey sTemp1 To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoPubKey To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatJws)) To hoJws
If (Not(IsComObjectCreated(hoJws))) Begin
Send CreateComObject of hoJws
End
// Set the ECC public key:
Move 0 To iSignatureIndex
Get pvComObject of hoPubKey to vPubKey
Get ComSetPublicKey Of hoJws iSignatureIndex vPubKey To iSuccess
// Load the JWS.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJws
If (Not(IsComObjectCreated(hoSbJws))) Begin
Send CreateComObject of hoSbJws
End
Get ComAppend Of hoSbJws "eyJhbGciOiJFUzUxMiJ9" To iSuccess
Get ComAppend Of hoSbJws "." To iSuccess
Get ComAppend Of hoSbJws "UGF5bG9hZA" To iSuccess
Get ComAppend Of hoSbJws "." To iSuccess
Get ComAppend Of hoSbJws "AdwMgeerwtHoh-l192l60hp9wAHZFVJbLfD_UxMi70cwnZOYaRI1bKPWROc-mZZq" To iSuccess
Get ComAppend Of hoSbJws "wqT2SI-KGDKB34XO0aw_7XdtAG8GaSwFKdCAPZgoXD2YBJZCPEX3xKpRwcdOO8Kp" To iSuccess
Get ComAppend Of hoSbJws "EHwJjyqOgzDO7iKvU8vcnwNrmxYbSW9ERBXukOXolLzeO_Jn" To iSuccess
Get pvComObject of hoSbJws to vSbJws
Get ComLoadJwsSb Of hoJws vSbJws To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoJws To sTemp1
Showln sTemp1
Procedure_Return
End
// Validate the 1st (and only) signature at index 0..
Get ComValidate Of hoJws iSignatureIndex To v
If (v < 0) Begin
// Perhaps Chilkat was not unlocked or the trial expired..
Showln "Method call failed for some other reason."
Get ComLastErrorText Of hoJws To sTemp1
Showln sTemp1
Procedure_Return
End
If (v = 0) Begin
Showln "Invalid signature. The ECC key was incorrect, the JWS was invalid, or both."
Procedure_Return
End
// If we get here, the signature was validated..
Showln "Signature validated."
Showln "--"
// Recover the original content:
Showln "Recovered content:"
Get ComGetPayload Of hoJws "utf-8" To sTemp1
Showln sTemp1
Showln "--"
// Examine the protected header:
Get Create (RefClass(cComChilkatJsonObject)) To hoJoseHeader
If (Not(IsComObjectCreated(hoJoseHeader))) Begin
Send CreateComObject of hoJoseHeader
End
Get pvComObject of hoJoseHeader to vJoseHeader
Get ComGetProtectedH Of hoJws iSignatureIndex vJoseHeader To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoJws To sTemp1
Showln sTemp1
Procedure_Return
End
Set ComEmitCompact Of hoJoseHeader To False
Showln "Protected (JOSE) header:"
Get ComEmit Of hoJoseHeader To sTemp1
Showln sTemp1
// Output:
// (the string "Payload" was the content that was signed.)
// Signature validated.
// --
// Recovered content:
// Payload
// --
// Protected (JOSE) header:
// {
// "alg": "ES512"
// }
End_Procedure