API Reference
Craton HSM exposes two primary interfaces: a PKCS#11 C ABI (the standard way to consume it) and a Rust library API (for embedding directly in Rust programs).
PKCS#11 C ABI
The shared library (libcraton_hsm.so / craton_hsm.dll / libcraton_hsm.dylib) exports 70+ #[no_mangle] extern "C" functions conforming to PKCS#11 v3.0 (OASIS Standard).
Any PKCS#11-aware consumer (OpenSSL engines, Java SunPKCS11, Firefox NSS, pkcs11-tool, etc.) can load the library directly.
Loading the Library
# pkcs11-tool (OpenSC)
pkcs11-tool --module /path/to/libcraton_hsm.so --list-slots
# OpenSSL (via engine or provider)
export PKCS11_MODULE_PATH=/path/to/libcraton_hsm.so
# Python (PyKCS11)
import PyKCS11
lib = PyKCS11.PyKCS11Lib()
lib.load("/path/to/libcraton_hsm.so")
Exported Functions
Initialization
| Function | Description |
|---|
C_Initialize | Initialize the Cryptoki library (runs POST self-tests) |
C_Finalize | Clean up and release resources |
C_GetInfo | Return library version and manufacturer info |
C_GetFunctionList | Return the function pointer table |
Slot and Token Management
| Function | Description |
|---|
C_GetSlotList | Enumerate available slots |
C_GetSlotInfo | Query slot properties |
C_GetTokenInfo | Query token label, serial, flags, capabilities |
C_GetMechanismList | List supported mechanisms (41 mechanisms) |
C_GetMechanismInfo | Query min/max key size, supported operations |
C_InitToken | Initialize token with SO PIN and label |
Session Management
| Function | Description |
|---|
C_OpenSession | Open a new session (R/O or R/W) |
C_CloseSession | Close a session |
C_CloseAllSessions | Close all sessions on a slot |
C_GetSessionInfo | Query session state and flags |
C_Login | Authenticate as User or SO |
C_Logout | End authenticated session |
PIN Management
| Function | Description |
|---|
C_InitPIN | SO initializes user PIN |
C_SetPIN | Change user or SO PIN |
Object Management
| Function | Description |
|---|
C_CreateObject | Create an object from a template |
C_DestroyObject | Delete an object |
C_CopyObject | Duplicate an object with template overrides |
C_GetObjectSize | Query object storage size |
C_GetAttributeValue | Read object attributes |
C_SetAttributeValue | Modify object attributes (if CKA_MODIFIABLE) |
C_FindObjectsInit | Begin object search by template |
C_FindObjects | Iterate search results |
C_FindObjectsFinal | End object search |
Key Generation
| Function | Description |
|---|
C_GenerateKey | Generate symmetric key (AES, HMAC, generic secret) |
C_GenerateKeyPair | Generate asymmetric key pair (RSA, EC, Ed25519, ML-DSA, SLH-DSA) |
Signing and Verification
| Function | Description |
|---|
C_SignInit | Initialize a signing operation |
C_Sign | Single-part sign |
C_SignUpdate | Multi-part sign (streaming) |
C_SignFinal | Finalize multi-part sign |
C_VerifyInit | Initialize a verification operation |
C_Verify | Single-part verify |
C_VerifyUpdate | Multi-part verify (streaming) |
C_VerifyFinal | Finalize multi-part verify |
Encryption and Decryption
| Function | Description |
|---|
C_EncryptInit | Initialize encryption |
C_Encrypt | Single-part encrypt |
C_EncryptUpdate | Multi-part encrypt (streaming) |
C_EncryptFinal | Finalize multi-part encrypt |
C_DecryptInit | Initialize decryption |
C_Decrypt | Single-part decrypt |
C_DecryptUpdate | Multi-part decrypt (streaming) |
C_DecryptFinal | Finalize multi-part decrypt |
Digesting
| Function | Description |
|---|
C_DigestInit | Initialize a digest operation |
C_Digest | Single-part digest |
C_DigestUpdate | Multi-part digest (streaming) |
C_DigestFinal | Finalize multi-part digest |
C_DigestKey | Include a key's value in the digest |
Key Wrapping
| Function | Description |
|---|
C_WrapKey | Export a key encrypted under another key (AES Key Wrap) |
C_UnwrapKey | Import a wrapped key |
Key Derivation
| Function | Description |
|---|
C_DeriveKey | Derive an AES or generic secret key: ECDH via CK_ECDH1_DERIVE_PARAMS (CKD_NULL, CKD_SHA256/384/512_KDF; legacy bare-point parameter uses internal HKDF-SHA256), or ML-KEM decapsulation |
Random Number Generation
| Function | Description |
|---|
C_GenerateRandom | Generate random bytes via SP 800-90A HMAC_DRBG |
C_SeedRandom | Provide additional entropy to the DRBG |
Operation State
| Function | Description |
|---|
C_GetOperationState | Serialize active operation (HMAC-authenticated) |
C_SetOperationState | Restore a serialized operation |
Supported Mechanisms
41 PKCS#11 mechanisms registered via C_GetMechanismList:
| Category | Mechanisms |
|---|
| RSA (10) | CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_PKCS, CKM_SHA256_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS, CKM_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA512_RSA_PKCS_PSS, CKM_RSA_PKCS_OAEP |
| EC (7) | CKM_EC_KEY_PAIR_GEN, CKM_ECDSA, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384, CKM_ECDSA_SHA512, CKM_ECDH1_DERIVE, CKM_ECDH1_COFACTOR_DERIVE |
| EdDSA (1) | CKM_EDDSA |
| AES (7) | CKM_AES_KEY_GEN, CKM_AES_GCM, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_AES_CTR, CKM_AES_KEY_WRAP, CKM_AES_KEY_WRAP_PAD |
| Digest (7) | CKM_SHA_1, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA3_256, CKM_SHA3_384, CKM_SHA3_512 |
| PQC (9) | CKM_ML_KEM_512, CKM_ML_KEM_768, CKM_ML_KEM_1024, CKM_ML_DSA_44, CKM_ML_DSA_65, CKM_ML_DSA_87, CKM_SLH_DSA_SHA2_128S, CKM_SLH_DSA_SHA2_256S, CKM_HYBRID_X25519_ML_KEM_768 |
Rust Library API
When used as an rlib (Rust library), the public API is organized into these modules:
craton_hsm::core — Central State
use craton_hsm::core::HsmCore;
use craton_hsm::config::HsmConfig;
// Default configuration
let hsm = HsmCore::new_default();
// Custom configuration
let config = HsmConfig::load("craton_hsm.toml")?;
let hsm = HsmCore::new(config);
// Custom crypto backend
let hsm = HsmCore::new_with_backend(config, my_backend);
craton_hsm::config — Configuration
use craton_hsm::config::{HsmConfig, TokenConfig, SecurityConfig, AlgorithmConfig, AuditConfig};
let config = HsmConfig::default();
// Or load from file:
let config = HsmConfig::load("craton_hsm.toml")?;
// Or load with validation:
let config = HsmConfig::load_validated("craton_hsm.toml")?;
See Configuration Reference for all fields.
craton_hsm::error — Error Types
use craton_hsm::error::{HsmError, HsmResult};
HsmError maps 1:1 to PKCS#11 CK_RV return codes. See Troubleshooting for common errors.
craton_hsm::crypto — Cryptographic Operations
The CryptoBackend trait defines all cryptographic operations:
use craton_hsm::crypto::backend::CryptoBackend;
// Backend is selected at HsmCore creation time:
// - Default: RustCrypto (pure Rust)
// - Optional: aws-lc-rs (FIPS-validated, via craton_hsm-enterprise)
Sub-modules:
crypto::keygen — key generation (RSA, EC, Ed25519, AES)
crypto::sign — signing (RSA PKCS#1/PSS, ECDSA, EdDSA)
crypto::encrypt — encryption (AES-GCM/CBC/CTR, RSA-OAEP)
crypto::digest — hashing (SHA-1/2/3)
crypto::derive — key derivation (ECDH shared secret, PKCS#11 EC KDFs, legacy HKDF-SHA256, derived-key template policy)
crypto::wrap — key wrapping (AES-KW, RFC 3394)
crypto::pqc — post-quantum (ML-KEM, ML-DSA, SLH-DSA)
crypto::drbg — SP 800-90A HMAC_DRBG
crypto::self_test — power-on self-tests
crypto::pairwise_test — pairwise consistency tests
craton_hsm::store — Object Storage
use craton_hsm::store::object::StoredObject;
use craton_hsm::store::attributes::ObjectStore;
use craton_hsm::store::key_material::RawKeyMaterial;
use craton_hsm::store::encrypted_store::EncryptedStore;
craton_hsm::session — Session Management
use craton_hsm::session::manager::SessionManager;
use craton_hsm::session::session::{Session, SessionState};
craton_hsm::token — Token Management
use craton_hsm::token::token::Token;
use craton_hsm::token::slot::SlotManager;
craton_hsm::audit — Audit Logging
use craton_hsm::audit::log::{AuditLog, AuditOperation, AuditResult};
Generated Rustdoc
Full Rust API documentation with type signatures is available via:
cargo doc --open --no-deps
Or online at docs.rs/craton_hsm (after crates.io publication).