Visual FoxPro
Visual FoxPro
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 Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loXml
LOCAL lcBody
LOCAL loCert
LOCAL loCrypt
LOCAL loBd
lnSuccess = 0
* 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...
loXml = CreateObject('Chilkat.Xml')
lnSuccess = loXml.LoadXmlFile("qa_data/xml/govTalkMessageResponse.xml")
IF (lnSuccess = 0) THEN
? loXml.LastErrorText
RELEASE loXml
CANCEL
ENDIF
lcBody = loXml.GetChildContent("Body|Message|Body")
? lcBody
loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCert.LoadPfxFile("qa_data/pfx/govTalkMessage_aaa.pfx","aaa")
IF (lnSuccess = 0) THEN
? loCert.LastErrorText
RELEASE loXml
RELEASE loCert
CANCEL
ENDIF
loCrypt = CreateObject('Chilkat.Crypt2')
loCrypt.CryptAlgorithm = "pki"
lnSuccess = loCrypt.SetDecryptCert(loCert)
IF (lnSuccess = 0) THEN
? loCrypt.LastErrorText
RELEASE loXml
RELEASE loCert
RELEASE loCrypt
CANCEL
ENDIF
loBd = CreateObject('Chilkat.BinData')
* Append the bytes to bd.
lnSuccess = loBd.AppendEncoded(lcBody,"base64")
* Decrypt in-place.
lnSuccess = loCrypt.DecryptBd(loBd)
IF (lnSuccess = 0) THEN
? loCrypt.LastErrorText
RELEASE loXml
RELEASE loCert
RELEASE loCrypt
RELEASE loBd
CANCEL
ENDIF
* Save the decrypted data to a file.
lnSuccess = loBd.WriteFile("qa_output/out.dat")
* If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex:
? "Decrypted bytes as hex: " + loBd.GetEncoded("hex")
RELEASE loXml
RELEASE loCert
RELEASE loCrypt
RELEASE loBd