Objective-C
Objective-C
SII XML Digital Signature
See more uncategorized Examples
Example for SII XML Digital Signature.Chilkat Objective-C Downloads
#import <CkoXml.h>
#import <CkoXmlDSigGen.h>
#import <CkoCert.h>
#import <CkoStringBuilder.h>
#import <CkoXmlDSig.h>
BOOL success = NO;
success = YES;
// Load the XML to be signed.
CkoXml *xmlToSign = [[CkoXml alloc] init];
success = [xmlToSign LoadXmlFile: @"c:/aaworkarea/eduardo/sii_unsigned.xml"];
if (success == NO) {
NSLog(@"%@",xmlToSign.LastErrorText);
return;
}
// The sample XML to be signed looks like this:
// <?xml version="1.0" encoding="ISO-8859-1"?>
// <EnvioDTE xmlns="http://www.sii.cl/SiiDte" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sii.cl/SiiDte EnvioDTE_v10.xsd" version="1.0">
// <SetDTE ID="SetDocF0T33_20240425_170512">
// <Caratula version="1.0">
// <RutEmisor>99999999-4</RutEmisor>
// <RutEnvia>12345678-6</RutEnvia>
// <RutReceptor>888888000-K</RutReceptor>
// <FchResol>2014-08-22</FchResol>
// <NroResol>80</NroResol>
// <TmstFirmaEnv>2024-04-25T17:05:13</TmstFirmaEnv>
// <SubTotDTE>
// <TpoDTE>33</TpoDTE>
// <NroDTE>1</NroDTE>
// </SubTotDTE>
// </Caratula>
// <DTE version="1.0">
// <Documento ID="F555T55">
// ...
// </Documento>
// </EnvioDTE>
CkoXmlDSigGen *gen = [[CkoXmlDSigGen alloc] init];
gen.SigLocation = @"EnvioDTE|SetDTE|DTE";
gen.SigLocationMod = [NSNumber numberWithInt:0];
gen.SigNamespacePrefix = @"";
gen.SigNamespaceUri = @"http://www.w3.org/2000/09/xmldsig#";
gen.SignedInfoCanonAlg = @"C14N";
gen.SignedInfoDigestMethod = @"sha1";
// -------- Reference 1 --------
CkoXml *xml1 = [[CkoXml alloc] init];
xml1.Tag = @"Transforms";
[xml1 UpdateAttrAt: @"Transform" autoCreate: YES attrName: @"Algorithm" attrValue: @"http://www.w3.org/TR/2001/REC-xml-c14n-20010315"];
[gen AddSameDocRef2: @"F511T33" digestMethod: @"sha1" transforms: xml1 refType: @""];
// Provide a certificate + private key. (PFX password is test123)
CkoCert *cert = [[CkoCert alloc] init];
success = [cert LoadPfxFile: @"qa_data/pfx/cert_test123.pfx" password: @"test123"];
if (success != YES) {
NSLog(@"%@",cert.LastErrorText);
return;
}
[gen SetX509Cert: cert usePrivateKey: YES];
gen.KeyInfoType = @"X509Data+KeyValue";
gen.X509Type = @"Certificate";
// Load XML to be signed...
CkoStringBuilder *sbXml = [[CkoStringBuilder alloc] init];
[xmlToSign GetXmlSb: sbXml];
gen.Behaviors = @"IndentedSignature";
// Sign the XML...
success = [gen CreateXmlDSigSb: sbXml];
if (success != YES) {
NSLog(@"%@",gen.LastErrorText);
return;
}
// -----------------------------------------------
// Save the signed XML to a file.
success = [sbXml WriteFile: @"c:/temp/qa_output/signedXml.xml" charset: @"utf-8" emitBom: NO];
NSLog(@"%@",[sbXml GetAsString]);
// ----------------------------------------
// Verify the signatures we just produced...
CkoXmlDSig *verifier = [[CkoXmlDSig alloc] init];
success = [verifier LoadSignatureSb: sbXml];
if (success != YES) {
NSLog(@"%@",verifier.LastErrorText);
return;
}
int numSigs = [verifier.NumSignatures intValue];
int verifyIdx = 0;
while (verifyIdx < numSigs) {
verifier.Selector = [NSNumber numberWithInt: verifyIdx];
BOOL verified = [verifier VerifySignature: YES];
if (verified != YES) {
NSLog(@"%@",verifier.LastErrorText);
return;
}
verifyIdx = verifyIdx + 1;
}
NSLog(@"%@",@"All signatures were successfully verified.");