Sample code for 30+ languages & platforms
Dart

CoSign PKCS7/CMS Signed Data

See more Digital Signatures Examples

Demonstrates how to add a 2nd signature to a CMS SignedData. This is to add an additional signature, SignerInfo and certificate(s) to an existing CMS signed data.

In this example, we cosign an existing pdf.p7s

Note: The CoSign method is added in Chilkat v9.5.0.89.

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();

  // If loading from a smart card, set the smartcard PIN.
  cert.smartCardPin = '0000';

  // Load a certificate in some way, such as from a smart card.
  // Chilkat provides other methods to load from a .pfx, .pem, or from the Windows certificate stores..
  try {
    cert.loadFromSmartcard('');
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  try {
    crypt.setSigningCert(cert);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Load the file to be co-signed.
  // NOTE:  This is to cosign a PDF file contained within a CMS (PKCS7) message.
  // (In other words, the PDF is contained within the CMS SignedData, rather than the other way around
  // where a CMS signature is contained within a PDF.  Use Chilkat's PDF class to sign a PDF, which is
  // to embed a CMS signature within the PDF.)
  final bd = CkBinData();
  try {
    bd.loadFile('qa_data/p7s/cosign/sample.pdf.p7s');
  } on ChilkatException {
    print('Failed to load pdf.p7s input file.');
    return;
  }

  // bd2 will contain the co-signed result.
  final bd2 = CkBinData();
  try {
    crypt.coSign(bd, cert, bd2);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  try {
    bd.writeFile('qa_output/cosigned.pdf.p7s');
  } on ChilkatException {
    print('Failed to save pdf.p7s output file.');
    return;
  }

  print('Success!');
}