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
(Visual FoxPro) SII Chile - FRMT Signature Computation and Add to XMLCompute the FRMT signature and add to the XML. This is the RSA signature of the SHA-1 digest of the "flattened" DD element.
LOCAL loXml LOCAL lnSuccess LOCAL loDdXml LOCAL loSbFlattened LOCAL loPrivKey LOCAL loRsa LOCAL lcSig * 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 * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Xml') loXml = CreateObject('Chilkat.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> lnSuccess = loXml.LoadXmlFile("qa_data/xml_dsig/sii_cl/test_1.xml") IF (lnSuccess = 0) THEN ? "Failed to load initial XML file." RELEASE loXml CANCEL ENDIF * Get a reference to the "DD" element loDdXml = loXml.FindChild("Documento|TED|DD") IF (loXml.LastMethodSuccess = 0) THEN ? "Failed to find DD element" RELEASE loXml CANCEL ENDIF * 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), * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.StringBuilder') loSbFlattened = CreateObject('Chilkat.StringBuilder') loDdXml.EmitCompact = 1 loDdXml.EmitXmlDecl = 0 loDdXml.GetXmlSb(loSbFlattened) * 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. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.PrivateKey') loPrivKey = CreateObject('Chilkat.PrivateKey') lnSuccess = loPrivKey.LoadAnyFormatFile("qa_data/rsa/rsaPrivKey_pkcs8.pem","") IF (lnSuccess = 0) THEN ? loPrivKey.LastErrorText RELEASE loXml RELEASE loSbFlattened RELEASE loPrivKey CANCEL ENDIF * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Rsa') loRsa = CreateObject('Chilkat.Rsa') loRsa.ImportPrivateKeyObj(loPrivKey) loRsa.EncodingMode = "base64" loRsa.Charset = "iso-8859-1" lcSig = loRsa.SignStringENC(loSbFlattened.GetAsString(),"sha1") * Add the FRMT signature element to the XML. loXml.UpdateChildContent("Documento|TED|FRMT",lcSig) loXml.UpdateAttrAt("Documento|TED|FRMT",1,"algoritmo","SHA1withRSA") RELEASE loDdXml * See what we have: loXml.EmitCompact = 0 loXml.EmitXmlDecl = 1 ? loXml.GetXml() RELEASE loXml RELEASE loSbFlattened RELEASE loPrivKey RELEASE loRsa |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.