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) Verify XML Digital Signature having KeyNameDemonstrates how to verify an XML digital signature where the KeyInfo part contains the KeyName element. This example requires Chilkat v9.5.0.69 or greater.
Use ChilkatAx-win32.pkg Procedure Test String sUrl Handle hoHttp Variant vSbXml Handle hoSbXml Boolean iSuccess Handle hoVerifier Variant vXmlKeyInfo Handle hoXmlKeyInfo Handle hoSbKeyName Variant vPubKey Handle hoPubKey Boolean iBVerified String sTemp1 Boolean bTemp1 // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // The signed XML to be verified in this example contains the following: // // <?xml version="1.0" encoding="UTF-8" standalone="no"?> // <Envelope> // <Header> // <Security> // <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/2009/xmldsig11#dsa-sha256"/><ds:Reference URI="#abc"><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>XTjDIHSEsDNTO9yn4cKtyXjRUjPFXkOQOLYI5mueZhk=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>NXOIMevGCqFl0Dwtp2KkqkT05GRV8CjmHZ9LhFpt8/d7+lkIi7mITA==</ds:SignatureValue><ds:KeyInfo><ds:KeyName>dsaKey_123</ds:KeyName></ds:KeyInfo></ds:Signature></Security> // </Header> // <Body Id="abc"> // <z:FooBar xmlns:z="https://www.example-code.com"/> // </Body> // </Envelope> // // The above XML is available at https://www.chilkatsoft.com/exampleData/signedUsingKeyName.xml // First we'll fetch the signed XML: Move "https://www.chilkatsoft.com/exampleData/signedUsingKeyName.xml" To sUrl Get Create (RefClass(cComChilkatHttp)) To hoHttp If (Not(IsComObjectCreated(hoHttp))) Begin Send CreateComObject of hoHttp End Get Create (RefClass(cComChilkatStringBuilder)) To hoSbXml If (Not(IsComObjectCreated(hoSbXml))) Begin Send CreateComObject of hoSbXml End Get pvComObject of hoSbXml to vSbXml Get ComQuickGetSb Of hoHttp sUrl vSbXml To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End Get Create (RefClass(cComChilkatXmlDSig)) To hoVerifier If (Not(IsComObjectCreated(hoVerifier))) Begin Send CreateComObject of hoVerifier End // Load the XML containing the signature to be verified. Get pvComObject of hoSbXml to vSbXml Get ComLoadSignatureSb Of hoVerifier vSbXml To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoVerifier To sTemp1 Showln sTemp1 Procedure_Return End // (The Chilkat XML Digital Signature API has the capability to handle XML documents with multiple signatures. // We know in advance that this signed XML has just one Signature, so we leave the dsig.Selector property at the // default value of 0.) // Let's get the KeyInfo XML so we can then get the KeyName. Get ComGetKeyInfo Of hoVerifier To vXmlKeyInfo If (IsComObject(vXmlKeyInfo)) Begin Get Create (RefClass(cComChilkatXml)) To hoXmlKeyInfo Set pvComObject Of hoXmlKeyInfo To vXmlKeyInfo End Get ComLastMethodSuccess Of hoVerifier To bTemp1 If (bTemp1 = False) Begin Showln "There is no KeyInfo available in the Signature." Procedure_Return End // Examine the XML: Get ComGetXml Of hoXmlKeyInfo To sTemp1 Showln sTemp1 // The KeyInfo XML that is returned looks like this: // // <ds:KeyInfo> // <ds:KeyName>dsaKey_123</ds:KeyName> // </ds:KeyInfo> // // Get the KeyName. Get Create (RefClass(cComChilkatStringBuilder)) To hoSbKeyName If (Not(IsComObjectCreated(hoSbKeyName))) Begin Send CreateComObject of hoSbKeyName End Get ComGetChildContent Of hoXmlKeyInfo "*:KeyName" To sTemp1 Get ComAppend Of hoSbKeyName sTemp1 To iSuccess Send Destroy of hoXmlKeyInfo // sbKeyName contains "dsaKey_123" Get ComGetAsString Of hoSbKeyName To sTemp1 Showln sTemp1 // The application now locates and loads the public key for verification // based on the key name. This example will do the following: // If the key name equals "dsaKey_123", then load the DSA key from // "qa_data/dsa/dsa1024_public.pem" // Get ComContentsEqual Of hoSbKeyName "dsaKey_123" False To bTemp1 If (bTemp1 = False) Begin Showln "I don't know this key..." Procedure_Return End // The DSA public key used in this example is available at: // https://www.chilkatsoft.com/exampleData/dsa1024_public.zip Get Create (RefClass(cComChilkatPublicKey)) To hoPubKey If (Not(IsComObjectCreated(hoPubKey))) Begin Send CreateComObject of hoPubKey End Get ComLoadFromFile Of hoPubKey "qa_data/dsa/dsa1024_public.pem" To iSuccess If (iSuccess <> True) Begin Get ComLastErrorText Of hoPubKey To sTemp1 Showln sTemp1 Procedure_Return End // Provide the DSA public key to the XML DSig verifier: Get pvComObject of hoPubKey to vPubKey Get ComSetPublicKey Of hoVerifier vPubKey To iSuccess // Verify the signature Get ComVerifySignature Of hoVerifier True To iBVerified Showln "Signature verified = " iBVerified End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.