Perl Requires Chilkat v9.5.0.78+
Chilkat2 Perl
Create a CAdES-T Signature
See more CAdES Examples
Demonstrates how to create a signature with an external timestamp that certifies the time of signing. This requires an online TSA (Time Stamping Authority) service that is capable of producing RFC 3161 compliant timestamps.Chilkat Perl Downloads
use strict;
use warnings;
use Chilkat2;
# This example requires the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.
my $crypt = Chilkat2::Crypt2->new;
# This example will use a certificate + private key from a .pfx/.p12 file.
# On Windows systems, it is also possible to use certs on smartcards/usb tokens or certs pre-installed in the Windows registry.
my $cert = Chilkat2::Cert->new;
my $pfxPath = 'qa_data/pfx/myCertAndKey.p12';
my $pfxPassword = 'test123';
my $success = $cert->LoadPfxFile($pfxPath, $pfxPassword);
if (!$success) {
print $cert->LastErrorText, "\n";
exit;
}
$success = $crypt->SetSigningCert($cert);
# Use SHA-256 rather than the default of SHA-1
$crypt->HashAlgorithm('sha256');
# Create JSON that tells Chilkat what signing attributes to include:
my $attrs = Chilkat2::JsonObject->new;
$attrs->UpdateBool('contentType', 1);
$attrs->UpdateBool('signingTime', 1);
$attrs->UpdateBool('messageDigest', 1);
$attrs->UpdateBool('signingCertificateV2', 1);
# A CAdES-T signature is one that includes a timestampToken created by an online TSA (time stamping authority).
# We must include the TSA's URL, as well as a few options to indicate what is desired.
# Except for the TSA URL, the options shown here are typically what you would need.
$attrs->UpdateBool('timestampToken.enabled', 1);
$attrs->UpdateString('timestampToken.tsaUrl', 'https://freetsa.org/tsr');
$attrs->UpdateBool('timestampToken.addNonce', 0);
$attrs->UpdateBool('timestampToken.requestTsaCert', 1);
$attrs->UpdateString('timestampToken.hashAlg', 'sha256');
$crypt->SigningAttributes($attrs->Emit());
my $inFile = 'qa_data/json/sample.json';
my $outFile = 'qa_output/sample_cades_t.p7m';
# This creates the CAdES-T signature. During the signature creation, it
# communicates with the TSA to get a timestampToken.
$success = $crypt->CreateP7M($inFile, $outFile);
if (!$success) {
print $crypt->LastErrorText, "\n";
exit;
}
print "Success.\n";