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
(PowerShell) 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.
Add-Type -Path "C:\chilkat\ChilkatDotNet47-9.5.0-x64\ChilkatDotNet47.dll" # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. $crypt = New-Object Chilkat.Crypt2 $crypt.EncodingMode = "hex" $crypt.HashAlgorithm = "sha-1" $hashStr = $crypt.HashFileENC("qa_data/hamlet.xml") $("hash to sign: " + $hashStr) $dsa = New-Object Chilkat.Dsa $pemPrivateKey = $dsa.LoadText("qa_data/dsa/dsaPrivKey2.pem") $success = $dsa.FromPem($pemPrivateKey) if ($success -eq $false) { $($dsa.LastErrorText) exit } # Load the hash to be signed into the DSA object: $success = $dsa.SetEncodedHash("hex",$hashStr) if ($success -eq $false) { $($dsa.LastErrorText) exit } # Sign the hash. $success = $dsa.SignHash() if ($success -eq $false) { $($dsa.LastErrorText) exit } # Get the ASN.1 signature. $asnSig = $dsa.GetEncodedSignature("base64") $("Signature: " + $asnSig) # Examine the details of the ASN.1 signature. # We want to get the r,s values as hex strings.. $asn = New-Object Chilkat.Asn $success = $asn.LoadEncoded($asnSig,"base64") if ($success -eq $false) { $($asn.LastErrorText) exit } # Get the ASN.1 as XML. $xml = New-Object Chilkat.Xml $success = $xml.LoadXml($asn.AsnToXml()) $("Signature as XML: ") $($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 $xml.Clear() $xml.Tag = "sequence" $xml.NewChild2("int",$r) $xml.NewChild2("int",$s) # Convert the XML to ASN.1 $success = $asn.LoadAsnXml($xml.GetXml()) # Emit the signature as DER encoded ASN.1 (base64) $asnSig = $asn.GetEncodedDer("base64") # -------------------------------------------------------------------- # Verify the signature using the asnSig we built from the r,s values # -------------------------------------------------------------------- $dsa2 = New-Object Chilkat.Dsa # Load the DSA public key to be used for verification: $pemPublicKey = $dsa2.LoadText("qa_data/dsa/dsaPubKey2.pem") $success = $dsa2.FromPublicPem($pemPublicKey) if ($success -eq $false) { $($dsa2.LastErrorText) exit } # Load the hash to be verified. $success = $dsa2.SetEncodedHash("hex",$hashStr) if ($success -eq $false) { $($dsa2.LastErrorText) exit } # Load the ASN.1 signature: $success = $dsa2.SetEncodedSignature("base64",$asnSig) if ($success -eq $false) { $($dsa2.LastErrorText) exit } # Verify: $success = $dsa2.Verify() if ($success -eq $false) { $($dsa2.LastErrorText) } else { $("DSA Signature Verified!") } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.