Sample code for 30+ languages & platforms
Java

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

Java
import com.chilkatsoft.*;

public class ChilkatExample {

  static {
    try {
        System.loadLibrary("chilkat");
    } catch (UnsatisfiedLinkError e) {
      System.err.println("Native code library failed to load.\n" + e);
      System.exit(1);
    }
  }

  public static void main(String argv[])
  {
    boolean success = false;

    // First get the A3 certificate that was installed on the Windows system.
    CkCertStore certStore = new CkCertStore();

    String thumbprint = "12c1dd8015f3f03f7b1fa619dc24e2493ca8b4b2";

    // This is specific to Windows because it is opening the Windows Current-User certificate store.
    boolean bReadOnly = true;
    success = certStore.OpenCurrentUserStore(bReadOnly);
    if (success != true) {
        System.out.println(certStore.lastErrorText());
        return;
        }

    // Find the certificate with the desired thumbprint
    // (There are many ways to locate a certificate.  This example chooses to find by thumbprint.)
    CkJsonObject json = new CkJsonObject();
    json.UpdateString("thumbprint",thumbprint);

    CkCert cert = new CkCert();
    success = certStore.FindCert(json,cert);
    if (success == false) {
        System.out.println("Failed to find the certificate.");
        return;
        }

    System.out.println("Found: " + cert.subjectCN());

    CkRsa rsa = new CkRsa();

    // Provide the cert's private key
    boolean bUsePrivateKey = true;
    success = rsa.SetX509Cert(cert,bUsePrivateKey);
    if (success != true) {
        System.out.println(rsa.lastErrorText());
        return;
        }

    // Return the RSA signature in base64 encoded form.
    rsa.put_EncodingMode("base64");

    // Sign the utf-8 byte representation of the string.
    rsa.put_Charset("utf-8");

    // You can also choose other hash algorithms, such as SHA-1.
    String sigBase64 = rsa.signStringENC("text to sign","SHA-256");
    if (rsa.get_LastMethodSuccess() != true) {
        System.out.println(rsa.lastErrorText());
        return;
        }

    System.out.println("Base64 signature: " + sigBase64);
  }
}