Sample code for 30+ languages & platforms
Perl Requires Chilkat v9.5.0.89+

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

Chilkat Perl Downloads

Chilkat2 Perl
use strict;
use warnings;
use Chilkat2;

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

my $crypt = Chilkat2::Crypt2->new;
my $cert = Chilkat2::Cert->new;

# 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..
my $success = $cert->LoadFromSmartcard('');
if (!$success) {
    print $cert->LastErrorText, "\n";
    exit;
}

$success = $crypt->SetSigningCert($cert);
if (!$success) {
    print $crypt->LastErrorText, "\n";
    exit;
}

# 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.)
my $bd = Chilkat2::BinData->new;
$success = $bd->LoadFile('qa_data/p7s/cosign/sample.pdf.p7s');
if (!$success) {
    print "Failed to load pdf.p7s input file.\n";
    exit;
}

# bd2 will contain the co-signed result.
my $bd2 = Chilkat2::BinData->new;
$success = $crypt->CoSign($bd, $cert, $bd2);
if (!$success) {
    print $crypt->LastErrorText, "\n";
    exit;
}

$success = $bd->WriteFile('qa_output/cosigned.pdf.p7s');
if (!$success) {
    print "Failed to save pdf.p7s output file.\n";
    exit;
}

print "Success!\n";