use std::{convert::TryInto, marker::PhantomData, slice};
#[derive(Debug, Clone, Copy)]
#[repr(transparent)]
pub struct AesCbcDeriveParams<'a> {
inner: cryptoki_sys::CK_AES_CBC_ENCRYPT_DATA_PARAMS,
_marker: PhantomData<&'a [u8]>,
}
impl<'a> AesCbcDeriveParams<'a> {
pub fn new(iv: [u8; 16], data: &'a [u8]) -> Self {
Self {
inner: cryptoki_sys::CK_AES_CBC_ENCRYPT_DATA_PARAMS {
iv,
pData: data.as_ptr() as *mut _,
length: data
.len()
.try_into()
.expect("data length does not fit in CK_ULONG"),
},
_marker: PhantomData,
}
}
pub fn iv(&self) -> &'a [u8] {
unsafe { slice::from_raw_parts(self.inner.iv.as_ptr(), self.inner.iv.len()) }
}
pub fn data(&self) -> &'a [u8] {
unsafe { slice::from_raw_parts(self.inner.pData, self.inner.length as _) }
}
}