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