Sample code for 30+ languages & platforms
Dart Requires Chilkat v11.0.0+

PKCS11 Export Public Key from HSM

See more PKCS11 Examples

Demonstrates how to export a public key from a smartcard or token.

Chilkat Dart Downloads

Dart
import 'package:chilkat/chilkat.dart';

void main() {
  // This example requires the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // Note: Chilkat's PKCS11 implementation runs on Windows, Linux, Mac OS X, and other supported operating systems.

  final pkcs11 = CkPkcs11();

  // Use the PKCS11 driver (.dll, .so, .dylib) for your particular HSM.
  // (The format of the path will change with the operating system.  Obviously, "C:/" is not used on non-Windows systems.
  pkcs11.sharedLibPath = 'C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS1164.dll';

  // Establish a logged-on session. (We can typically skip the login by passing an empty PIN if only working with public keys)
  // Use your actual PIN here, or an empty string to skip login.
  final pin = '0000';
  final userType = 1;
  try {
    pkcs11.quickSession(userType, pin);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Get the handle of the public key we wish to export.
  // You can find public keys in many different ways.
  // This example will search for a public key by label.

  // Provide a template to find a PKCS11 object.
  final jsonTemplate = CkJsonObject();

  // Find the public key with the label "Belgium eHealth".
  jsonTemplate.updateString('class', 'public_key');
  jsonTemplate.updateString('label', 'Belgium eHealth');

  final pubKeyHandle = pkcs11.findObject(jsonTemplate);
  if (pubKeyHandle == 0) {
    print(pkcs11.lastErrorText);
    return;
  }

  // Export to a Chilkat public key object.
  final pubKey = CkPublicKey();
  try {
    pkcs11.exportPublicKey(pubKeyHandle, pubKey);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // Get the public key as PKCS8 PEM.
  print(pubKey.getPem(false));

  pkcs11.logout();
  pkcs11.closeSession();
}