Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) Create a JWS Using ECDSA P-256 SHA-256Creates and validates a JSON Web Signature (JWS) that uses ECDSA P-256 SHA-256 Note: This example requires Chilkat v9.5.0.66 or greater.
Use ChilkatAx-win32.pkg Procedure Test Handle hoSbJwk Boolean iSuccess Variant vEccKey Handle hoEccKey Boolean iSuccess ProtHdr Handle hoJwsProtHdr Handle hoJws Integer iSignatureIndex Boolean iBIncludeBom String sPayloadStr String sJwsCompact Handle hoJws2 Variant vEccPubKey Handle hoEccPubKey Integer v Variant vJoseHeader Handle hoJoseHeader String sTemp1 Boolean bTemp1 // 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. // Use the following ECC key loaded from JWK format. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbJwk If (Not(IsComObjectCreated(hoSbJwk))) Begin Send CreateComObject of hoSbJwk End Get ComAppend Of hoSbJwk '{"kty":"EC",' To iSuccess Get ComAppend Of hoSbJwk '"crv":"P-256",' To iSuccess Get ComAppend Of hoSbJwk '"x":"f83OJ3D2xF1Bg8vub9tLe1gHMzV76e8Tus9uPHvRVEU",' To iSuccess Get ComAppend Of hoSbJwk '"y":"x_FEzRu9m36HLN_tue659LNpXW6pCyStikYjKIWI5a0",' To iSuccess Get ComAppend Of hoSbJwk '"d":"jpsQnnGQmL-YBIffH1136cspYG6-0iY7X1fCE9-E9LI"' To iSuccess Get ComAppend Of hoSbJwk "}" 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 hoSbJwk To sTemp1 Get ComLoadJwk Of hoEccKey sTemp1 To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoEccKey To sTemp1 Showln sTemp1 Procedure_Return End // Create the JWS Protected 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(cComChilkatJws)) To hoJws If (Not(IsComObjectCreated(hoJws))) Begin Send CreateComObject of hoJws End // Set the protected header: Move 0 To iSignatureIndex Get pvComObject of hoJwsProtHdr to vJwsProtHdr Get ComSetProtectedHeader Of hoJws iSignatureIndex vJwsProtHdr To iSuccess // Set the ECC key: Get pvComObject of hoEccKey to vEccKey Get ComSetPrivateKey Of hoJws iSignatureIndex vEccKey To iSuccess // Set the payload. 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 // By default, the compact serialization is used. Get ComCreateJws Of hoJws To sJwsCompact Get ComLastMethodSuccess Of hoJws To bTemp1 If (bTemp1 <> True) Begin Get ComLastErrorText Of hoJws To sTemp1 Showln sTemp1 Procedure_Return End Showln "JWS: " sJwsCompact // Note: ECC signatures use random values, so the output will be different each time a signature is produced. // sample output: // JWS: eyJhbGciOiJFUzI1NiJ9.SW4gb3VyIHZpbGxhZ2UsIGZvbGtzIHNheSBHb2QgY3J1bWJsZXMgdXAgdGhlIG9sZCBtb29uIGludG8gc3RhcnMu.J6EGTNkeuEjehHHBu0SOKzifm8r35wbx49A5964pxzB7gannyZZPMkK7vmlaPJ-K8Xmm8cZsQySAPC12Xd8avw // Now load the JWS, validate, and recover the original text. Get Create (RefClass(cComChilkatJws)) To hoJws2 If (Not(IsComObjectCreated(hoJws2))) Begin Send CreateComObject of hoJws2 End // Load the JWS. Get ComLoadJws Of hoJws2 sJwsCompact To iSuccess Get ComGetPublicKey Of hoEccKey To vEccPubKey If (IsComObject(vEccPubKey)) Begin Get Create (RefClass(cComChilkatPublicKey)) To hoEccPubKey Set pvComObject Of hoEccPubKey To vEccPubKey End // Set the ECC public key used for validation. Move 0 To iSignatureIndex Get ComSetPublicKey Of hoJws2 iSignatureIndex vEccPubKey To iSuccess Send Destroy of hoEccPubKey // Validate the 1st (and only) signature at index 0.. Get ComValidate Of hoJws2 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 hoJws2 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." // Recover the original content: Get ComGetPayload Of hoJws2 "utf-8" To sTemp1 Showln sTemp1 // Examine the protected header: Get ComGetProtectedHeader Of hoJws2 iSignatureIndex To vJoseHeader If (IsComObject(vJoseHeader)) Begin Get Create (RefClass(cComChilkatJsonObject)) To hoJoseHeader Set pvComObject Of hoJoseHeader To vJoseHeader End Get ComLastMethodSuccess Of hoJws2 To bTemp1 If (bTemp1 <> True) Begin Showln "No protected header found at the given index." Procedure_Return End Set ComEmitCompact Of hoJoseHeader To False Showln "Protected (JOSE) header:" Get ComEmit Of hoJoseHeader To sTemp1 Showln sTemp1 Send Destroy of hoJoseHeader // Output: // Signature validated. // In our village, folks say God crumbles up the old moon into stars. // Protected (JOSE) header: // { // "alg": "ES256" // } End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.