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
(PowerBuilder) 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.
integer li_rc oleobject loo_Xml integer li_Success oleobject loo_DaXml oleobject loo_SbFlattened oleobject loo_PrivKey oleobject loo_Rsa string ls_Sig // 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 loo_Xml = create oleobject // Use "Chilkat_9_5_0.Xml" for versions of Chilkat < 10.0.0 li_rc = loo_Xml.ConnectToNewObject("Chilkat.Xml") if li_rc < 0 then destroy loo_Xml MessageBox("Error","Connecting to COM object failed") return end if // 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> li_Success = loo_Xml.LoadXmlFile("qa_data/xml_dsig/sii_cl/test_0.xml") if li_Success = 0 then Write-Debug "Failed to load initial XML file." destroy loo_Xml return end if // Get a reference to the "DA" element loo_DaXml = loo_Xml.FindChild("Documento|TED|DD|CAF|DA") if loo_Xml.LastMethodSuccess = 0 then Write-Debug "Failed to find DA element" destroy loo_Xml return end if // 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), loo_SbFlattened = create oleobject // Use "Chilkat_9_5_0.StringBuilder" for versions of Chilkat < 10.0.0 li_rc = loo_SbFlattened.ConnectToNewObject("Chilkat.StringBuilder") loo_DaXml.EmitCompact = 1 loo_DaXml.EmitXmlDecl = 0 loo_DaXml.GetXmlSb(loo_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. loo_PrivKey = create oleobject // Use "Chilkat_9_5_0.PrivateKey" for versions of Chilkat < 10.0.0 li_rc = loo_PrivKey.ConnectToNewObject("Chilkat.PrivateKey") li_Success = loo_PrivKey.LoadAnyFormatFile("qa_data/rsa/rsaPrivKey_pkcs8.pem","") if li_Success = 0 then Write-Debug loo_PrivKey.LastErrorText destroy loo_Xml destroy loo_SbFlattened destroy loo_PrivKey return end if loo_Rsa = create oleobject // Use "Chilkat_9_5_0.Rsa" for versions of Chilkat < 10.0.0 li_rc = loo_Rsa.ConnectToNewObject("Chilkat.Rsa") loo_Rsa.ImportPrivateKeyObj(loo_PrivKey) loo_Rsa.EncodingMode = "base64" loo_Rsa.Charset = "iso-8859-1" ls_Sig = loo_Rsa.SignStringENC(loo_SbFlattened.GetAsString(),"sha1") // Add the FRMA signature element to the XML. loo_Xml.UpdateChildContent("Documento|TED|DD|CAF|FRMA",ls_Sig) loo_Xml.UpdateAttrAt("Documento|TED|DD|CAF|FRMA",1,"algoritmo","SHA1withRSA") destroy loo_DaXml // See what we have: loo_Xml.EmitCompact = 0 loo_Xml.EmitXmlDecl = 1 Write-Debug loo_Xml.GetXml() loo_Xml.SaveXml("qa_data/xml_dsig/sii_cl/test_1.xml") destroy loo_Xml destroy loo_SbFlattened destroy loo_PrivKey destroy loo_Rsa |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.