Sample code for 30+ languages & platforms
Dart

Calculate HRMC IRMark

See more XML Digital Signatures Examples

Demonstrates how to calculate an IRmark for an HMRC GovTalkMessage XML document.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // 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.
  final xml = CkXml();
  xml.tag = 'GovTalkMessage';
  xml.addAttribute('xmlns', 'http://www.govtalk.gov.uk/CM/envelope');
  xml.updateAttrAt('Body|Message', true, 'xmlns', 'urn:g3.ge:dea:call:SendDocument:v1');
  xml.updateChildContent('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>

  print(xml.getXml());

  // Canonicalize the XML (using C14N)
  final xdsig = CkXmlDSig();
  final withComments = false;
  final canonXml = xdsig.canonicalizeXml(xml.getXml(), 'C14N', withComments);

  // Return the base64 SHA-1 HASH of the canonical XML.
  final crypt = CkCrypt2();
  crypt.hashAlgorithm = 'sha1';
  crypt.encodingMode = 'base64';
  final irmark = crypt.hashStringENC(canonXml);

  print('IRMark = $irmark');
}