@@ -124,6 +124,7 @@ pub mod data {
124
124
pub mod digest {
125
125
use crate :: tss2_esys:: TPMU_HA ;
126
126
use std:: mem:: size_of;
127
+
127
128
const TPM2B_DIGEST_BUFFER_SIZE : usize = size_of :: < TPMU_HA > ( ) ;
128
129
129
130
buffer_type ! ( Digest , TPM2B_DIGEST_BUFFER_SIZE , TPM2B_DIGEST ) ;
@@ -220,6 +221,47 @@ pub mod digest {
220
221
Digest ( value_as_vec. into ( ) )
221
222
}
222
223
}
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
+ }
223
265
}
224
266
225
267
pub mod ecc_parameter {
0 commit comments