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 JWS Using Private Key on a Smart CardSee more JSON Web Signatures (JWS) ExamplesCreates and validates a JSON Web Signature (JWS) using the private key associated with a certificate on a smart card.
Use ChilkatAx-win32.pkg Procedure Test Handle hoCert Boolean iSuccess Variant vPrivKey Handle hoPrivKey ProtHdr Handle hoJwsProtHdr Handle hoJws Integer iSignatureIndex Boolean iBIncludeBom String sPayloadStr String sJwsCompact Handle hoJws2 Variant vRsaPubKey Handle hoRsaPubKey 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. // Load the certificate from a smart card. Get Create (RefClass(cComChilkatCert)) To hoCert If (Not(IsComObjectCreated(hoCert))) Begin Send CreateComObject of hoCert End Get ComLoadFromSmartcard Of hoCert "" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End // Note: Chilkat provides many different ways to load a certificate from a smartcard or USB token, // such as selecting a certificate if the card contains multiple certificates with private keys, // or working with lower-level PKCS11 or ScMinidriver API's (both of which Chilkat provides). // If the associated private key was present on the smartcard, then you can simply // get it from the Chilkat cert object: Get ComExportPrivateKey Of hoCert To vPrivKey If (IsComObject(vPrivKey)) Begin Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey Set pvComObject Of hoPrivKey To vPrivKey End Get ComLastMethodSuccess Of hoCert To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoCert To sTemp1 Showln sTemp1 Procedure_Return End // You can check the key type to make sure it's RSA. // This will output "rsa" if the key is RSA. Get ComKeyType Of hoPrivKey To sTemp1 Showln "Key type = " sTemp1 // 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" "RS256" 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 RSA key: Get ComSetPrivateKey Of hoJws iSignatureIndex vPrivKey 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 Send Destroy of hoPrivKey Procedure_Return End Showln "JWS: " sJwsCompact // sample output: // JWS: eyJhbGciOiJQUzI1NiJ9.SW4gb3VyIHZpbGxhZ2UsIGZvbGtzIHNheSBHb2QgY3J1bWJsZXMgdXAgdGhlIG9sZCBtb29uIGludG8gc3RhcnMu.TRWhwRo5dMv9-8OzrInfJTwmUGYgjLfHk8lqF072ND-FmLWEBnUTOpY8oJXp8FdWw2SalbdOeNlrtlJjwk4XK8Ql2iJ_2qMCtxsvLPhKBOqFoAF4aBvTOEDVJDxf0DaBSiydEEtfTVV2iwBcjWabu5J2XieR5y7QZQtuHsn7T3qKBvCcCejN3Y2oqAT3qMHvu1fTms1r_91wBn_K7Wjd9UkZ1n02qQcUHJznR_OF2BgN7_KWIDAF9ZS9keoju2NPpPelO4yxa2XUPnehY3G7dHKoCxUEQR4d2Xc5voqDASTVCDqQS4PVOZdvT3Ein6-SanAlCwbWBbkvT8g6-5PImQ // 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 hoPrivKey To vRsaPubKey If (IsComObject(vRsaPubKey)) Begin Get Create (RefClass(cComChilkatPublicKey)) To hoRsaPubKey Set pvComObject Of hoRsaPubKey To vRsaPubKey End Send Destroy of hoPrivKey // Set the RSA public key used for validation. Move 0 To iSignatureIndex Get ComSetPublicKey Of hoJws2 iSignatureIndex vRsaPubKey To iSuccess Send Destroy of hoRsaPubKey // 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 RSA 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": "RS256" // } End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.