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
(DataFlex) 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.
Use ChilkatAx-win32.pkg Procedure Test Handle hoXml Boolean iSuccess Variant vDaXml Handle hoDaXml 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 FRMT 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> // ... The FRMA will be added here ... // </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_0.xml" To iSuccess If (iSuccess = False) Begin Showln "Failed to load initial XML file." Procedure_Return End // Get a reference to the "DA" element Get ComFindChild Of hoXml "Documento|TED|DD|CAF|DA" To vDaXml If (IsComObject(vDaXml)) Begin Get Create (RefClass(cComChilkatXml)) To hoDaXml Set pvComObject Of hoDaXml To vDaXml End Get ComLastMethodSuccess Of hoXml To bTemp1 If (bTemp1 = False) Begin Showln "Failed to find DA element" Procedure_Return End // 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), Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFlattened If (Not(IsComObjectCreated(hoSbFlattened))) Begin Send CreateComObject of hoSbFlattened End Set ComEmitCompact Of hoDaXml To True Set ComEmitXmlDecl Of hoDaXml To False Get pvComObject of hoSbFlattened to vSbFlattened Get ComGetXmlSb Of hoDaXml 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 FRMA signature element to the XML. Send ComUpdateChildContent To hoXml "Documento|TED|DD|CAF|FRMA" sSig Get ComUpdateAttrAt Of hoXml "Documento|TED|DD|CAF|FRMA" True "algoritmo" "SHA1withRSA" To iSuccess Send Destroy of hoDaXml // See what we have: Set ComEmitCompact Of hoXml To False Set ComEmitXmlDecl Of hoXml To True Get ComGetXml Of hoXml To sTemp1 Showln sTemp1 Get ComSaveXml Of hoXml "qa_data/xml_dsig/sii_cl/test_1.xml" To iSuccess End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.