@@ -310,7 +310,6 @@ impl Lms {
310310 }
311311
312312 // This operation is accelerated in hardware by RTL1.1 and later.
313- #[ cfg( not( feature = "hw-1.0" ) ) ]
314313 fn hash_chain < const N : usize > (
315314 & self ,
316315 sha256_driver : & mut impl Sha256Alg ,
@@ -321,6 +320,26 @@ impl Lms {
321320 ) -> CaliptraResult < HashValue < N > > {
322321 let iteration_count = ( ( 1u16 << params. w ) - 1 ) as u8 ;
323322
323+ #[ cfg( any( feature = "fmc" , feature = "runtime" ) ) ]
324+ if crate :: soc_ifc:: is_hw_gen_1_0 ( ) {
325+ // RTL 1.0 version (no HW acceleration)
326+ for j in coeff..iteration_count {
327+ let mut digest = Array4x8 :: default ( ) ;
328+ let mut hasher = sha256_driver. digest_init ( ) ?;
329+ wnt_prefix[ Self :: ITER_COUNTER_OFFSET ] = j;
330+ let mut i = Self :: TMP_OFFSET ;
331+ for val in tmp. 0 . iter ( ) . take ( N ) {
332+ wnt_prefix[ i..i + 4 ] . clone_from_slice ( & val. to_be_bytes ( ) ) ;
333+ i += 4 ;
334+ }
335+ hasher. update ( & wnt_prefix[ 0 ..Self :: TMP_OFFSET + N * 4 ] ) ?;
336+ hasher. finalize ( & mut digest) ?;
337+ * tmp = HashValue :: < N > :: from ( digest) ;
338+ }
339+ return Ok ( * tmp) ;
340+ }
341+
342+ // RTL 1.1+ version (LMS HW acceleration)
324343 if coeff < iteration_count {
325344 let mut digest = Array4x8 :: default ( ) ;
326345 let mut hasher = sha256_driver. digest_init ( ) ?;
@@ -342,33 +361,6 @@ impl Lms {
342361 Ok ( * tmp)
343362 }
344363
345- #[ cfg( feature = "hw-1.0" ) ]
346- fn hash_chain < const N : usize > (
347- & self ,
348- sha256_driver : & mut impl Sha256Alg ,
349- wnt_prefix : & mut [ u8 ; Self :: WNT_PREFIX_SIZE ] ,
350- coeff : u8 ,
351- params : & LmotsParameter ,
352- tmp : & mut HashValue < N > ,
353- ) -> CaliptraResult < HashValue < N > > {
354- let iteration_count = ( ( 1u16 << params. w ) - 1 ) as u8 ;
355-
356- for j in coeff..iteration_count {
357- let mut digest = Array4x8 :: default ( ) ;
358- let mut hasher = sha256_driver. digest_init ( ) ?;
359- wnt_prefix[ Self :: ITER_COUNTER_OFFSET ] = j;
360- let mut i = Self :: TMP_OFFSET ;
361- for val in tmp. 0 . iter ( ) . take ( N ) {
362- wnt_prefix[ i..i + 4 ] . clone_from_slice ( & val. to_be_bytes ( ) ) ;
363- i += 4 ;
364- }
365- hasher. update ( & wnt_prefix[ 0 ..Self :: TMP_OFFSET + N * 4 ] ) ?;
366- hasher. finalize ( & mut digest) ?;
367- * tmp = HashValue :: < N > :: from ( digest) ;
368- }
369- Ok ( * tmp)
370- }
371-
372364 pub fn candidate_ots_signature < const N : usize , const P : usize > (
373365 & self ,
374366 sha256_driver : & mut impl Sha256Alg ,
0 commit comments