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

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