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

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

See more RSA Examples

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

Note: This is a Windows-only example.

Chilkat Lianja Downloads

Lianja
llSuccess = .F.

//  First get the A3 certificate that was installed on the Windows system.
loCertStore = createobject("CkCertStore")

lcThumbprint = "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2"

//  This is specific to Windows because it is opening the Windows Current-User certificate store.
llBReadOnly = .T.
llSuccess = loCertStore.OpenCurrentUserStore(llBReadOnly)
if (llSuccess <> .T.) then
    ? loCertStore.LastErrorText
    release loCertStore
    return
endif

//  Find the certificate with the desired thumbprint
//  (There are many ways to locate a certificate.  This example chooses to find by thumbprint.)
loJson = createobject("CkJsonObject")
loJson.UpdateString("thumbprint",lcThumbprint)

loCert = createobject("CkCert")
llSuccess = loCertStore.FindCert(loJson,loCert)
if (llSuccess = .F.) then
    ? "Failed to find the certificate."
    release loCertStore
    release loJson
    release loCert
    return
endif

? "Found: " + loCert.SubjectCN

loRsa = createobject("CkRsa")

//  Provide the cert's private key
llBUsePrivateKey = .T.
llSuccess = loRsa.SetX509Cert(loCert,llBUsePrivateKey)
if (llSuccess <> .T.) then
    ? loRsa.LastErrorText
    release loCertStore
    release loJson
    release loCert
    release loRsa
    return
endif

//  Now we're ready to sign..
loFac = createobject("CkFileAccess")

//  Get bytes to be signed..
loInData = loFac.ReadEntireFile("in.dat")
loSignature = loRsa.SignBytes(loInData,"SHA-256")
if (loRsa.LastMethodSuccess <> .T.) then
    ? loRsa.LastErrorText
    release loCertStore
    release loJson
    release loCert
    release loRsa
    release loFac
    return
endif

? "Signature created."


release loCertStore
release loJson
release loCert
release loRsa
release loFac