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.
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());