Sample code for 30+ languages & platforms
Lianja

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 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

// Return the RSA signature in base64 encoded form.
loRsa.EncodingMode = "base64"

// Sign the utf-8 byte representation of the string.
loRsa.Charset = "utf-8"

// You can also choose other hash algorithms, such as SHA-1.
lcSigBase64 = loRsa.SignStringENC("text to sign","SHA-256")
if (loRsa.LastMethodSuccess <> .T.) then
    ? loRsa.LastErrorText
    release loCertStore
    release loJson
    release loCert
    release loRsa
    return
endif

? "Base64 signature: " + lcSigBase64


release loCertStore
release loJson
release loCert
release loRsa