1- use rustls:: crypto:: tls13:: { self , Hkdf as RustlsHkdf } ;
21use alloc:: boxed:: Box ;
32use alloc:: vec;
4- use core:: mem;
53use alloc:: vec:: Vec ;
4+ use core:: mem;
5+ use rustls:: crypto:: tls13:: { self , Hkdf as RustlsHkdf } ;
66use wolfcrypt_rs:: * ;
77
88use crate :: error:: check_if_zero;
9- use crate :: hmac:: hmac :: WCShaHmac ;
9+ use crate :: hmac:: WCShaHmac ;
1010
1111pub struct WCHkdfUsingHmac ( pub WCShaHmac ) ;
1212
@@ -42,7 +42,11 @@ impl RustlsHkdf for WCHkdfUsingHmac {
4242 } ;
4343 check_if_zero ( ret) . unwrap ( ) ;
4444
45- Box :: new ( WolfHkdfExpander :: new ( extracted_key, self . 0 . hash_type ( ) . try_into ( ) . unwrap ( ) , self . 0 . hash_len ( ) ) )
45+ Box :: new ( WolfHkdfExpander :: new (
46+ extracted_key,
47+ self . 0 . hash_type ( ) . try_into ( ) . unwrap ( ) ,
48+ self . 0 . hash_len ( ) ,
49+ ) )
4650 }
4751
4852 fn expander_for_okm (
@@ -74,28 +78,13 @@ impl RustlsHkdf for WCHkdfUsingHmac {
7478 } ;
7579 check_if_zero ( ret) . unwrap ( ) ;
7680
77- ret = unsafe {
78- wc_HmacUpdate (
79- & mut hmac_ctx,
80- message. as_ptr ( ) ,
81- message. len ( ) as u32 ,
82- )
83- } ;
81+ ret = unsafe { wc_HmacUpdate ( & mut hmac_ctx, message. as_ptr ( ) , message. len ( ) as u32 ) } ;
8482 check_if_zero ( ret) . unwrap ( ) ;
8583
86- ret = unsafe {
87- wc_HmacFinal (
88- & mut hmac_ctx,
89- hmac. as_mut_ptr ( ) ,
90- )
91- } ;
84+ ret = unsafe { wc_HmacFinal ( & mut hmac_ctx, hmac. as_mut_ptr ( ) ) } ;
9285 check_if_zero ( ret) . unwrap ( ) ;
9386
94- unsafe {
95- wc_HmacFree (
96- & mut hmac_ctx,
97- )
98- } ;
87+ unsafe { wc_HmacFree ( & mut hmac_ctx) } ;
9988 check_if_zero ( ret) . unwrap ( ) ;
10089
10190 rustls:: crypto:: hmac:: Tag :: new ( & hmac)
@@ -104,9 +93,9 @@ impl RustlsHkdf for WCHkdfUsingHmac {
10493
10594/// Expander implementation that holds the extracted key material from HKDF extract phase
10695struct WolfHkdfExpander {
107- extracted_key : Vec < u8 > , // The pseudorandom key (PRK) output from HKDF-Extract
96+ extracted_key : Vec < u8 > , // The pseudorandom key (PRK) output from HKDF-Extract
10897 hash_type : i32 , // The wolfSSL hash algorithm identifier
109- hash_len : usize , // Length of the hash function output
98+ hash_len : usize , // Length of the hash function output
11099}
111100
112101impl WolfHkdfExpander {
@@ -126,7 +115,7 @@ impl tls13::HkdfExpander for WolfHkdfExpander {
126115 output : & mut [ u8 ] ,
127116 ) -> Result < ( ) , tls13:: OutputLengthError > {
128117 let info_concat = info. concat ( ) ;
129-
118+
130119 if output. len ( ) > 255 * self . hash_len {
131120 return Err ( tls13:: OutputLengthError ) ;
132121 }
@@ -142,7 +131,7 @@ impl tls13::HkdfExpander for WolfHkdfExpander {
142131 output. len ( ) as u32 ,
143132 ) ;
144133 }
145-
134+
146135 Ok ( ( ) )
147136 }
148137
@@ -179,10 +168,10 @@ mod tests {
179168
180169 let hkdf = WCHkdfUsingHmac ( WCShaHmac :: new ( wc_HashType_WC_HASH_TYPE_SHA256) ) ;
181170 let expander = hkdf. extract_from_secret ( Some ( & salt) , & ikm) ;
182-
171+
183172 let mut okm = vec ! [ 0u8 ; 42 ] ; // Length from test vector
184173 expander. expand_slice ( & [ & info] , & mut okm) . unwrap ( ) ;
185-
174+
186175 assert_eq ! ( & okm[ ..] , & expected_okm[ ..] ) ;
187176 }
188177
@@ -194,13 +183,13 @@ mod tests {
194183 let ikm = hex ! ( "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b" ) ;
195184 let salt = hex ! ( "000102030405060708090a0b0c" ) ;
196185 let info = hex ! ( "f0f1f2f3f4f5f6f7f8f9" ) ;
197-
186+
198187 let hkdf = WCHkdfUsingHmac ( WCShaHmac :: new ( wc_HashType_WC_HASH_TYPE_SHA384) ) ;
199188 let expander = hkdf. extract_from_secret ( Some ( & salt) , & ikm) ;
200-
189+
201190 let mut okm = vec ! [ 0u8 ; 48 ] ; // SHA384 output length
202191 expander. expand_slice ( & [ & info] , & mut okm) . unwrap ( ) ;
203-
192+
204193 // Just verify we can generate output - actual value would need a verified test vector
205194 assert ! ( !okm. iter( ) . all( |& x| x == 0 ) ) ;
206195 }
@@ -211,12 +200,12 @@ mod tests {
211200 fn test_hkdf_output_length_limit ( ) {
212201 let hkdf = WCHkdfUsingHmac ( WCShaHmac :: new ( wc_HashType_WC_HASH_TYPE_SHA256) ) ;
213202 let expander = hkdf. extract_from_zero_ikm ( None ) ;
214-
203+
215204 // Maximum allowed length (255 * hash_len)
216205 let max_len = 255 * 32 ;
217206 let mut okm = vec ! [ 0u8 ; max_len] ;
218207 assert ! ( expander. expand_slice( & [ & [ ] ] , & mut okm) . is_ok( ) ) ;
219-
208+
220209 // Exceeding maximum length should fail
221210 let mut okm = vec ! [ 0u8 ; max_len + 1 ] ;
222211 assert ! ( expander. expand_slice( & [ & [ ] ] , & mut okm) . is_err( ) ) ;
@@ -229,17 +218,17 @@ mod tests {
229218 let hkdf = WCHkdfUsingHmac ( WCShaHmac :: new ( wc_HashType_WC_HASH_TYPE_SHA256) ) ;
230219 let salt = hex ! ( "000102030405060708090a0b0c" ) ;
231220 let info = hex ! ( "f0f1f2f3f4f5f6f7f8f9" ) ;
232-
221+
233222 let expander = hkdf. extract_from_zero_ikm ( Some ( & salt) ) ;
234-
223+
235224 let mut okm1 = vec ! [ 0u8 ; 32 ] ;
236225 expander. expand_slice ( & [ & info] , & mut okm1) . unwrap ( ) ;
237-
226+
238227 // Verify that zero IKM produces consistent output
239228 let expander2 = hkdf. extract_from_zero_ikm ( Some ( & salt) ) ;
240229 let mut okm2 = vec ! [ 0u8 ; 32 ] ;
241230 expander2. expand_slice ( & [ & info] , & mut okm2) . unwrap ( ) ;
242-
231+
243232 assert_eq ! ( okm1, okm2) ;
244233 }
245234
@@ -252,22 +241,24 @@ mod tests {
252241 let info1 = hex ! ( "f0f1f2f3" ) ;
253242 let info2 = hex ! ( "f4f5f6f7" ) ;
254243 let info3 = hex ! ( "f8f9" ) ;
255-
244+
256245 let expander = hkdf. extract_from_zero_ikm ( Some ( & salt) ) ;
257-
246+
258247 // Test with multiple info components
259248 let mut okm1 = vec ! [ 0u8 ; 32 ] ;
260- expander. expand_slice ( & [ & info1, & info2, & info3] , & mut okm1) . unwrap ( ) ;
261-
249+ expander
250+ . expand_slice ( & [ & info1, & info2, & info3] , & mut okm1)
251+ . unwrap ( ) ;
252+
262253 // Test with concatenated info
263254 let mut info_concat = Vec :: new ( ) ;
264255 info_concat. extend_from_slice ( & info1) ;
265256 info_concat. extend_from_slice ( & info2) ;
266257 info_concat. extend_from_slice ( & info3) ;
267-
258+
268259 let mut okm2 = vec ! [ 0u8 ; 32 ] ;
269260 expander. expand_slice ( & [ & info_concat] , & mut okm2) . unwrap ( ) ;
270-
261+
271262 // Results should be identical
272263 assert_eq ! ( okm1, okm2) ;
273264 }
0 commit comments