Skip to content

Commit 3d0ade5

Browse files
committed
bridge digest crate with tpm digests
Signed-off-by: Arthur Gautier <[email protected]>
1 parent 5236902 commit 3d0ade5

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

tss-esapi/src/structures/buffers.rs

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,13 @@ pub mod data {
123123

124124
pub mod digest {
125125
use crate::tss2_esys::TPMU_HA;
126+
use digest::{
127+
consts::{U20, U32, U48, U64},
128+
generic_array::GenericArray,
129+
typenum::Unsigned,
130+
};
126131
use std::mem::size_of;
132+
127133
const TPM2B_DIGEST_BUFFER_SIZE: usize = size_of::<TPMU_HA>();
128134

129135
buffer_type!(Digest, TPM2B_DIGEST_BUFFER_SIZE, TPM2B_DIGEST);
@@ -220,6 +226,34 @@ pub mod digest {
220226
Digest(value_as_vec.into())
221227
}
222228
}
229+
230+
macro_rules! impl_from_digest {
231+
($($size:ty),+) => {
232+
$(impl From<GenericArray<u8, $size>> for Digest {
233+
fn from(value: GenericArray<u8, $size>) -> Self {
234+
Digest(value.as_slice().to_vec().into())
235+
}
236+
}
237+
238+
impl TryFrom<Digest> for GenericArray<u8, $size> {
239+
type Error = Error;
240+
241+
fn try_from(value: Digest) -> Result<Self> {
242+
if value.len() != <$size>::USIZE {
243+
return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
244+
}
245+
246+
let mut result = [0; <$size>::USIZE];
247+
248+
result.copy_from_slice(value.as_bytes());
249+
250+
Ok(result.into())
251+
}
252+
})+
253+
}
254+
}
255+
256+
impl_from_digest!(U20, U32, U48, U64);
223257
}
224258

225259
pub mod ecc_parameter {

0 commit comments

Comments
 (0)