use super::{BackendPrivateKey, KeySpec, PrivateKeyError};
use crate::pkcs11_uri::Pkcs11Uri;
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SlotInfo {
pub slot_id: u64,
pub token_label: String,
pub manufacturer_id: String,
pub model: String,
pub serial_number: String,
pub flags: u64,
}
#[non_exhaustive]
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Pkcs11KeyInfo {
pub label: String,
pub id: Vec<u8>,
pub key_type: String,
pub key_bits: u32,
}
pub trait TokenManager {
fn list_slots(&self) -> Result<Vec<SlotInfo>, PrivateKeyError>;
fn find_key(&self, uri: &Pkcs11Uri) -> Result<bool, PrivateKeyError>;
fn list_keys(
&self,
token_name: &str,
pin: Option<&str>,
) -> Result<Vec<Pkcs11KeyInfo>, PrivateKeyError>;
fn delete_key(&self, uri: &Pkcs11Uri) -> Result<(), PrivateKeyError>;
fn generate_key_pair_in_token(
&self,
spec: &KeySpec,
uri: &Pkcs11Uri,
extractable: bool,
) -> Result<BackendPrivateKey, PrivateKeyError>;
}