![]() |
Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(PowerShell) Verify XML Signature with External URL ReferencesDemonstrates how to verify an XML digital signature that includes references to URLs where the data to be digested is on a web server.
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll" # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # The signed XML we wish to verify contains external references such as this: # <ds:Reference Id="xmldsig-e7ae7ce2-9133-4d56-bd97-0a6aef738cc2-ref0" URI="https://www.chilkatsoft.com/images/starfish.jpg"> # <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> # <ds:DigestValue>AOU810yJV5Np/DnO29qpObqiTSTTCDvxGsX5ayiTYXI=</ds:DigestValue> # </ds:Reference> # <ds:Reference Id="xmldsig-e7ae7ce2-9133-4d56-bd97-0a6aef738cc2-ref1" URI="https://www.chilkatsoft.com/hamlet.xml"> # <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> # <ds:DigestValue>4sRRyWOzC7EOic4fQ9+Op1pa10DbgoBGjBvkq09LZmE=</ds:DigestValue> # </ds:Reference> $verifier = New-Object Chilkat.XmlDSig $http = New-Object Chilkat.Http # First load the signed XML $sbSignedXml = New-Object Chilkat.StringBuilder $success = $sbSignedXml.LoadFile("qa_data/xml_dsig_verify/signedWithExternalUrlRefs.xml","utf-8") if ($success -eq $false) { $("Failed to load signed XML.") exit } $success = $verifier.LoadSignatureSb($sbSignedXml) if ($success -eq $false) { $($verifier.LastErrorText) exit } # Iterate over each reference. If it is an external URL reference, download the data and provide it to the verifier. $sbRefUri = New-Object Chilkat.StringBuilder $bd = New-Object Chilkat.BinData $numRefs = $verifier.NumReferences $i = 0 while ($i -lt $numRefs) { if ($verifier.IsReferenceExternal($i) -eq $true) { $sbRefUri.Clear() $sbRefUri.Append($verifier.ReferenceUri($i)) if ($sbRefUri.StartsWith("https://",$false) -eq $true) { $("External URL Reference: " + $sbRefUri.GetAsString()) # Download the data at the URL and provide to the verifier. $success = $http.DownloadBd($sbRefUri.GetAsString(),$bd) if ($success -eq $false) { $($http.LastErrorText) exit } $success = $verifier.SetRefDataBd($i,$bd) if ($success -eq $false) { $($verifier.LastErrorText) exit } } } $i = $i + 1 } # Now that we have the external data, verify the signature.. $bVerified = $verifier.VerifySignature($true) if ($bVerified -eq $false) { $($verifier.LastErrorText) } $("Signature verified = " + $bVerified) |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.