AutoIt
AutoIt
SII Chile - FRMT Signature Computation and Add to XML
See more XML Digital Signatures Examples
Compute the FRMT signature and add to the XML. This is the RSA signature of the SHA-1 digest of the "flattened" DD element.Chilkat AutoIt Downloads
Local $bSuccess = False
; 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
$oXml = ObjCreate("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>
$bSuccess = $oXml.LoadXmlFile("qa_data/xml_dsig/sii_cl/test_1.xml")
If ($bSuccess = False) Then
ConsoleWrite("Failed to load initial XML file." & @CRLF)
Exit
EndIf
; Get a reference to the "DD" element
Local $oDdXml = $oXml.FindChild("Documento|TED|DD")
If ($oXml.LastMethodSuccess = False) Then
ConsoleWrite("Failed to find DD element" & @CRLF)
Exit
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),
$oSbFlattened = ObjCreate("Chilkat.StringBuilder")
$oDdXml.EmitCompact = True
$oDdXml.EmitXmlDecl = False
$oDdXml.GetXmlSb($oSbFlattened)
; 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.
$oPrivKey = ObjCreate("Chilkat.PrivateKey")
$bSuccess = $oPrivKey.LoadAnyFormatFile("qa_data/rsa/rsaPrivKey_pkcs8.pem","")
If ($bSuccess = False) Then
ConsoleWrite($oPrivKey.LastErrorText & @CRLF)
Exit
EndIf
$oRsa = ObjCreate("Chilkat.Rsa")
$oRsa.UsePrivateKey($oPrivKey)
$oRsa.EncodingMode = "base64"
$oRsa.Charset = "iso-8859-1"
Local $sig = $oRsa.SignStringENC($oSbFlattened.GetAsString(),"sha1")
; Add the FRMT signature element to the XML.
$oXml.UpdateChildContent "Documento|TED|FRMT",$sig
$oXml.UpdateAttrAt("Documento|TED|FRMT",True,"algoritmo","SHA1withRSA")
; See what we have:
$oXml.EmitCompact = False
$oXml.EmitXmlDecl = True
ConsoleWrite($oXml.GetXml() & @CRLF)