SQL Server
SQL Server
Combine Timestamp Reply and Content File into a TimeStampData
See more ASN.1 Examples
Demonstrates how to combine a timestamp reply (RFC 3161) with a data file (any type of file) to create a TimeStampData structure (RFC 5544).Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- 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
DECLARE @bdTsr int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdTsr OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @bdTsr, 'LoadFile', @success OUT, 'qa_data/tsd/sample.tsr'
IF @success <> 1
BEGIN
PRINT 'Failed to load timestamp reply file.'
EXEC @hr = sp_OADestroy @bdTsr
RETURN
END
-- Load the tsr into an ASN.1 object.
DECLARE @asnTsr int
EXEC @hr = sp_OACreate 'Chilkat.Asn', @asnTsr OUT
EXEC sp_OAMethod @bdTsr, 'GetEncoded', @sTmp0 OUT, 'base64'
EXEC sp_OAMethod @asnTsr, 'LoadEncoded', @success OUT, @sTmp0, 'base64'
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @asnTsr, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @bdTsr
EXEC @hr = sp_OADestroy @asnTsr
RETURN
END
-- Get the timestamp reply as XML.
DECLARE @xmlTsr int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xmlTsr OUT
EXEC sp_OAMethod @asnTsr, 'AsnToXml', @sTmp0 OUT
EXEC sp_OAMethod @xmlTsr, 'LoadXml', @success OUT, @sTmp0
-- 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..
EXEC sp_OAMethod @xmlTsr, 'RemoveChildByIndex', NULL, 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..
DECLARE @bdContent int
EXEC @hr = sp_OACreate 'Chilkat.BinData', @bdContent OUT
EXEC sp_OAMethod @bdContent, 'LoadFile', @success OUT, 'qa_data/tsd/sample.p7m'
IF @success <> 1
BEGIN
PRINT 'Failed to load content file.'
EXEC @hr = sp_OADestroy @bdTsr
EXEC @hr = sp_OADestroy @asnTsr
EXEC @hr = sp_OADestroy @xmlTsr
EXEC @hr = sp_OADestroy @bdContent
RETURN
END
-- Begin building the TimeStampData.
-- We'll build as XML and then convert to ASN.1
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
EXEC sp_OASetProperty @xml, 'Tag', 'sequence'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'oid', '1.2.840.113549.1.9.16.1.31'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'contextSpecific', 1, 'tag', '0'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'contextSpecific', 1, 'constructed', '1'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'contextSpecific|sequence|int', '01'
EXEC sp_OAMethod @bdContent, 'GetEncoded', @sTmp0 OUT, 'base64'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'contextSpecific|sequence|octets', @sTmp0
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'contextSpecific|sequence|contextSpecific', 1, 'tag', '0'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'contextSpecific|sequence|contextSpecific', 1, 'constructed', '1'
DECLARE @xContext int
EXEC sp_OAMethod @xml, 'GetChildWithTag', @xContext OUT, 'contextSpecific|sequence|contextSpecific'
EXEC sp_OAMethod @xContext, 'AddChildTree', @success OUT, @xmlTsr
EXEC @hr = sp_OADestroy @xContext
-- Convert the XML to ASN.1
DECLARE @tsd int
EXEC @hr = sp_OACreate 'Chilkat.Asn', @tsd OUT
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
EXEC sp_OAMethod @tsd, 'LoadAsnXml', @success OUT, @sTmp0
-- Write the timestamped data to a file.
EXEC sp_OAMethod @tsd, 'WriteBinaryDer', @success OUT, 'qa_output/sample.tsd'
-- Alternatively, get the tsd ASN.1 as base64..
DECLARE @tsdBase64 nvarchar(4000)
EXEC sp_OAMethod @tsd, 'GetEncodedDer', @tsdBase64 OUT, 'base64_mime'
PRINT @tsdBase64
EXEC @hr = sp_OADestroy @bdTsr
EXEC @hr = sp_OADestroy @asnTsr
EXEC @hr = sp_OADestroy @xmlTsr
EXEC @hr = sp_OADestroy @bdContent
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @tsd
END
GO