Skip to content

Commit 9489a9b

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

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

tss-esapi/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ p384 = { version = "0.13.0", optional = true }
3636
p521 = { version = "0.13.3", optional = true }
3737
sm2 = { version = "0.13.3", optional = true }
3838
rsa = { version = "0.9", optional = true }
39+
digest = "0.10.7"
3940
cfg-if = "1.0.0"
4041
strum = { version = "0.25.0", optional = true }
4142
strum_macros = { version = "0.25.0", optional = true }

tss-esapi/src/structures/buffers.rs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ pub mod data {
111111
}
112112

113113
pub mod digest {
114+
use digest::{
115+
consts::{U20, U32, U48, U64},
116+
generic_array::GenericArray,
117+
typenum::Unsigned,
118+
};
114119
buffer_type!(Digest, 64, TPM2B_DIGEST);
115120

116121
// Some implementations to get from Digest to [u8; N] for common values of N (sha* primarily)
@@ -205,6 +210,34 @@ pub mod digest {
205210
Digest(value_as_vec.into())
206211
}
207212
}
213+
214+
macro_rules! impl_from_digest {
215+
($($size:ty),+) => {
216+
$(impl From<GenericArray<u8, $size>> for Digest {
217+
fn from(value: GenericArray<u8, $size>) -> Self {
218+
Digest(value.as_slice().to_vec().into())
219+
}
220+
}
221+
222+
impl TryFrom<Digest> for GenericArray<u8, $size> {
223+
type Error = Error;
224+
225+
fn try_from(value: Digest) -> Result<Self> {
226+
if value.len() != <$size>::USIZE {
227+
return Err(Error::local_error(WrapperErrorKind::WrongParamSize));
228+
}
229+
230+
let mut result = [0; <$size>::USIZE];
231+
232+
result.copy_from_slice(value.as_bytes());
233+
234+
Ok(result.into())
235+
}
236+
})+
237+
}
238+
}
239+
240+
impl_from_digest!(U20, U32, U48, U64);
208241
}
209242

210243
pub mod ecc_parameter {

0 commit comments

Comments
 (0)