@@ -123,7 +123,13 @@ pub mod data {
123
123
124
124
pub mod digest {
125
125
use crate :: tss2_esys:: TPMU_HA ;
126
+ use digest:: {
127
+ consts:: { U20 , U32 , U48 , U64 } ,
128
+ generic_array:: GenericArray ,
129
+ typenum:: Unsigned ,
130
+ } ;
126
131
use std:: mem:: size_of;
132
+
127
133
const TPM2B_DIGEST_BUFFER_SIZE : usize = size_of :: < TPMU_HA > ( ) ;
128
134
129
135
buffer_type ! ( Digest , TPM2B_DIGEST_BUFFER_SIZE , TPM2B_DIGEST ) ;
@@ -220,6 +226,34 @@ pub mod digest {
220
226
Digest ( value_as_vec. into ( ) )
221
227
}
222
228
}
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 ) ;
223
257
}
224
258
225
259
pub mod ecc_parameter {
0 commit comments