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
(Objective-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.
#import <NSString.h> #import <CkoHttp.h> #import <CkoStringBuilder.h> #import <CkoPrivateKey.h> #import <CkoXmlDSigGen.h> // 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.. NSString *url = @"https://www.chilkatsoft.com/exampleData/xmlToSign.xml"; CkoHttp *http = [[CkoHttp alloc] init]; CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init]; BOOL success = [http QuickGetSb: url sbContent: sbXml]; if (success != YES) { NSLog(@"%@",http.LastErrorText); 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". CkoPrivateKey *dsaKey = [[CkoPrivateKey alloc] init]; success = [dsaKey LoadEncryptedPemFile: @"qa_data/dsa/dsa1024_secret.pem" password: @"secret"]; if (success != YES) { NSLog(@"%@",dsaKey.LastErrorText); return; } CkoXmlDSigGen *xmlSigGen = [[CkoXmlDSigGen alloc] init]; // Indicate where the XML Signature is to be inserted. xmlSigGen.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" digestMethod: @"sha256" canonMethod: @"EXCL_C14N" prefixList: @"" refType: @""]; // 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.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.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.Behaviors = @"IndentedSignature"; success = [xmlSigGen CreateXmlDSigSb: sbXml]; if (success != YES) { NSLog(@"%@",xmlSigGen.LastErrorText); return; } // Examine the signed XML: NSLog(@"%@",[sbXml GetAsString]); [sbXml WriteFile: @"c:/chilkatsoft.com/exampleData/signedUsingKeyName.xml" charset: @"utf-8" emitBom: NO]; // 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.