Dart
Dart
SII XML Digital Signature
See more uncategorized Examples
Example for SII XML Digital Signature.Chilkat Dart Downloads
import 'package:chilkat/chilkat.dart';
void main() {
// Load the XML to be signed.
final xmlToSign = CkXml();
try {
xmlToSign.loadXmlFile('c:/aaworkarea/eduardo/sii_unsigned.xml');
} on ChilkatException catch (e) {
print(e.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>
final gen = CkXmlDSigGen();
gen.sigLocation = 'EnvioDTE|SetDTE|DTE';
gen.sigLocationMod = 0;
gen.sigNamespacePrefix = '';
gen.sigNamespaceUri = 'http://www.w3.org/2000/09/xmldsig#';
gen.signedInfoCanonAlg = 'C14N';
gen.signedInfoDigestMethod = 'sha1';
// -------- Reference 1 --------
final xml1 = CkXml();
xml1.tag = 'Transforms';
xml1.updateAttrAt('Transform', true, 'Algorithm', 'http://www.w3.org/TR/2001/REC-xml-c14n-20010315');
gen.addSameDocRef2('F511T33', 'sha1', xml1, '');
// Provide a certificate + private key. (PFX password is test123)
final cert = CkCert();
try {
cert.loadPfxFile('qa_data/pfx/cert_test123.pfx', 'test123');
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
gen.setX509Cert(cert, true);
gen.keyInfoType = 'X509Data+KeyValue';
gen.x509Type = 'Certificate';
// Load XML to be signed...
final sbXml = CkStringBuilder();
xmlToSign.getXmlSb(sbXml);
gen.behaviors = 'IndentedSignature';
// Sign the XML...
try {
gen.createXmlDSigSb(sbXml);
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
// -----------------------------------------------
// Save the signed XML to a file.
sbXml.writeFile('c:/temp/qa_output/signedXml.xml', 'utf-8', false);
print(sbXml.getAsString());
// ----------------------------------------
// Verify the signatures we just produced...
final verifier = CkXmlDSig();
try {
verifier.loadSignatureSb(sbXml);
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
final numSigs = verifier.numSignatures;
var verifyIdx = 0;
while (verifyIdx < numSigs) {
verifier.selector = verifyIdx;
try {
verifier.verifySignature(true);
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
verifyIdx++;
}
print('All signatures were successfully verified.');
}