Perl
Chilkat2 Perl
Get Certificates within XML Signature
See more XML Digital Signatures Examples
Demonstrates how to get the certificates contained within an XML signature.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 $sbXml = Chilkat2::StringBuilder->new;
# Load XML containing one or more signatures.
my $success = $sbXml->LoadFile('qa_data/xml_dsig_valid_samples/multipleSigners/sp.pdf.XAdES.xml', 'utf-8');
if (!$success) {
print "Failed to load the XML file..\n";
exit;
}
my $dsig = Chilkat2::XmlDSig->new;
# First load the XML containing the signatures to be verified.
# Note that this particular Signature already contains the RSA public key that will be used
# for verification.
$success = $dsig->LoadSignatureSb($sbXml);
if (!$success) {
print $dsig->LastErrorText, "\n";
exit;
}
# For each signature, verify and also get the certificate(s) contained within each Signature.
my $i = 0;
my $saCerts = Chilkat2::StringArray->new;
my $cert = Chilkat2::Cert->new;
print 'numSignatures = ', $dsig->NumSignatures, "\n";
while ($i < $dsig->NumSignatures) {
# Select the Nth signature by setting the Selector property.
$dsig->Selector($i);
my $bVerifyReferenceDigests = 1;
my $bVerified = $dsig->VerifySignature($bVerifyReferenceDigests);
print 'Signature ', ($i + 1), ' verified = ', ($bVerified ? 1 : 0), "\n";
# Get the certificates embedded in this signature.
$saCerts->Clear();
$success = $dsig->GetCerts($saCerts);
if ($success) {
my $j = 0;
while ($j < $saCerts->Count) {
$success = $cert->LoadFromBase64($saCerts->GetString($j));
if ($success) {
print ' ', $cert->SubjectDN, "\n";
}
$j = $j + 1;
}
}
$i = $i + 1;
}