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
(C++) Create XML Digital Signature having KeyNameDemonstrates how to create an XML digital signature where the KeyInfo part will contain the KeyName element. This example requires Chilkat v9.5.0.69 or greater.
#include <CkHttp.h> #include <CkStringBuilder.h> #include <CkPrivateKey.h> #include <CkXmlDSigGen.h> void ChilkatSample(void) { // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // The XML to be signed in this example contains the following: // <?xml version="1.0" encoding="UTF-8" standalone="no"?> // <Envelope> // <Header> // <Security> // </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/xmlToSign.xml // Fetch the XML and then sign it.. const char *url = "https://www.chilkatsoft.com/exampleData/xmlToSign.xml"; CkHttp http; CkStringBuilder sbXml; bool success = http.QuickGetSb(url,sbXml); if (success != true) { std::cout << http.lastErrorText() << "\r\n"; return; } // This example uses a DSA private key for signing. // There are many ways of getting an DSA private key using Chilkat. This example // will load it from an encrypted PEM file. // In case you would like to use it, I put the DSA private key PEM file here: // https://www.chilkatsoft.com/exampleData/dsa1024_secret.zip // The password is "secret". CkPrivateKey dsaKey; success = dsaKey.LoadEncryptedPemFile("qa_data/dsa/dsa1024_secret.pem","secret"); if (success != true) { std::cout << dsaKey.lastErrorText() << "\r\n"; return; } CkXmlDSigGen xmlSigGen; // Indicate where the XML Signature is to be inserted. xmlSigGen.put_SigLocation("Envelope|Header|Security"); // Specify the fragment of the XML document to be signed. // This example will sign the fragment from <Body Id="abc"> ... </Body> xmlSigGen.AddSameDocRef("abc","sha256","EXCL_C14N","",""); // Provide the DSA key to be used for signing: xmlSigGen.SetPrivateKey(dsaKey); // Specify what we want to emit in the KeyInfo part of the Signature. // By default, it is the KeyValue that is emitted to the KeyInfo. // In this example,we want to emit a key name rather than the actual public key value. xmlSigGen.put_KeyInfoType("KeyName"); // Provide a key name. The verifying application will use the key name // to find/load the public key to be used for verifying the signature. // The key name is an arbitrary pre-agreed upon name that signer and verifier both know in advance. xmlSigGen.put_KeyInfoKeyName("dsaKey_123"); // The KeyInfo part of the XML signature to be created will contain this: // // <ds:KeyInfo><ds:KeyName>dsaKey_123</ds:KeyName></ds:KeyInfo> // // OK, everything's specified, so let's create the XML digital signature: // This in-place signs the XML. If successful, sbXml will contain the // XML with the digital signature at the specified location. xmlSigGen.put_Behaviors("IndentedSignature"); success = xmlSigGen.CreateXmlDSigSb(sbXml); if (success != true) { std::cout << xmlSigGen.lastErrorText() << "\r\n"; return; } // Examine the signed XML: std::cout << sbXml.getAsString() << "\r\n"; sbXml.WriteFile("c:/chilkatsoft.com/exampleData/signedUsingKeyName.xml","utf-8",false); // Below is the signed XML that is produced. // // <?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>F+HopRvLoj+9SHZxI/cGfX9SDfh+HRGZLMievGX3y/cckX1UzFuXCA==</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> // } |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.