Sample code for 30+ languages & platforms
PowerBuilder

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

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_CertStore
string ls_Thumbprint
integer li_BReadOnly
oleobject loo_Json
oleobject loo_Cert
oleobject loo_Rsa
integer li_BUsePrivateKey
string ls_SigBase64

li_Success = 0

// First get the A3 certificate that was installed on the Windows system.
loo_CertStore = create oleobject
li_rc = loo_CertStore.ConnectToNewObject("Chilkat.CertStore")
if li_rc < 0 then
    destroy loo_CertStore
    MessageBox("Error","Connecting to COM object failed")
    return
end if

ls_Thumbprint = "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2"

// This is specific to Windows because it is opening the Windows Current-User certificate store.
li_BReadOnly = 1
li_Success = loo_CertStore.OpenCurrentUserStore(li_BReadOnly)
if li_Success <> 1 then
    Write-Debug loo_CertStore.LastErrorText
    destroy loo_CertStore
    return
end if

// Find the certificate with the desired thumbprint
// (There are many ways to locate a certificate.  This example chooses to find by thumbprint.)
loo_Json = create oleobject
li_rc = loo_Json.ConnectToNewObject("Chilkat.JsonObject")

loo_Json.UpdateString("thumbprint",ls_Thumbprint)

loo_Cert = create oleobject
li_rc = loo_Cert.ConnectToNewObject("Chilkat.Cert")

li_Success = loo_CertStore.FindCert(loo_Json,loo_Cert)
if li_Success = 0 then
    Write-Debug "Failed to find the certificate."
    destroy loo_CertStore
    destroy loo_Json
    destroy loo_Cert
    return
end if

Write-Debug "Found: " + loo_Cert.SubjectCN

loo_Rsa = create oleobject
li_rc = loo_Rsa.ConnectToNewObject("Chilkat.Rsa")

// Provide the cert's private key
li_BUsePrivateKey = 1
li_Success = loo_Rsa.SetX509Cert(loo_Cert,li_BUsePrivateKey)
if li_Success <> 1 then
    Write-Debug loo_Rsa.LastErrorText
    destroy loo_CertStore
    destroy loo_Json
    destroy loo_Cert
    destroy loo_Rsa
    return
end if

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

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

// You can also choose other hash algorithms, such as SHA-1.
ls_SigBase64 = loo_Rsa.SignStringENC("text to sign","SHA-256")
if loo_Rsa.LastMethodSuccess <> 1 then
    Write-Debug loo_Rsa.LastErrorText
    destroy loo_CertStore
    destroy loo_Json
    destroy loo_Cert
    destroy loo_Rsa
    return
end if

Write-Debug "Base64 signature: " + ls_SigBase64


destroy loo_CertStore
destroy loo_Json
destroy loo_Cert
destroy loo_Rsa