Sample code for 30+ languages & platforms
Visual FoxPro

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 Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loCertStore
LOCAL lcThumbprint
LOCAL lnBReadOnly
LOCAL loJson
LOCAL loCert
LOCAL loRsa
LOCAL lnBUsePrivateKey
LOCAL lcSigBase64

lnSuccess = 0

* First get the A3 certificate that was installed on the Windows system.
loCertStore = CreateObject('Chilkat.CertStore')

lcThumbprint = "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2"

* This is specific to Windows because it is opening the Windows Current-User certificate store.
lnBReadOnly = 1
lnSuccess = loCertStore.OpenCurrentUserStore(lnBReadOnly)
IF (lnSuccess <> 1) THEN
    ? loCertStore.LastErrorText
    RELEASE loCertStore
    CANCEL
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('Chilkat.JsonObject')
loJson.UpdateString("thumbprint",lcThumbprint)

loCert = CreateObject('Chilkat.Cert')
lnSuccess = loCertStore.FindCert(loJson,loCert)
IF (lnSuccess = 0) THEN
    ? "Failed to find the certificate."
    RELEASE loCertStore
    RELEASE loJson
    RELEASE loCert
    CANCEL
ENDIF

? "Found: " + loCert.SubjectCN

loRsa = CreateObject('Chilkat.Rsa')

* Provide the cert's private key
lnBUsePrivateKey = 1
lnSuccess = loRsa.SetX509Cert(loCert,lnBUsePrivateKey)
IF (lnSuccess <> 1) THEN
    ? loRsa.LastErrorText
    RELEASE loCertStore
    RELEASE loJson
    RELEASE loCert
    RELEASE loRsa
    CANCEL
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 <> 1) THEN
    ? loRsa.LastErrorText
    RELEASE loCertStore
    RELEASE loJson
    RELEASE loCert
    RELEASE loRsa
    CANCEL
ENDIF

? "Base64 signature: " + lcSigBase64

RELEASE loCertStore
RELEASE loJson
RELEASE loCert
RELEASE loRsa