Sample code for 30+ languages & platforms
Dart

PKCS11 Find Private Key by Label

See more PKCS11 Examples

Demonstrates how to find a private key based on a user-specified label.

Note: This example requires Chilkat v9.5.0.96 or later.

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.
  // For example:
  pkcs11.sharedLibPath = 'C:/Program Files (x86)/Gemalto/IDGo 800 PKCS#11/IDPrimePKCS11.dll';

  // Use your HSM's PIN.
  final pin = '0000';

  // Normal user = 1
  final userType = 1;

  // Establish a logged-on user session with the HSM.
  try {
    pkcs11.quickSession(userType, pin);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

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

  // Find an RSA private key with the label "MySshKey".
  // Here's an example of how the key was originally imported: 
  // PKCS11 Import SSH Key
  jsonTemplate.updateString('class', 'private_key');
  jsonTemplate.updateString('key_type', 'rsa');
  jsonTemplate.updateString('label', 'MySshKey');

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

  // The private key handle is only valid during the PKCS11 session.
  // If you wish to use the private key in another PKCS11 session,
  // you'll first need to find it.  See:  
  print('private key handle: $privKeyHandle');

  // Do whatever you wish with the private key handle...
  // ...
  // ...

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