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) DSA R,S Signature ValuesSee more DSA ExamplesCreates a DSA signature. Gets r,s values from the signature. Re-creates the DSA signature ASN.1 from the r,s values. Then verifies the signature using the re-created ASN.1 DSA signature.
Use ChilkatAx-win32.pkg Procedure Test Handle hoCrypt String sHashStr Handle hoDsa String sPemPrivateKey Boolean iSuccess String sAsnSig Handle hoAsn Handle hoXml String r String s 2 Handle hoDsa2 String sPemPublicKey String sTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End Set ComEncodingMode Of hoCrypt To "hex" Set ComHashAlgorithm Of hoCrypt To "sha-1" Get ComHashFileENC Of hoCrypt "qa_data/hamlet.xml" To sHashStr Showln "hash to sign: " sHashStr Get Create (RefClass(cComChilkatDsa)) To hoDsa If (Not(IsComObjectCreated(hoDsa))) Begin Send CreateComObject of hoDsa End Get ComLoadText Of hoDsa "qa_data/dsa/dsaPrivKey2.pem" To sPemPrivateKey Get ComFromPem Of hoDsa sPemPrivateKey To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa To sTemp1 Showln sTemp1 Procedure_Return End // Load the hash to be signed into the DSA object: Get ComSetEncodedHash Of hoDsa "hex" sHashStr To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa To sTemp1 Showln sTemp1 Procedure_Return End // Sign the hash. Get ComSignHash Of hoDsa To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa To sTemp1 Showln sTemp1 Procedure_Return End // Get the ASN.1 signature. Get ComGetEncodedSignature Of hoDsa "base64" To sAsnSig Showln "Signature: " sAsnSig // Examine the details of the ASN.1 signature. // We want to get the r,s values as hex strings.. Get Create (RefClass(cComChilkatAsn)) To hoAsn If (Not(IsComObjectCreated(hoAsn))) Begin Send CreateComObject of hoAsn End Get ComLoadEncoded Of hoAsn sAsnSig "base64" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAsn To sTemp1 Showln sTemp1 Procedure_Return End // Get the ASN.1 as XML. Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get ComAsnToXml Of hoAsn To sTemp1 Get ComLoadXml Of hoXml sTemp1 To iSuccess Showln "Signature as XML: " Get ComGetXml Of hoXml To sTemp1 Showln sTemp1 // Sample XML shown here. // The r and s values are the two hex strings in the XML. // <?xml version="1.0" encoding="utf-8"?> // <sequence> // <int>2C187F3AB6E47A66497B86CE97BB39E2133810F5</int> // <int>588E53D3F7B69636B48FD7175E99A3961BD7D775</int> // </sequence> // Pretend we're starting with r,s Move "2C187F3AB6E47A66497B86CE97BB39E2133810F5" To r Move "588E53D3F7B69636B48FD7175E99A3961BD7D775" To s // Build the XML that will be converted to ASN.1 Send ComClear To hoXml Set ComTag Of hoXml To "sequence" Send ComNewChild2 To hoXml "int" r Send ComNewChild2 To hoXml "int" s // Convert the XML to ASN.1 Get ComGetXml Of hoXml To sTemp1 Get ComLoadAsnXml Of hoAsn sTemp1 To iSuccess // Emit the signature as DER encoded ASN.1 (base64) Get ComGetEncodedDer Of hoAsn "base64" To sAsnSig // -------------------------------------------------------------------- // Verify the signature using the asnSig we built from the r,s values // -------------------------------------------------------------------- Get Create (RefClass(cComChilkatDsa)) To hoDsa2 If (Not(IsComObjectCreated(hoDsa2))) Begin Send CreateComObject of hoDsa2 End // Load the DSA public key to be used for verification: Get ComLoadText Of hoDsa2 "qa_data/dsa/dsaPubKey2.pem" To sPemPublicKey Get ComFromPublicPem Of hoDsa2 sPemPublicKey To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa2 To sTemp1 Showln sTemp1 Procedure_Return End // Load the hash to be verified. Get ComSetEncodedHash Of hoDsa2 "hex" sHashStr To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa2 To sTemp1 Showln sTemp1 Procedure_Return End // Load the ASN.1 signature: Get ComSetEncodedSignature Of hoDsa2 "base64" sAsnSig To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa2 To sTemp1 Showln sTemp1 Procedure_Return End // Verify: Get ComVerify Of hoDsa2 To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoDsa2 To sTemp1 Showln sTemp1 End Else Begin Showln "DSA Signature Verified!" End End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.