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
(PureBasic) Decrypt a govtalk.gov.uk SOAP GovTalkMessageDemonstrates how to decrypt the content contained in the XML of a GovTalkMessage SOAP response.
IncludeFile "CkBinData.pb" IncludeFile "CkCert.pb" IncludeFile "CkXml.pb" IncludeFile "CkCrypt2.pb" Procedure ChilkatExample() ; 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... xml.i = CkXml::ckCreate() If xml.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success.i = CkXml::ckLoadXmlFile(xml,"qa_data/xml/govTalkMessageResponse.xml") If success = 0 Debug CkXml::ckLastErrorText(xml) CkXml::ckDispose(xml) ProcedureReturn EndIf Body.s = CkXml::ckGetChildContent(xml,"Body|Message|Body") Debug Body cert.i = CkCert::ckCreate() If cert.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkCert::ckLoadPfxFile(cert,"qa_data/pfx/govTalkMessage_aaa.pfx","aaa") If success = 0 Debug CkCert::ckLastErrorText(cert) CkXml::ckDispose(xml) CkCert::ckDispose(cert) ProcedureReturn EndIf crypt.i = CkCrypt2::ckCreate() If crypt.i = 0 Debug "Failed to create object." ProcedureReturn EndIf CkCrypt2::setCkCryptAlgorithm(crypt, "pki") success = CkCrypt2::ckSetDecryptCert(crypt,cert) If success = 0 Debug CkCrypt2::ckLastErrorText(crypt) CkXml::ckDispose(xml) CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) ProcedureReturn EndIf bd.i = CkBinData::ckCreate() If bd.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Append the bytes to bd. success = CkBinData::ckAppendEncoded(bd,Body,"base64") ; Decrypt in-place. success = CkCrypt2::ckDecryptBd(crypt,bd) If success = 0 Debug CkCrypt2::ckLastErrorText(crypt) CkXml::ckDispose(xml) CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) CkBinData::ckDispose(bd) ProcedureReturn EndIf ; Save the decrypted data to a file. success = CkBinData::ckWriteFile(bd,"qa_output/out.dat") ; If the decrypted data is non-text (binary) then we can examine it in an encoding, such as hex: Debug "Decrypted bytes as hex: " + CkBinData::ckGetEncoded(bd,"hex") CkXml::ckDispose(xml) CkCert::ckDispose(cert) CkCrypt2::ckDispose(crypt) CkBinData::ckDispose(bd) ProcedureReturn EndProcedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.