Lianja Requires Chilkat v10.1.2+
Lianja
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
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