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) Combine Timestamp Reply and Content File into a TimeStampDataDemonstrates how to combine a timestamp reply (RFC 3161) with a data file (any type of file) to create a TimeStampData structure (RFC 5544).
load ./chilkat.dll # This example requires the Chilkat API to have been previously unlocked. # See Global Unlock Sample for sample code. # Also see this example: # Send a TimeStamp Request to a TimeStamp Authority and get the Response # Load a timestamp reply file set bdTsr [new_CkBinData] set success [CkBinData_LoadFile $bdTsr "qa_data/tsd/sample.tsr"] if {$success != 1} then { puts "Failed to load timestamp reply file." delete_CkBinData $bdTsr exit } # Load the tsr into an ASN.1 object. set asnTsr [new_CkAsn] set success [CkAsn_LoadEncoded $asnTsr [CkBinData_getEncoded $bdTsr "base64"] "base64"] if {$success != 1} then { puts [CkAsn_lastErrorText $asnTsr] delete_CkBinData $bdTsr delete_CkAsn $asnTsr exit } # Get the timestamp reply as XML. set xmlTsr [new_CkXml] CkXml_LoadXml $xmlTsr [CkAsn_asnToXml $asnTsr] # The timestamp reply XML begins like this: # We'll want to remove the 1st "sequence" subtree. # <?xml version="1.0" encoding="utf-8"?> # <sequence> # <sequence> <---- Remove this sub-tree. # <int>00</int> # <sequence> # <utf8>Operation Okay</utf8> # </sequence> # </sequence> # <sequence> # <oid>1.2.840.113549.1.7.2</oid> # <contextSpecific tag="0" constructed="1"> # ... # Remove the 1st sub-tree.. CkXml_RemoveChildByIndex $xmlTsr 0 # In this example, the data file we're combining with the timestamp into a timestampData is a .p7m. # However, it can be any type of file (text or binary), it doesn't matter.. set bdContent [new_CkBinData] set success [CkBinData_LoadFile $bdContent "qa_data/tsd/sample.p7m"] if {$success != 1} then { puts "Failed to load content file." delete_CkBinData $bdTsr delete_CkAsn $asnTsr delete_CkXml $xmlTsr delete_CkBinData $bdContent exit } # Begin building the TimeStampData. # We'll build as XML and then convert to ASN.1 set xml [new_CkXml] CkXml_put_Tag $xml "sequence" CkXml_UpdateChildContent $xml "oid" "1.2.840.113549.1.9.16.1.31" CkXml_UpdateAttrAt $xml "contextSpecific" 1 "tag" "0" CkXml_UpdateAttrAt $xml "contextSpecific" 1 "constructed" "1" CkXml_UpdateChildContent $xml "contextSpecific|sequence|int" "01" CkXml_UpdateChildContent $xml "contextSpecific|sequence|octets" [CkBinData_getEncoded $bdContent "base64"] CkXml_UpdateAttrAt $xml "contextSpecific|sequence|contextSpecific" 1 "tag" "0" CkXml_UpdateAttrAt $xml "contextSpecific|sequence|contextSpecific" 1 "constructed" "1" # xContext is a CkXml set xContext [CkXml_GetChildWithTag $xml "contextSpecific|sequence|contextSpecific"] CkXml_AddChildTree $xContext $xmlTsr delete_CkXml $xContext # Convert the XML to ASN.1 set tsd [new_CkAsn] CkAsn_LoadAsnXml $tsd [CkXml_getXml $xml] # Write the timestamped data to a file. set success [CkAsn_WriteBinaryDer $tsd "qa_output/sample.tsd"] # Alternatively, get the tsd ASN.1 as base64.. set tsdBase64 [CkAsn_getEncodedDer $tsd "base64_mime"] puts "$tsdBase64" delete_CkBinData $bdTsr delete_CkAsn $asnTsr delete_CkXml $xmlTsr delete_CkBinData $bdContent delete_CkXml $xml delete_CkAsn $tsd |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.