SQL Server
SQL Server
Calculate HRMC IRMark
See more XML Digital Signatures Examples
Demonstrates how to calculate an IRmark for an HMRC GovTalkMessage XML document.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)
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- First build a sample (but incomplete) GovTalkMessage.
-- You can replace this code with a call to LoadXml or LoadXmlFile..
--
-- Note: The online tool at https://tools.chilkat.io/xmlCreate.cshtml
-- can be used to generate XML code that creates a given XML document.
DECLARE @xml int
EXEC @hr = sp_OACreate 'Chilkat.Xml', @xml OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OASetProperty @xml, 'Tag', 'GovTalkMessage'
DECLARE @success int
EXEC sp_OAMethod @xml, 'AddAttribute', @success OUT, 'xmlns', 'http://www.govtalk.gov.uk/CM/envelope'
EXEC sp_OAMethod @xml, 'UpdateAttrAt', @success OUT, 'Body|Message', 1, 'xmlns', 'urn:g3.ge:dea:call:SendDocument:v1'
EXEC sp_OAMethod @xml, 'UpdateChildContent', NULL, 'Body|Message', '................'
-- This is the XML created:
-- <?xml version="1.0" encoding="utf-8" ?>
-- <GovTalkMessage xmlns="http://www.govtalk.gov.uk/CM/envelope">
-- <Body>
-- <Message xmlns="urn:g3.ge:dea:call:SendDocument:v1">................</Message>
-- </Body>
-- </GovTalkMessage>
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
PRINT @sTmp0
-- Canonicalize the XML (using C14N)
DECLARE @xdsig int
EXEC @hr = sp_OACreate 'Chilkat.XmlDSig', @xdsig OUT
DECLARE @withComments int
SELECT @withComments = 0
DECLARE @canonXml nvarchar(4000)
EXEC sp_OAMethod @xml, 'GetXml', @sTmp0 OUT
EXEC sp_OAMethod @xdsig, 'CanonicalizeXml', @canonXml OUT, @sTmp0, 'C14N', @withComments
-- Return the base64 SHA-1 HASH of the canonical XML.
DECLARE @crypt int
EXEC @hr = sp_OACreate 'Chilkat.Crypt2', @crypt OUT
EXEC sp_OASetProperty @crypt, 'HashAlgorithm', 'sha1'
EXEC sp_OASetProperty @crypt, 'EncodingMode', 'base64'
DECLARE @irmark nvarchar(4000)
EXEC sp_OAMethod @crypt, 'HashStringENC', @irmark OUT, @canonXml
PRINT 'IRMark = ' + @irmark
EXEC @hr = sp_OADestroy @xml
EXEC @hr = sp_OADestroy @xdsig
EXEC @hr = sp_OADestroy @crypt
END
GO