AutoIt
AutoIt
Decrypt a govtalk.gov.uk SOAP GovTalkMessage
See more Encryption Examples
Demonstrates how to decrypt the content contained in the XML of a GovTalkMessage SOAP response.Chilkat AutoIt Downloads
Local $bSuccess = False
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; The GovTalkMessage response looks something like this:
; <?xml version="1.0" encoding="utf-8"?>
; <GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
; <EnvelopeVersion>3.1</EnvelopeVersion>
; <Header>
; <MessageDetails>
; <Class>CSSZ_DZDPN</Class>
; <Qualifier>request</Qualifier>
; <Function>submit</Function>
; <TransactionID />
; <AuditID />
; <CorrelationID>aaaaa</CorrelationID>
; <ResponseEndPoint PollInterval="0" />
; <Transformation>XML</Transformation>
; <GatewayTest />
; <GatewayTimestamp />
; </MessageDetails>
; <SenderDetails>
; <IDAuthentication>
; <SenderID />
; <Authentication>
; <Method>clear</Method>
; <Role />
; <Value />
; </Authentication>
; </IDAuthentication>
; <X509Certificate />
; <EmailAddress>somebody@example.com</EmailAddress>
; </SenderDetails>
; </Header>
; <GovTalkDetails>
; <Keys>
; <Key Type="vars">9999999999</Key>
; </Keys>
; <GatewayAdditions>
; <Source>VREP</Source>
; </GatewayAdditions>
; </GovTalkDetails>
; <Body>
; <Message xmlns="http://www.cssz.cz/XMLSchema/envelope" version="1.2" eType="DZDPN20">
; <Header>
; <Signature xmlns:dt="urn:schemas-microsoft-com:datatypes" dt:dt="bin.base64">MIIJ0A ... UMw=
; </Signature>
; <Vendor productName="some product name" version="2019" />
; </Header>
; <Body xmlns:dt="urn:schemas-microsoft-com:datatypes" encrypted="yes" contentEncoding="gzip" dt:dt="bin.base64">MIIF2w ... N2vW</Body>
; </Message>
; </Body>
; </GovTalkMessage>
; We want to get the content of the Body and decrypt it.
; First, let's get the content of the Body XML element, which is a base64 string starting with MIIF2w...
$oXml = ObjCreate("Chilkat.Xml")
$bSuccess = $oXml.LoadXmlFile("qa_data/xml/govTalkMessageResponse.xml")
If ($bSuccess = False) Then
ConsoleWrite($oXml.LastErrorText & @CRLF)
Exit
EndIf
Local $sBody = $oXml.GetChildContent("Body|Message|Body")
ConsoleWrite($sBody & @CRLF)
$oCert = ObjCreate("Chilkat.Cert")
$bSuccess = $oCert.LoadPfxFile("qa_data/pfx/govTalkMessage_aaa.pfx","aaa")
If ($bSuccess = False) Then
ConsoleWrite($oCert.LastErrorText & @CRLF)
Exit
EndIf
$oCrypt = ObjCreate("Chilkat.Crypt2")
$oCrypt.CryptAlgorithm = "pki"
$bSuccess = $oCrypt.SetDecryptCert($oCert)
If ($bSuccess = False) Then
ConsoleWrite($oCrypt.LastErrorText & @CRLF)
Exit
EndIf
$oBd = ObjCreate("Chilkat.BinData")
; Append the bytes to bd.
$bSuccess = $oBd.AppendEncoded($sBody,"base64")
; Decrypt in-place.
$bSuccess = $oCrypt.DecryptBd($oBd)
If ($bSuccess = False) Then
ConsoleWrite($oCrypt.LastErrorText & @CRLF)
Exit
EndIf
; Save the decrypted data to a file.
$bSuccess = $oBd.WriteFile("qa_output/out.dat")
; If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex:
ConsoleWrite("Decrypted bytes as hex: " & $oBd.GetEncoded("hex") & @CRLF)