Java Requires Chilkat v11.0.0+
Chilkat2 Java
SII Chile - FRMT Signature Computation and Add to XML
See more XML Digital Signatures Examples
Compute the FRMT signature and add to the XML. This is the RSA signature of the SHA-1 digest of the "flattened" DD element.Chilkat Java Downloads
import com.chilkatsoft.chilkat2.ChilkatException;
import com.chilkatsoft.chilkat2.PrivateKey;
import com.chilkatsoft.chilkat2.Rsa;
import com.chilkatsoft.chilkat2.StringBuilder;
import com.chilkatsoft.chilkat2.Xml;
public class ChilkatExample {
public static void main(String[] args) {
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Also see: Compute the FRMA Signature and Add to XML
Xml xml = new Xml();
// Load the unsigned XML that contains the following:
// <DTE version="1.0">
// <Documento ID="F60T33">
// <TED version="1.0">
// <DD>
// ...
// <CAF version="1.0">
// <DA>
// ...
// </DA>
// <FRMA algoritmo="SHA1withRSA">...</FRMA>
// </CAF>
// ...
// </DD>
// ... The FRMT will be added here in another example ...
// </TED>
// </Documento>
// </DTE>
try {
xml.loadXmlFile("qa_data/xml_dsig/sii_cl/test_1.xml");
} catch (ChilkatException e) {
System.out.println("Failed to load initial XML file.");
return;
}
// Get a reference to the "DD" element
Xml ddXml = xml.findChild("Documento|TED|DD");
if (ddXml == null) {
System.out.println("Failed to find DD element");
return;
}
// We need to get the "flattened" DD XML where:
// - No whitespace between elements.
// - The 5 pre-defined entities are converted.
// - The text is encoded in the ISO-8859-1 character set (Latin-1),
StringBuilder sbFlattened = new StringBuilder();
ddXml.setEmitCompact(true);
ddXml.setEmitXmlDecl(false);
ddXml.getXmlSb(sbFlattened);
// Compute the SHA-1 message digest of the iso-8859-1 byte representation,
// and sign it with our RSA private key, getting the result in base64 format.
PrivateKey privKey = new PrivateKey();
try {
privKey.loadAnyFormatFile("qa_data/rsa/rsaPrivKey_pkcs8.pem", "");
} catch (ChilkatException e) {
System.out.println(e.getLastErrorText());
return;
}
Rsa rsa = new Rsa();
rsa.usePrivateKey(privKey);
rsa.setEncodingMode("base64");
rsa.setCharset("iso-8859-1");
String sig = rsa.signStringENC(sbFlattened.getAsString(), "sha1");
// Add the FRMT signature element to the XML.
xml.updateChildContent("Documento|TED|FRMT", sig);
xml.updateAttrAt("Documento|TED|FRMT", true, "algoritmo", "SHA1withRSA");
ddXml.close();
// See what we have:
xml.setEmitCompact(false);
xml.setEmitXmlDecl(true);
System.out.println(xml.getXml());
}
}