Sample code for 30+ languages & platforms
React Native

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 React Native Downloads

React Native
import { BinData, Cert, Crypt2 } from '@chilkat/react-native'

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

  const crypt = new Crypt2();
  const cert = new Cert();

  // 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('');
  } catch {
    console.log(cert.lastErrorText);
    return;
  }

  try {
    crypt.setSigningCert(cert);
  } catch {
    console.log(crypt.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.)
  const bd = new BinData();
  try {
    bd.loadFile('qa_data/p7s/cosign/sample.pdf.p7s');
  } catch {
    console.log('Failed to load pdf.p7s input file.');
    return;
  }

  // bd2 will contain the co-signed result.
  const bd2 = new BinData();
  try {
    crypt.coSign(bd, cert, bd2);
  } catch {
    console.log(crypt.lastErrorText);
    return;
  }

  try {
    bd.writeFile('qa_output/cosigned.pdf.p7s');
  } catch {
    console.log('Failed to save pdf.p7s output file.');
    return;
  }

  console.log('Success!');
}