Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Tcl) Decrypt a govtalk.gov.uk SOAP GovTalkMessageDemonstrates how to decrypt the content contained in the XML of a GovTalkMessage SOAP response.
load ./chilkat.dll # 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... set xml [new_CkXml] set success [CkXml_LoadXmlFile $xml "qa_data/xml/govTalkMessageResponse.xml"] if {$success == 0} then { puts [CkXml_lastErrorText $xml] delete_CkXml $xml exit } set Body [CkXml_getChildContent $xml "Body|Message|Body"] puts "$Body" set cert [new_CkCert] set success [CkCert_LoadPfxFile $cert "qa_data/pfx/govTalkMessage_aaa.pfx" "aaa"] if {$success == 0} then { puts [CkCert_lastErrorText $cert] delete_CkXml $xml delete_CkCert $cert exit } set crypt [new_CkCrypt2] CkCrypt2_put_CryptAlgorithm $crypt "pki" set success [CkCrypt2_SetDecryptCert $crypt $cert] if {$success == 0} then { puts [CkCrypt2_lastErrorText $crypt] delete_CkXml $xml delete_CkCert $cert delete_CkCrypt2 $crypt exit } set bd [new_CkBinData] # Append the bytes to bd. set success [CkBinData_AppendEncoded $bd $Body "base64"] # Decrypt in-place. set success [CkCrypt2_DecryptBd $crypt $bd] if {$success == 0} then { puts [CkCrypt2_lastErrorText $crypt] delete_CkXml $xml delete_CkCert $cert delete_CkCrypt2 $crypt delete_CkBinData $bd exit } # Save the decrypted data to a file. set success [CkBinData_WriteFile $bd "qa_output/out.dat"] # If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex: puts "Decrypted bytes as hex: [CkBinData_getEncoded $bd hex]" delete_CkXml $xml delete_CkCert $cert delete_CkCrypt2 $crypt delete_CkBinData $bd |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.