Sample code for 30+ languages & platforms
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

AutoIt
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)