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) Extract SignatureValue from Signed XMLSee more XML Digital Signatures ExamplesDemonstrates how to extract the signature value from signed XML.
Use ChilkatAx-win32.pkg Procedure Test String sFilePath Handle hoSb Boolean iSuccess String sBase64Sig Variant vXml Handle hoXml Variant vXSigVal Handle hoXSigVal String sTemp1 Boolean bTemp1 // This example will work with the following signed XML, which as been reformatted for readability. // <?xml version="1.0" encoding="utf-8"?> // <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> // <SOAP-ENV:Header> // <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" SOAP-ENV:mustUnderstand="1"> // <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#"> // <InclusiveNamespaces xmlns="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="wsse SOAP-ENV"/> // </ds:CanonicalizationMethod> // <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/> // <ds:Reference URI="#Body"> // <ds:Transforms> // <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/> // </ds:Transforms> // <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/> // <ds:DigestValue>OwgHPZNfDkXnZsjpfzXqAcT3RV3HzmTsEy2bP44FJ0M=</ds:DigestValue> // </ds:Reference> // </ds:SignedInfo> // <ds:SignatureValue>C+7FWngU....DJFBcdg==</ds:SignatureValue> // <ds:KeyInfo> // <ds:KeyValue> // <ds:RSAKeyValue> // <ds:Modulus>sXeRhM55P13.....NAcibRw==</ds:Modulus> // <ds:Exponent>AQAB</ds:Exponent> // </ds:RSAKeyValue> // </ds:KeyValue> // </ds:KeyInfo> // </ds:Signature> // </wsse:Security> // </SOAP-ENV:Header> // <SOAP-ENV:Body xmlns:SOAP-SEC="http://schemas.xmlsoap.org/soap/security/2000-12" SOAP-SEC:id="Body"> // <z:FooBar xmlns:z="http://example.com"/> // </SOAP-ENV:Body> // </SOAP-ENV:Envelope> // ----------------------------------------------------------------------------------------- // There are a number of ways we can get the contents of the <ds:SignatureValue>...</ds:SignatureValue> Move "qa_data/xml_dsig_testing/sample_to_show_how_to_extract_sig.xml" To sFilePath // If you know there will only be a single SignatureValue in the XML, you don't need to parse XML. // Just do quick and simple string search.. // For example: Get Create (RefClass(cComChilkatStringBuilder)) To hoSb If (Not(IsComObjectCreated(hoSb))) Begin Send CreateComObject of hoSb End Get ComLoadFile Of hoSb sFilePath "utf-8" To iSuccess If (iSuccess = False) Begin Showln "Failed to load file." Procedure_Return End Get ComGetBetween Of hoSb "SignatureValue>" "</" To sBase64Sig Showln "base64Sig = " sBase64Sig // ----------------------------------------------------------------------------------------- // If the XML might contain multiple signatures, but the signatures will always be located in the // same place, then you can (beforehand) copy a sample signed XML into Chilkat's online tool // at Generate Parsing Code from XML // to get the path to the SignatureValue. For example, the line of code generated for the SignatureValue // for the above XML is: // string ds_SignatureValue = xml.GetChildContent("SOAP-ENV:Header|wsse:Security|ds:Signature|ds:SignatureValue"); // So you can simply use that path.. Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get ComLoadXmlFile Of hoXml sFilePath To iSuccess // Assume success.. Get ComGetChildContent Of hoXml "SOAP-ENV:Header|wsse:Security|ds:Signature|ds:SignatureValue" To sBase64Sig Showln "base64Sig = " sBase64Sig // ----------------------------------------------------------------------------------------- // Or perhaps you don't know where the signature is located in the XML. // You can search for the tag.. Get pvComObject of hoXml to vXml Get ComSearchForTag Of hoXml vXml "*:SignatureValue" To vXSigVal If (IsComObject(vXSigVal)) Begin Get Create (RefClass(cComChilkatXml)) To hoXSigVal Set pvComObject Of hoXSigVal To vXSigVal End Get ComLastMethodSuccess Of hoXml To bTemp1 If (bTemp1 = True) Begin Get ComContent Of hoXSigVal To sTemp1 Showln "base64Sig = " sTemp1 Send Destroy of hoXSigVal End Else Begin Showln "No SignatureValue found." End End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.