VB.NET
VB.NET
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 VB.NET Downloads
Dim success As Boolean = 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...
Dim xml As New Chilkat.Xml
success = xml.LoadXmlFile("qa_data/xml/govTalkMessageResponse.xml")
If (success = False) Then
Debug.WriteLine(xml.LastErrorText)
Exit Sub
End If
Dim Body As String = xml.GetChildContent("Body|Message|Body")
Debug.WriteLine(Body)
Dim cert As New Chilkat.Cert
success = cert.LoadPfxFile("qa_data/pfx/govTalkMessage_aaa.pfx","aaa")
If (success = False) Then
Debug.WriteLine(cert.LastErrorText)
Exit Sub
End If
Dim crypt As New Chilkat.Crypt2
crypt.CryptAlgorithm = "pki"
success = crypt.SetDecryptCert(cert)
If (success = False) Then
Debug.WriteLine(crypt.LastErrorText)
Exit Sub
End If
Dim bd As New Chilkat.BinData
' Append the bytes to bd.
success = bd.AppendEncoded(Body,"base64")
' Decrypt in-place.
success = crypt.DecryptBd(bd)
If (success = False) Then
Debug.WriteLine(crypt.LastErrorText)
Exit Sub
End If
' Save the decrypted data to a file.
success = bd.WriteFile("qa_output/out.dat")
' If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex:
Debug.WriteLine("Decrypted bytes as hex: " & bd.GetEncoded("hex"))