@@ -23,8 +23,24 @@ macro_rules! named_field_buffer_type {
2323 impl $native_type {
2424 pub const MAX_SIZE : usize = $MAX;
2525
26- pub fn value( & self ) -> & [ u8 ] {
27- & self . 0
26+ pub fn from_bytes( bytes: & [ u8 ] ) -> Result <Self > {
27+ Self :: ensure_valid_buffer_size( bytes. len( ) , "bytes(&[u8])" ) ?;
28+ Ok ( $native_type( bytes. to_vec( ) . into( ) ) )
29+ }
30+
31+ /// Returns the content of the buffer type as
32+ /// a slice of bytes.
33+ pub fn as_bytes( & self ) -> & [ u8 ] {
34+ self . 0 . as_slice( )
35+ }
36+
37+ /// Private function for ensuring that a buffer size is valid.
38+ fn ensure_valid_buffer_size( buffer_size: usize , container_name: & str ) -> Result <( ) > {
39+ if buffer_size > Self :: MAX_SIZE {
40+ error!( "Invalid {} size(> {})" , container_name, Self :: MAX_SIZE ) ;
41+ return Err ( Error :: local_error( WrapperErrorKind :: WrongParamSize ) ) ;
42+ }
43+ Ok ( ( ) )
2844 }
2945 }
3046
@@ -39,35 +55,17 @@ macro_rules! named_field_buffer_type {
3955 type Error = Error ;
4056
4157 fn try_from( bytes: Vec <u8 >) -> Result <Self > {
42- if bytes. len( ) > Self :: MAX_SIZE {
43- error!( "Invalid Vec<u8> size(> {})" , Self :: MAX_SIZE ) ;
44- return Err ( Error :: local_error( WrapperErrorKind :: WrongParamSize ) ) ;
45- }
58+ Self :: ensure_valid_buffer_size( bytes. len( ) , "Vec<u8>" ) ?;
4659 Ok ( $native_type( bytes. into( ) ) )
4760 }
4861 }
4962
50- impl TryFrom <& [ u8 ] > for $native_type {
51- type Error = Error ;
52-
53- fn try_from( bytes: & [ u8 ] ) -> Result <Self > {
54- if bytes. len( ) > Self :: MAX_SIZE {
55- error!( "Invalid &[u8] size(> {})" , Self :: MAX_SIZE ) ;
56- return Err ( Error :: local_error( WrapperErrorKind :: WrongParamSize ) ) ;
57- }
58- Ok ( $native_type( bytes. to_vec( ) . into( ) ) )
59- }
60- }
61-
6263 impl TryFrom <$tss_type> for $native_type {
6364 type Error = Error ;
6465
6566 fn try_from( tss: $tss_type) -> Result <Self > {
6667 let size = tss. size as usize ;
67- if size > Self :: MAX_SIZE {
68- error!( "Invalid buffer size(> {})" , Self :: MAX_SIZE ) ;
69- return Err ( Error :: local_error( WrapperErrorKind :: WrongParamSize ) ) ;
70- }
68+ Self :: ensure_valid_buffer_size( size, "buffer" ) ?;
7169 Ok ( $native_type( tss. $buffer_field_name[ ..size] . to_vec( ) . into( ) ) )
7270 }
7371 }
@@ -119,7 +117,7 @@ pub mod digest {
119117
120118 fn try_from ( value : Digest ) -> Result < Self > {
121119 value
122- . value ( )
120+ . as_bytes ( )
123121 . try_into ( )
124122 . map_err ( |_| Error :: local_error ( WrapperErrorKind :: WrongParamSize ) )
125123 }
@@ -130,7 +128,7 @@ pub mod digest {
130128
131129 fn try_from ( value : Digest ) -> Result < Self > {
132130 value
133- . value ( )
131+ . as_bytes ( )
134132 . try_into ( )
135133 . map_err ( |_| Error :: local_error ( WrapperErrorKind :: WrongParamSize ) )
136134 }
@@ -141,13 +139,13 @@ pub mod digest {
141139 type Error = Error ;
142140
143141 fn try_from ( value : Digest ) -> Result < Self > {
144- if value. value ( ) . len ( ) != 48 {
142+ if value. len ( ) != 48 {
145143 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
146144 }
147145
148146 let mut result = [ 0 ; 48 ] ;
149147
150- result. copy_from_slice ( value. value ( ) ) ;
148+ result. copy_from_slice ( value. as_bytes ( ) ) ;
151149
152150 Ok ( result)
153151 }
@@ -157,17 +155,49 @@ pub mod digest {
157155 type Error = Error ;
158156
159157 fn try_from ( value : Digest ) -> Result < Self > {
160- if value. value ( ) . len ( ) != 64 {
158+ if value. len ( ) != 64 {
161159 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
162160 }
163161
164162 let mut result = [ 0 ; 64 ] ;
165163
166- result. copy_from_slice ( value. value ( ) ) ;
164+ result. copy_from_slice ( value. as_bytes ( ) ) ;
167165
168166 Ok ( result)
169167 }
170168 }
169+
170+ impl From < [ u8 ; 20 ] > for Digest {
171+ fn from ( mut value : [ u8 ; 20 ] ) -> Self {
172+ let value_as_vec = value. to_vec ( ) ;
173+ value. zeroize ( ) ;
174+ Digest ( value_as_vec. into ( ) )
175+ }
176+ }
177+
178+ impl From < [ u8 ; 32 ] > for Digest {
179+ fn from ( mut value : [ u8 ; 32 ] ) -> Self {
180+ let value_as_vec = value. to_vec ( ) ;
181+ value. zeroize ( ) ;
182+ Digest ( value_as_vec. into ( ) )
183+ }
184+ }
185+
186+ impl From < [ u8 ; 48 ] > for Digest {
187+ fn from ( mut value : [ u8 ; 48 ] ) -> Self {
188+ let value_as_vec = value. to_vec ( ) ;
189+ value. zeroize ( ) ;
190+ Digest ( value_as_vec. into ( ) )
191+ }
192+ }
193+
194+ impl From < [ u8 ; 64 ] > for Digest {
195+ fn from ( mut value : [ u8 ; 64 ] ) -> Self {
196+ let value_as_vec = value. to_vec ( ) ;
197+ value. zeroize ( ) ;
198+ Digest ( value_as_vec. into ( ) )
199+ }
200+ }
171201}
172202
173203pub mod ecc_parameter {
@@ -268,12 +298,12 @@ pub mod public_key_rsa {
268298 type Error = Error ;
269299
270300 fn try_from ( public_key_rsa : PublicKeyRsa ) -> Result < Self > {
271- if public_key_rsa. value ( ) . len ( ) > 128 {
301+ if public_key_rsa. len ( ) > 128 {
272302 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
273303 }
274304
275305 let mut value = [ 0u8 ; 128 ] ;
276- value. copy_from_slice ( public_key_rsa. value ( ) ) ;
306+ value. copy_from_slice ( public_key_rsa. as_bytes ( ) ) ;
277307 Ok ( value)
278308 }
279309 }
@@ -282,12 +312,12 @@ pub mod public_key_rsa {
282312 type Error = Error ;
283313
284314 fn try_from ( public_key_rsa : PublicKeyRsa ) -> Result < Self > {
285- if public_key_rsa. value ( ) . len ( ) > 256 {
315+ if public_key_rsa. len ( ) > 256 {
286316 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
287317 }
288318
289319 let mut value = [ 0u8 ; 256 ] ;
290- value. copy_from_slice ( public_key_rsa. value ( ) ) ;
320+ value. copy_from_slice ( public_key_rsa. as_bytes ( ) ) ;
291321 Ok ( value)
292322 }
293323 }
@@ -296,12 +326,12 @@ pub mod public_key_rsa {
296326 type Error = Error ;
297327
298328 fn try_from ( public_key_rsa : PublicKeyRsa ) -> Result < Self > {
299- if public_key_rsa. value ( ) . len ( ) > 384 {
329+ if public_key_rsa. len ( ) > 384 {
300330 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
301331 }
302332
303333 let mut value = [ 0u8 ; 384 ] ;
304- value. copy_from_slice ( public_key_rsa. value ( ) ) ;
334+ value. copy_from_slice ( public_key_rsa. as_bytes ( ) ) ;
305335 Ok ( value)
306336 }
307337 }
@@ -310,12 +340,12 @@ pub mod public_key_rsa {
310340 type Error = Error ;
311341
312342 fn try_from ( public_key_rsa : PublicKeyRsa ) -> Result < Self > {
313- if public_key_rsa. value ( ) . len ( ) > 512 {
343+ if public_key_rsa. len ( ) > 512 {
314344 return Err ( Error :: local_error ( WrapperErrorKind :: WrongParamSize ) ) ;
315345 }
316346
317347 let mut value = [ 0u8 ; 512 ] ;
318- value. copy_from_slice ( public_key_rsa. value ( ) ) ;
348+ value. copy_from_slice ( public_key_rsa. as_bytes ( ) ) ;
319349 Ok ( value)
320350 }
321351 }
0 commit comments