Sample code for 30+ languages & platforms
Dart

Create Egypt ITIDA CAdES-BES .p7s Signature (with strings in-memory)

See more Egypt ITIDA Examples

Demonstrates how to create a .p7s signature that fits Egypt's ITIDA requirements.

Note: This example requires Chilkat v9.5.0.75 or greater.

Chilkat Dart Downloads

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

void main() {
  // This example assumes the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  final crypt = CkCrypt2();

  final cert = CkCert();

  // There are many ways to load the certificate.  
  // This example was created for a customer using an ePass2003 USB token.
  // Assuming the USB token is the only source of a hardware-based private key..
  try {
    cert.loadFromSmartcard('');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Tell the crypt component to use this cert.
  try {
    crypt.setSigningCert(cert);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  final cmsOptions = CkJsonObject();
  // Setting "DigestData" causes OID 1.2.840.113549.1.7.5 (digestData) to be used.
  cmsOptions.updateBool('DigestData', true);
  cmsOptions.updateBool('OmitAlgorithmIdNull', true);
  crypt.cmsOptions = cmsOptions.emit();

  // The CadesEnabled property applies to all methods that create CMS/PKCS7 signatures. 
  // To create a CAdES-BES signature, set this property equal to true. 
  crypt.cadesEnabled = true;

  crypt.hashAlgorithm = 'sha256';

  final jsonSigningAttrs = CkJsonObject();
  jsonSigningAttrs.updateInt('contentType', 1);
  jsonSigningAttrs.updateInt('signingTime', 1);
  jsonSigningAttrs.updateInt('messageDigest', 1);
  jsonSigningAttrs.updateInt('signingCertificateV2', 1);
  crypt.signingAttributes = jsonSigningAttrs.emit();

  // By default, all the certs in the chain of authentication are included in the signature.
  // If desired, we can choose to only include the signing certificate:
  crypt.includeCertChain = false;

  // Make sure we sign the utf-8 byte representation of the JSON string
  crypt.charset = 'utf-8';

  // Create the CAdES-BES signature.
  final textToSign = '"issuer""address""branchID""0""country""EG""regionCity...';

  crypt.encodingMode = 'base64';
  final String sigBase64;
  try {
    sigBase64 = crypt.signStringENC(textToSign);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  print('Base64 signature:');
  print(sigBase64);
}