Sample code for 30+ languages & platforms
Perl Requires Chilkat v10.1.2+

RSA Sign using Private Key of Certificate Type A3 (smart card / token)

Demonstrates RSA signing data using the private key of a certificate type A3 (smart card, token).

Note: This is a Windows-only example.

Chilkat Perl Downloads

Perl
use chilkat();

$success = 0;

#  First get the A3 certificate that was installed on the Windows system.
$certStore = chilkat::CkCertStore->new();

$thumbprint = "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2";

#  This is specific to Windows because it is opening the Windows Current-User certificate store.
$bReadOnly = 1;
$success = $certStore->OpenCurrentUserStore($bReadOnly);
if ($success != 1) {
    print $certStore->lastErrorText() . "\r\n";
    exit;
}

#  Find the certificate with the desired thumbprint
#  (There are many ways to locate a certificate.  This example chooses to find by thumbprint.)
$json = chilkat::CkJsonObject->new();
$json->UpdateString("thumbprint",$thumbprint);

$cert = chilkat::CkCert->new();
$success = $certStore->FindCert($json,$cert);
if ($success == 0) {
    print "Failed to find the certificate." . "\r\n";
    exit;
}

print "Found: " . $cert->subjectCN() . "\r\n";

$rsa = chilkat::CkRsa->new();

#  Provide the cert's private key
$bUsePrivateKey = 1;
$success = $rsa->SetX509Cert($cert,$bUsePrivateKey);
if ($success != 1) {
    print $rsa->lastErrorText() . "\r\n";
    exit;
}

#  Now we're ready to sign..
$dataToSign = chilkat::CkByteData->new();
$sigData = chilkat::CkByteData->new();

#  Get bytes to be signed..
$fac = chilkat::CkFileAccess->new();
$success = $fac->ReadEntireFile("in.dat",$dataToSign);

$success = $rsa->SignBytes($dataToSign,"SHA-256",$sigData);
if ($success != 1) {
    print $rsa->lastErrorText() . "\r\n";
    exit;
}

print "Signature created." . "\r\n";