Sample code for 30+ languages & platforms
PHP Extension 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 PHP Extension Downloads

PHP Extension
<?php

include("chilkat.php");

$success = false;

//  First get the A3 certificate that was installed on the Windows system.
$certStore = new CkCertStore();

$thumbprint = '12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2';

//  This is specific to Windows because it is opening the Windows Current-User certificate store.
$bReadOnly = true;
$success = $certStore->OpenCurrentUserStore($bReadOnly);
if ($success != true) {
    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.)
$json = new CkJsonObject();
$json->UpdateString('thumbprint',$thumbprint);

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

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

$rsa = new CkRsa();

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

//  Now we're ready to sign..
$dataToSign = new CkByteData();
$sigData = new CkByteData();

//  Get bytes to be signed..
$fac = new CkFileAccess();
$success = $fac->ReadEntireFile('in.dat',$dataToSign);

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

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

?>