use cryptoki::types::locking::CInitializeArgs;
use cryptoki::types::session::UserType;
use cryptoki::types::slot_token::Slot;
use cryptoki::types::Flags;
use cryptoki::Pkcs11;
use std::env;
pub fn init_pins() -> (Pkcs11, Slot) {
let pkcs11 = Pkcs11::new(
env::var("PKCS11_SOFTHSM2_MODULE")
.unwrap_or_else(|_| "/usr/local/lib/softhsm/libsofthsm2.so".to_string()),
)
.unwrap();
pkcs11.initialize(CInitializeArgs::OsThreads).unwrap();
let slot = pkcs11.get_slots_with_token().unwrap().remove(0);
pkcs11.init_token(slot, "1234").unwrap();
pkcs11.set_pin(slot, "1234").unwrap();
let mut flags = Flags::new();
let _ = flags.set_rw_session(true).set_serial_session(true);
{
let session = pkcs11.open_session_no_callback(slot, flags).unwrap();
session.login(UserType::So).unwrap();
session.init_pin("1234").unwrap();
}
(pkcs11, slot)
}