Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(DataFlex) 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.
Use ChilkatAx-win32.pkg Procedure Test Handle hoXml Boolean iSuccess Variant vDdXml Handle hoDdXml Variant vSbFlattened Handle hoSbFlattened Variant vPrivKey Handle hoPrivKey Handle hoRsa String sSig String sTemp1 Boolean bTemp1 // 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 Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End // 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> Get ComLoadXmlFile Of hoXml "qa_data/xml_dsig/sii_cl/test_1.xml" To iSuccess If (iSuccess = False) Begin Showln "Failed to load initial XML file." Procedure_Return End // Get a reference to the "DD" element Get ComFindChild Of hoXml "Documento|TED|DD" To vDdXml If (IsComObject(vDdXml)) Begin Get Create (RefClass(cComChilkatXml)) To hoDdXml Set pvComObject Of hoDdXml To vDdXml End Get ComLastMethodSuccess Of hoXml To bTemp1 If (bTemp1 = False) Begin Showln "Failed to find DD element" Procedure_Return End // 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), Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFlattened If (Not(IsComObjectCreated(hoSbFlattened))) Begin Send CreateComObject of hoSbFlattened End Set ComEmitCompact Of hoDdXml To True Set ComEmitXmlDecl Of hoDdXml To False Get pvComObject of hoSbFlattened to vSbFlattened Get ComGetXmlSb Of hoDdXml vSbFlattened To iSuccess // 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. Get Create (RefClass(cComChilkatPrivateKey)) To hoPrivKey If (Not(IsComObjectCreated(hoPrivKey))) Begin Send CreateComObject of hoPrivKey End Get ComLoadAnyFormatFile Of hoPrivKey "qa_data/rsa/rsaPrivKey_pkcs8.pem" "" To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoPrivKey To sTemp1 Showln sTemp1 Procedure_Return End Get Create (RefClass(cComChilkatRsa)) To hoRsa If (Not(IsComObjectCreated(hoRsa))) Begin Send CreateComObject of hoRsa End Get pvComObject of hoPrivKey to vPrivKey Get ComImportPrivateKeyObj Of hoRsa vPrivKey To iSuccess Set ComEncodingMode Of hoRsa To "base64" Set ComCharset Of hoRsa To "iso-8859-1" Get ComGetAsString Of hoSbFlattened To sTemp1 Get ComSignStringENC Of hoRsa sTemp1 "sha1" To sSig // Add the FRMT signature element to the XML. Send ComUpdateChildContent To hoXml "Documento|TED|FRMT" sSig Get ComUpdateAttrAt Of hoXml "Documento|TED|FRMT" True "algoritmo" "SHA1withRSA" To iSuccess Send Destroy of hoDdXml // See what we have: Set ComEmitCompact Of hoXml To False Set ComEmitXmlDecl Of hoXml To True Get ComGetXml Of hoXml To sTemp1 Showln sTemp1 End_Procedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.