Sample code for 30+ languages & platforms
Visual FoxPro

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

Visual FoxPro
LOCAL lnSuccess
LOCAL loCertStore
LOCAL lcThumbprint
LOCAL lnBReadOnly
LOCAL loJson
LOCAL loCert
LOCAL loRsa
LOCAL lnBUsePrivateKey
LOCAL loFac
LOCAL loInData
LOCAL loSignature

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

* Now we're ready to sign..
loFac = CreateObject('Chilkat.FileAccess')

* Get bytes to be signed..
loInData = loFac.ReadEntireFile("in.dat")
loSignature = loRsa.SignBytes(loInData,"SHA-256")
IF (loRsa.LastMethodSuccess <> 1) THEN
    ? loRsa.LastErrorText
    RELEASE loCertStore
    RELEASE loJson
    RELEASE loCert
    RELEASE loRsa
    RELEASE loFac
    CANCEL
ENDIF

? "Signature created."

RELEASE loCertStore
RELEASE loJson
RELEASE loCert
RELEASE loRsa
RELEASE loFac