use crate::error::{Error, Result};
use crate::string_from_blank_padded;
use crate::types::Version;
use cryptoki_sys::*;
use std::convert::TryFrom;
#[derive(Debug, Clone)]
pub struct Info {
cryptoki_version: Version,
manufacturer_id: String,
library_description: String,
library_version: Version,
}
impl Info {
pub fn cryptoki_version(&self) -> Version {
self.cryptoki_version
}
pub fn manufacturer_id(&self) -> &str {
&self.manufacturer_id
}
pub fn library_description(&self) -> &str {
&self.library_description
}
pub fn library_version(&self) -> Version {
self.library_version
}
}
#[doc(hidden)]
impl TryFrom<CK_INFO> for Info {
type Error = Error;
fn try_from(val: CK_INFO) -> Result<Self> {
if val.flags != 0 {
return Err(Error::InvalidValue);
}
Ok(Self {
cryptoki_version: val.cryptokiVersion.into(),
manufacturer_id: string_from_blank_padded(&val.manufacturerID),
library_description: string_from_blank_padded(&val.libraryDescription),
library_version: val.libraryVersion.into(),
})
}
}