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 - FRMA Signature Computation and Add to XMLCompute the FRMA signature of a <DA> element enclosed inside a <CAF> element of the XML to be signed.
LOCAL loXml LOCAL lnSuccess LOCAL loDaXml 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 FRMT 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> * ... The FRMA will be added here ... * </CAF> * ... * </DD> * ... The FRMT will be added here in another example ... * </TED> * </Documento> * </DTE> lnSuccess = loXml.LoadXmlFile("qa_data/xml_dsig/sii_cl/test_0.xml") IF (lnSuccess = 0) THEN ? "Failed to load initial XML file." RELEASE loXml CANCEL ENDIF * Get a reference to the "DA" element loDaXml = loXml.FindChild("Documento|TED|DD|CAF|DA") IF (loXml.LastMethodSuccess = 0) THEN ? "Failed to find DA element" RELEASE loXml CANCEL ENDIF * We need to get the "flattened" DA 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') loDaXml.EmitCompact = 1 loDaXml.EmitXmlDecl = 0 loDaXml.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 FRMA signature element to the XML. loXml.UpdateChildContent("Documento|TED|DD|CAF|FRMA",lcSig) loXml.UpdateAttrAt("Documento|TED|DD|CAF|FRMA",1,"algoritmo","SHA1withRSA") RELEASE loDaXml * See what we have: loXml.EmitCompact = 0 loXml.EmitXmlDecl = 1 ? loXml.GetXml() loXml.SaveXml("qa_data/xml_dsig/sii_cl/test_1.xml") RELEASE loXml RELEASE loSbFlattened RELEASE loPrivKey RELEASE loRsa |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.