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
(DataFlex) Extract TSTInfo from RFC3161 Timestamp ReplySee more HTTP ExamplesSends an RFC 3161 timestamp request to a TSA (Timestamp Authority) server and converts the timestamp reply to XML, and then extracts the TSTInfo from the XML and converts it to XML. For more information, see https://www.ietf.org/rfc/rfc3161.txt
Use ChilkatAx-win32.pkg Procedure Test Boolean iSuccess Handle hoCrypt String sBase64Hash Handle hoHttp Variant vRequestToken Handle hoRequestToken String sOptionalPolicyOid Boolean iAddNonce Boolean iRequestTsaCert String sTsaUrl Variant vResp Handle hoResp Variant vTimestampReply Handle hoTimestampReply Handle hoAsn Handle hoXml String sTstInfoBase64 Variant vBdTstInfo Handle hoBdTstInfo TstInfo Handle hoAsnTstInfo TstInfo Handle hoXmlTstInfo Handle hoSbGenTime String sTemp1 Boolean bTemp1 // Note: Requires Chilkat v9.5.0.75 or greater. // This requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. // First sha-256 hash the data that is to be timestamped. // In this example, the data is the string "Hello World" Get Create (RefClass(cComChilkatCrypt2)) To hoCrypt If (Not(IsComObjectCreated(hoCrypt))) Begin Send CreateComObject of hoCrypt End Set ComHashAlgorithm Of hoCrypt To "sha256" Set ComEncodingMode Of hoCrypt To "base64" Get ComHashFileENC Of hoCrypt "qa_data/hamlet.xml" To sBase64Hash Get Create (RefClass(cComChilkatHttp)) To hoHttp If (Not(IsComObjectCreated(hoHttp))) Begin Send CreateComObject of hoHttp End Get Create (RefClass(cComChilkatBinData)) To hoRequestToken If (Not(IsComObjectCreated(hoRequestToken))) Begin Send CreateComObject of hoRequestToken End Move "" To sOptionalPolicyOid Move False To iAddNonce Move True To iRequestTsaCert // Create a time-stamp request token Get pvComObject of hoRequestToken to vRequestToken Get ComCreateTimestampRequest Of hoHttp "sha256" sBase64Hash sOptionalPolicyOid iAddNonce iRequestTsaCert vRequestToken To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End // Send the time-stamp request token to the TSA. // This is the equivalent of the following CURL command: // curl -H "Content-Type: application/timestamp-query" --data-binary '@file.tsq' http://timestamp.digicert.com > file.tsr Move "http://timestamp.digicert.com" To sTsaUrl Get pvComObject of hoRequestToken to vRequestToken Get ComPBinaryBd Of hoHttp "POST" sTsaUrl vRequestToken "application/timestamp-query" False False To vResp If (IsComObject(vResp)) Begin Get Create (RefClass(cComChilkatHttpResponse)) To hoResp Set pvComObject Of hoResp To vResp End Get ComLastMethodSuccess Of hoHttp To bTemp1 If (bTemp1 = False) Begin Get ComLastErrorText Of hoHttp To sTemp1 Showln sTemp1 Procedure_Return End // Get the timestamp reply from the HTTP response object. Get Create (RefClass(cComChilkatBinData)) To hoTimestampReply If (Not(IsComObjectCreated(hoTimestampReply))) Begin Send CreateComObject of hoTimestampReply End Get pvComObject of hoTimestampReply to vTimestampReply Get ComGetBodyBd Of hoResp vTimestampReply To iSuccess Send Destroy of hoResp // Convert the binary timestamp reply to XML Get Create (RefClass(cComChilkatAsn)) To hoAsn If (Not(IsComObjectCreated(hoAsn))) Begin Send CreateComObject of hoAsn End Get pvComObject of hoTimestampReply to vTimestampReply Get ComLoadBd Of hoAsn vTimestampReply To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAsn To sTemp1 Showln sTemp1 Procedure_Return End Get Create (RefClass(cComChilkatXml)) To hoXml If (Not(IsComObjectCreated(hoXml))) Begin Send CreateComObject of hoXml End Get ComAsnToXml Of hoAsn To sTemp1 Get ComLoadXml Of hoXml sTemp1 To iSuccess // Extract the TSTInfo from the XML. // The TSTInfo is this base64 encoded ASN.1 // TSTInfo ::= SEQUENCE { // version INTEGER { v1(1) }, // policy TSAPolicyId, // messageImprint MessageImprint, // -- MUST have the same value as the similar field in // -- TimeStampReq // serialNumber INTEGER, // -- Time-Stamping users MUST be ready to accommodate integers // -- up to 160 bits. // genTime GeneralizedTime, // accuracy Accuracy OPTIONAL, // ordering BOOLEAN DEFAULT FALSE, // nonce INTEGER OPTIONAL, // -- MUST be present if the similar field was present // -- in TimeStampReq. In that case it MUST have the same value. // tsa [0] GeneralName OPTIONAL, // extensions [1] IMPLICIT Extensions OPTIONAL } Get ComGetChildContent Of hoXml "sequence[1]|contextSpecific|sequence|sequence|contextSpecific|octets" To sTstInfoBase64 Get Create (RefClass(cComChilkatBinData)) To hoBdTstInfo If (Not(IsComObjectCreated(hoBdTstInfo))) Begin Send CreateComObject of hoBdTstInfo End Get ComAppendEncoded Of hoBdTstInfo sTstInfoBase64 "base64" To iSuccess Get Create (RefClass(cComChilkatAsn)) To hoAsnTstInfo If (Not(IsComObjectCreated(hoAsnTstInfo))) Begin Send CreateComObject of hoAsnTstInfo End Get pvComObject of hoBdTstInfo to vBdTstInfo Get ComLoadBd Of hoAsnTstInfo vBdTstInfo To iSuccess If (iSuccess = False) Begin Get ComLastErrorText Of hoAsnTstInfo To sTemp1 Showln sTemp1 Procedure_Return End Get Create (RefClass(cComChilkatXml)) To hoXmlTstInfo If (Not(IsComObjectCreated(hoXmlTstInfo))) Begin Send CreateComObject of hoXmlTstInfo End Get ComAsnToXml Of hoAsnTstInfo To sTemp1 Get ComLoadXml Of hoXmlTstInfo sTemp1 To iSuccess Get ComGetXml Of hoXmlTstInfo To sTemp1 Showln sTemp1 // Here's the TSTInfo XML: // <?xml version="1.0" encoding="utf-8"?> // <sequence> // <int>01</int> // <oid>2.16.840.1.114412.7.1</oid> // <sequence> // <sequence> // <oid>2.16.840.1.101.3.4.2.1</oid> // <null/> // </sequence> // <octets>4sRRyWOzC7EOic4fQ9+Op1pa10DbgoBGjBvkq09LZmE=</octets> // </sequence> // <int>00AD2C86E49872597B60F87D5C54BCFFAE</int> // <universal tag="24" constructed="0">MjAyMzAzMTYxMTQ5NTJa</universal> // </sequence> // The genTime (GeneralizedTime) is contained in the final "universal" XML element and is // in base64. It is the time at which the time-stamp token has been created by // the TSA. After decoding from base64, it is: // // The syntax is: YYYYMMDDhhmmss[.s...]Z // Example: 19990609001326.34352Z Get Create (RefClass(cComChilkatStringBuilder)) To hoSbGenTime If (Not(IsComObjectCreated(hoSbGenTime))) Begin Send CreateComObject of hoSbGenTime End Get ComGetChildContent Of hoXmlTstInfo "universal" To sTemp1 Get ComDecodeAndAppend Of hoSbGenTime sTemp1 "base64" "utf-8" To iSuccess Get ComGetAsString Of hoSbGenTime To sTemp1 Showln sTemp1 // Result: // 20230316115718Z End_Procedure |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.