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
(Xojo Plugin) Create/Verify XML Signature with External Text ReferenceSee more XML Digital Signatures ExamplesDemonstrates how to create an XML digital signature where the referenced data is external. In this case, the data is a text file located at the following URL: https://www.chilkatsoft.com/helloWorld.txt
// This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // This example inserts an XML signature into the following XML: // <?xml version="1.0" encoding="UTF-8" standalone="no"?> // <abc> // <xyz> // <name>helloWorld.txt</name> // <url>https://www.chilkatsoft.com/helloWorld.txt</url> // </xyz> // </abc> // Build the above XML to be signed. Dim xml As New Chilkat.Xml xml.Tag = "abc" xml.UpdateChildContent "xyz|name","helloWorld.txt" xml.UpdateChildContent "xyz|url","https://www.chilkatsoft.com/helloWorld.txt" Dim cert As New Chilkat.Cert Dim success As Boolean success = cert.LoadPfxFile("qa_data/pfx/test_secret.pfx","secret") If (success = False) Then System.DebugLog(cert.LastErrorText) Return End If Dim gen As New Chilkat.XmlDSigGen // Indicate the location within the XML the Signature will be inserted. gen.SigLocation = "abc|xyz" // Get the content of the text data to be referenced. Dim http As New Chilkat.Http Dim sbExternalTxt As New Chilkat.StringBuilder success = http.QuickGetSb("https://www.chilkatsoft.com/helloWorld.txt",sbExternalTxt) If (success = False) Then System.DebugLog(http.LastErrorText) Return End If success = gen.AddExternalTextRef("https://www.chilkatsoft.com/helloWorld.txt",sbExternalTxt,"utf-8",False,"sha256","") If (success = False) Then System.DebugLog(gen.LastErrorText) Return End If // Provide the private key for signing via the certificate, and indicate that // we want the base64 of the certificate embedded in the KeyInfo. gen.KeyInfoType = "X509Data" gen.X509Type = "Certificate" Dim bUsePrivateKey As Boolean bUsePrivateKey = True success = gen.SetX509Cert(cert,bUsePrivateKey) If (success <> True) Then System.DebugLog(gen.LastErrorText) Return End If // Indicate we want an indented signature for readability. // This can be removed after debugging is finished.. gen.Behaviors = "IndentedSignature" // Now create and insert the Signature Dim sbXml As New Chilkat.StringBuilder success = xml.GetXmlSb(sbXml) success = gen.CreateXmlDSigSb(sbXml) If (success <> True) Then System.DebugLog(gen.LastErrorText) Return End If // Examine the XML with the digital signature inserted System.DebugLog(sbXml.GetAsString()) // Here is the output: // <?xml version="1.0" encoding="utf-8"?> // <abc> // <xyz> // <name>helloWorld.txt</name> // <url>https://www.chilkatsoft.com/helloWorld.txt</url> // <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> // <ds:SignedInfo> // <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> // <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> // <ds:Reference URI="https://www.chilkatsoft.com/helloWorld.txt"> // <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> // <ds:DigestValue>f4OxZX/x/FO5LcGBSKHWXfwtSx+j1ncoSt3SABJtkGk=</ds:DigestValue> // </ds:Reference> // </ds:SignedInfo> // <ds:SignatureValue>syFSl...pZDiFQ==</ds:SignatureValue> // <ds:KeyInfo> // <ds:X509Data> // <ds:X509Certificate>MIIHAz...GwnUZWCaDE=</ds:X509Certificate> // </ds:X509Data> // </ds:KeyInfo> // </ds:Signature></xyz> // </abc> // Let's verify the signature... Dim verifier As New Chilkat.XmlDSig success = verifier.LoadSignatureSb(sbXml) If (success <> True) Then System.DebugLog(verifier.LastErrorText) Return End If // Let's examine the external references, and fetch the data for each.. Dim sbExternalData As New Chilkat.StringBuilder Dim numRefs As Int32 numRefs = verifier.NumReferences Dim i As Int32 i = 0 While i < numRefs Dim bExternal As Boolean bExternal = verifier.IsReferenceExternal(i) If (bExternal = True) Then Dim uri As String uri = verifier.ReferenceUri(i) // We're assuming the URI is an https:// or http:// URL... // Let's also assume we know that the referenced data is text and we want the utf-8 byte representation. sbExternalData.Clear success = http.QuickGetSb(uri,sbExternalData) If (success = False) Then System.DebugLog(http.LastErrorText) Return End If success = verifier.SetRefDataSb(i,sbExternalData,"utf-8") If (success = False) Then System.DebugLog(verifier.LastErrorText) Return End If End If i = i + 1 Wend // Now that we have the external data available, we can verify the reference digest(s) and the signature. Dim bVerified As Boolean bVerified = verifier.VerifySignature(True) If (bVerified <> True) Then System.DebugLog(verifier.LastErrorText) Return End If System.DebugLog("Signature verified!") |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.