Skip to content

Commit 0eaac51

Browse files
committed
bridge digest crate with tpm digests
Signed-off-by: Arthur Gautier <arthur.gautier@arista.com>
1 parent 3ab274b commit 0eaac51

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

tss-esapi/src/structures/buffers.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ pub mod data {
124124
pub mod digest {
125125
use crate::tss2_esys::TPMU_HA;
126126
use std::mem::size_of;
127+
127128
const TPM2B_DIGEST_BUFFER_SIZE: usize = size_of::<TPMU_HA>();
128129

129130
buffer_type!(Digest, TPM2B_DIGEST_BUFFER_SIZE, TPM2B_DIGEST);
@@ -220,6 +221,47 @@ pub mod digest {
220221
Digest(value_as_vec.into())
221222
}
222223
}
224+
225+
#[cfg(feature = "rustcrypto")]
226+
mod rustcrypto {
227+
use digest::{
228+
consts::{U20, U32, U48, U64},
229+
generic_array::GenericArray,
230+
typenum::Unsigned,
231+
};
232+
233+
use super::*;
234+
235+
macro_rules! impl_from_digest {
236+
($($size:ty),+) => {
237+
$(impl From<GenericArray<u8, $size>> for Digest {
238+
fn from(mut value: GenericArray<u8, $size>) -> Self {
239+
let value_as_vec = value.as_slice().to_vec();
240+
value.zeroize();
241+
Digest(value_as_vec.into())
242+
}
243+
}
244+
245+
impl TryFrom<Digest> for GenericArray<u8, $size> {
246+
type Error = Error;
247+
248+
fn try_from(value: Digest) -> Result<Self> {
249+
if value.len() != <$size>::USIZE {
250+
return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
251+
}
252+
253+
let mut result = [0; <$size>::USIZE];
254+
255+
result.copy_from_slice(value.as_bytes());
256+
257+
Ok(result.into())
258+
}
259+
})+
260+
}
261+
}
262+
263+
impl_from_digest!(U20, U32, U48, U64);
264+
}
223265
}
224266

225267
pub mod ecc_parameter {

0 commit comments

Comments
 (0)