Chilkat • HOME • Android™ • AutoIt • C • C# • C++ • Chilkat2-Python • CkPython • Classic ASP • DataFlex • Delphi DLL • Go • Java • Node.js • Objective-C • PHP Extension • Perl • PowerBuilder • PowerShell • PureBasic • Ruby • SQL Server • Swift • Tcl • Unicode C • Unicode C++ • VB.NET • VBScript • Visual Basic 6.0 • Visual FoxPro • Xojo Plugin
(AutoIt) 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
; 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" Local $bSuccess $oCrypt = ObjCreate("Chilkat.Crypt2") $oCrypt.HashAlgorithm = "sha256" $oCrypt.EncodingMode = "base64" Local $sBase64Hash = $oCrypt.HashFileENC("qa_data/hamlet.xml") $oHttp = ObjCreate("Chilkat.Http") $oRequestToken = ObjCreate("Chilkat.BinData") Local $sOptionalPolicyOid = "" Local $bAddNonce = False Local $bRequestTsaCert = True ; Create a time-stamp request token $bSuccess = $oHttp.CreateTimestampRequest("sha256",$sBase64Hash,$sOptionalPolicyOid,$bAddNonce,$bRequestTsaCert,$oRequestToken) If ($bSuccess = False) Then ConsoleWrite($oHttp.LastErrorText & @CRLF) Exit EndIf ; 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 Local $sTsaUrl = "http://timestamp.digicert.com" Local $oResp = $oHttp.PBinaryBd("POST",$sTsaUrl,$oRequestToken,"application/timestamp-query",False,False) If ($oHttp.LastMethodSuccess = False) Then ConsoleWrite($oHttp.LastErrorText & @CRLF) Exit EndIf ; Get the timestamp reply from the HTTP response object. $oTimestampReply = ObjCreate("Chilkat.BinData") $oResp.GetBodyBd($oTimestampReply) ; Convert the binary timestamp reply to XML $oAsn = ObjCreate("Chilkat.Asn") $bSuccess = $oAsn.LoadBd($oTimestampReply) If ($bSuccess = False) Then ConsoleWrite($oAsn.LastErrorText & @CRLF) Exit EndIf $oXml = ObjCreate("Chilkat.Xml") $bSuccess = $oXml.LoadXml($oAsn.AsnToXml()) ; 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 } Local $sTstInfoBase64 = $oXml.GetChildContent("sequence[1]|contextSpecific|sequence|sequence|contextSpecific|octets") $oBdTstInfo = ObjCreate("Chilkat.BinData") $oBdTstInfo.AppendEncoded($sTstInfoBase64,"base64") $oAsnTstInfo = ObjCreate("Chilkat.Asn") $bSuccess = $oAsnTstInfo.LoadBd($oBdTstInfo) If ($bSuccess = False) Then ConsoleWrite($oAsnTstInfo.LastErrorText & @CRLF) Exit EndIf $oXmlTstInfo = ObjCreate("Chilkat.Xml") $bSuccess = $oXmlTstInfo.LoadXml($oAsnTstInfo.AsnToXml()) ConsoleWrite($oXmlTstInfo.GetXml() & @CRLF) ; 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 $oSbGenTime = ObjCreate("Chilkat.StringBuilder") $oSbGenTime.DecodeAndAppend($oXmlTstInfo.GetChildContent("universal"),"base64","utf-8") ConsoleWrite($oSbGenTime.GetAsString() & @CRLF) ; Result: ; 20230316115718Z |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.