r2d2-cryptoki

Crates.ior2d2-cryptoki
lib.rsr2d2-cryptoki
version0.4.0-rc.0
created_at2023-02-11 21:16:07.320063+00
updated_at2025-09-08 12:39:41.385073+00
descriptionr2d2 adaptor for cryptoki
homepage
repositoryhttps://github.com/spruceid/r2d2-cryptoki/
max_upload_size
id782706
size40,298
standards (github:spruceid:standards)

documentation

https://docs.rs/r2d2-cryptoki/

README

r2d2 adaptor for cryptoki

Crates.io Documentation

Session pool manager for cryptoki.

Cryptoki has a single login state for all sessions. Only when all sessions are closed, a login is needed again. This library requires a ConnectionCustomizer on the pool to ensure login is only done when needed. The SessionAuth can be converted into the appropriate ConnectionCustomizer.

Example

use r2d2_cryptoki::{*, cryptoki::{context::*, types::AuthPin}};

let pkcs11 = Pkcs11::new("libsofthsm2.so").unwrap();
pkcs11.initialize(CInitializeArgs::OsThreads).unwrap();
let slots = pkcs11.get_slots_with_token().unwrap();
let slot = slots.first().unwrap();
let session_auth = SessionAuth::RwUser(AuthPin::new("fedcba".to_string()));
let manager = SessionManager::new(pkcs11, *slot, &session_auth);

let pool_builder = Pool::builder().connection_customizer(session_auth.into_customizer());
let pool = pool_builder.build(manager).unwrap();

let session = pool.get().unwrap();
println!("{:?}", session.get_session_info().unwrap());
Commit count: 10

cargo fmt