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
(PowerBuilder) 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.
integer li_rc oleobject loo_Crypt string ls_HashStr oleobject loo_Dsa string ls_PemPrivateKey integer li_Success string ls_AsnSig oleobject loo_Asn oleobject loo_Xml string r string s oleobject loo_Dsa2 string ls_PemPublicKey // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. loo_Crypt = create oleobject // Use "Chilkat_9_5_0.Crypt2" for versions of Chilkat < 10.0.0 li_rc = loo_Crypt.ConnectToNewObject("Chilkat.Crypt2") if li_rc < 0 then destroy loo_Crypt MessageBox("Error","Connecting to COM object failed") return end if loo_Crypt.EncodingMode = "hex" loo_Crypt.HashAlgorithm = "sha-1" ls_HashStr = loo_Crypt.HashFileENC("qa_data/hamlet.xml") Write-Debug "hash to sign: " + ls_HashStr loo_Dsa = create oleobject // Use "Chilkat_9_5_0.Dsa" for versions of Chilkat < 10.0.0 li_rc = loo_Dsa.ConnectToNewObject("Chilkat.Dsa") ls_PemPrivateKey = loo_Dsa.LoadText("qa_data/dsa/dsaPrivKey2.pem") li_Success = loo_Dsa.FromPem(ls_PemPrivateKey) if li_Success = 0 then Write-Debug loo_Dsa.LastErrorText destroy loo_Crypt destroy loo_Dsa return end if // Load the hash to be signed into the DSA object: li_Success = loo_Dsa.SetEncodedHash("hex",ls_HashStr) if li_Success = 0 then Write-Debug loo_Dsa.LastErrorText destroy loo_Crypt destroy loo_Dsa return end if // Sign the hash. li_Success = loo_Dsa.SignHash() if li_Success = 0 then Write-Debug loo_Dsa.LastErrorText destroy loo_Crypt destroy loo_Dsa return end if // Get the ASN.1 signature. ls_AsnSig = loo_Dsa.GetEncodedSignature("base64") Write-Debug "Signature: " + ls_AsnSig // Examine the details of the ASN.1 signature. // We want to get the r,s values as hex strings.. loo_Asn = create oleobject // Use "Chilkat_9_5_0.Asn" for versions of Chilkat < 10.0.0 li_rc = loo_Asn.ConnectToNewObject("Chilkat.Asn") li_Success = loo_Asn.LoadEncoded(ls_AsnSig,"base64") if li_Success = 0 then Write-Debug loo_Asn.LastErrorText destroy loo_Crypt destroy loo_Dsa destroy loo_Asn return end if // Get the ASN.1 as XML. loo_Xml = create oleobject // Use "Chilkat_9_5_0.Xml" for versions of Chilkat < 10.0.0 li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml") li_Success = loo_Xml.LoadXml(loo_Asn.AsnToXml()) Write-Debug "Signature as XML: " Write-Debug loo_Xml.GetXml() // 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 r = "2C187F3AB6E47A66497B86CE97BB39E2133810F5" s = "588E53D3F7B69636B48FD7175E99A3961BD7D775" // Build the XML that will be converted to ASN.1 loo_Xml.Clear() loo_Xml.Tag = "sequence" loo_Xml.NewChild2("int",r) loo_Xml.NewChild2("int",s) // Convert the XML to ASN.1 li_Success = loo_Asn.LoadAsnXml(loo_Xml.GetXml()) // Emit the signature as DER encoded ASN.1 (base64) ls_AsnSig = loo_Asn.GetEncodedDer("base64") // -------------------------------------------------------------------- // Verify the signature using the asnSig we built from the r,s values // -------------------------------------------------------------------- loo_Dsa2 = create oleobject // Use "Chilkat_9_5_0.Dsa" for versions of Chilkat < 10.0.0 li_rc = loo_Dsa2.ConnectToNewObject("Chilkat.Dsa") // Load the DSA public key to be used for verification: ls_PemPublicKey = loo_Dsa2.LoadText("qa_data/dsa/dsaPubKey2.pem") li_Success = loo_Dsa2.FromPublicPem(ls_PemPublicKey) if li_Success = 0 then Write-Debug loo_Dsa2.LastErrorText destroy loo_Crypt destroy loo_Dsa destroy loo_Asn destroy loo_Xml destroy loo_Dsa2 return end if // Load the hash to be verified. li_Success = loo_Dsa2.SetEncodedHash("hex",ls_HashStr) if li_Success = 0 then Write-Debug loo_Dsa2.LastErrorText destroy loo_Crypt destroy loo_Dsa destroy loo_Asn destroy loo_Xml destroy loo_Dsa2 return end if // Load the ASN.1 signature: li_Success = loo_Dsa2.SetEncodedSignature("base64",ls_AsnSig) if li_Success = 0 then Write-Debug loo_Dsa2.LastErrorText destroy loo_Crypt destroy loo_Dsa destroy loo_Asn destroy loo_Xml destroy loo_Dsa2 return end if // Verify: li_Success = loo_Dsa2.Verify() if li_Success = 0 then Write-Debug loo_Dsa2.LastErrorText else Write-Debug "DSA Signature Verified!" end if destroy loo_Crypt destroy loo_Dsa destroy loo_Asn destroy loo_Xml destroy loo_Dsa2 |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.