| Crates.io | r2d2-cryptoki |
| lib.rs | r2d2-cryptoki |
| version | 0.4.0-rc.0 |
| created_at | 2023-02-11 21:16:07.320063+00 |
| updated_at | 2025-09-08 12:39:41.385073+00 |
| description | r2d2 adaptor for cryptoki |
| homepage | |
| repository | https://github.com/spruceid/r2d2-cryptoki/ |
| max_upload_size | |
| id | 782706 |
| size | 40,298 |
r2d2 adaptor for cryptokiSession 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.
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());