Perl Requires Chilkat v10.1.2+
Chilkat2 Perl
RSA Sign String using Private Key of Certificate Type A3 (smart card / token)
See more RSA Examples
Demonstrates RSA signing a string using the private key of a certificate type A3 (smart card, token).Note: This is a Windows-only example.
Chilkat Perl Downloads
use strict;
use warnings;
use Chilkat2;
# First get the A3 certificate that was installed on the Windows system.
my $certStore = Chilkat2::CertStore->new;
my $thumbprint = '12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2';
# This is specific to Windows because it is opening the Windows Current-User certificate store.
my $bReadOnly = 1;
my $success = $certStore->OpenCurrentUserStore($bReadOnly);
if (!$success) {
print $certStore->LastErrorText, "\n";
exit;
}
# Find the certificate with the desired thumbprint
# (There are many ways to locate a certificate. This example chooses to find by thumbprint.)
my $json = Chilkat2::JsonObject->new;
$json->UpdateString('thumbprint', $thumbprint);
my $cert = Chilkat2::Cert->new;
$success = $certStore->FindCert($json, $cert);
if (!$success) {
print "Failed to find the certificate.\n";
exit;
}
print 'Found: ', $cert->SubjectCN, "\n";
my $rsa = Chilkat2::Rsa->new;
# Provide the cert's private key
my $bUsePrivateKey = 1;
$success = $rsa->SetX509Cert($cert, $bUsePrivateKey);
if (!$success) {
print $rsa->LastErrorText, "\n";
exit;
}
# Return the RSA signature in base64 encoded form.
$rsa->EncodingMode('base64');
# Sign the utf-8 byte representation of the string.
$rsa->Charset('utf-8');
# You can also choose other hash algorithms, such as SHA-1.
my $sigBase64 = $rsa->SignStringENC('text to sign', 'SHA-256');
if (!$rsa->LastMethodSuccess) {
print $rsa->LastErrorText, "\n";
exit;
}
print 'Base64 signature: ', $sigBase64, "\n";