@@ -99,6 +99,9 @@ mod tests {
9999 use crate :: util:: helper:: test_helper:: gen_random_seed;
100100 use crate :: HssParameter ;
101101 use crate :: Sha256_128 ;
102+ use crate :: Sha256_192 ;
103+ use crate :: Sha256_256 ;
104+ use signature:: Verifier ;
102105
103106 #[ test]
104107 fn test_prepare_sst_keygen_se_without_lms_tree_id ( ) {
@@ -152,47 +155,69 @@ mod tests {
152155 }
153156
154157 #[ test]
155- fn test_finalize_sst_keygen ( ) {
158+ fn signing_sst_sha256_128 ( ) {
159+ signing_sst_core :: < Sha256_128 > ( ) ;
160+ }
161+
162+ #[ test]
163+ fn signing_sst_sha256_192 ( ) {
164+ signing_sst_core :: < Sha256_192 > ( ) ;
165+ }
166+
167+ #[ test]
168+ fn signing_sst_sha256_256 ( ) {
169+ signing_sst_core :: < Sha256_256 > ( ) ;
170+ }
171+
172+ fn signing_sst_core < H : HashChain > ( ) {
156173 const L0_TOP_DIV : u32 = 4 ;
157174
175+ let mut message = [
176+ 32u8 , 48 , 2 , 1 , 48 , 58 , 20 , 57 , 9 , 83 , 99 , 255 , 0 , 34 , 2 , 1 , 0 ,
177+ ] ;
178+
158179 let mut lms_tree_identifier = LmsTreeIdentifier :: default ( ) ;
159- let seed = gen_random_seed :: < Sha256_128 > ( ) ;
180+ let seed = gen_random_seed :: < H > ( ) ;
160181 let mut hss_parameters = ArrayVec :: new ( ) ;
161182 hss_parameters. extend_from_slice ( & [
162183 HssParameter :: construct_default_parameters ( ) ,
163184 HssParameter :: construct_default_parameters ( ) ,
164185 ] ) ;
165- let ssts_parameter = SstsParameter :: < Sha256_128 > :: new ( hss_parameters, L0_TOP_DIV as u8 , 3 ) ;
166- let mut aux_data = [ 0u8 ; 4 + 16 + 2usize . pow ( L0_TOP_DIV ) * 16 ] ;
186+ let ssts_parameter = SstsParameter :: < H > :: new ( hss_parameters, L0_TOP_DIV as u8 , 3 ) ;
187+ let mut aux_data = [ 0u8 ; 4 + MAX_HASH_SIZE + 2usize . pow ( L0_TOP_DIV ) * MAX_HASH_SIZE ] ;
167188 let aux_ref: & mut & mut [ u8 ] = & mut & mut aux_data[ ..] ;
168189 let mut aux_option = Some ( aux_ref) ;
169190
170- let ( signing_key, interm_node) = if let Some ( aux) = aux_option. as_deref_mut ( ) {
171- prepare_sst_keygen :: < Sha256_128 > (
172- & ssts_parameter,
173- & seed,
174- Some ( aux) ,
175- & mut lms_tree_identifier,
176- )
177- . unwrap ( )
178- } else {
179- // TODO Rm dead-end
180- prepare_sst_keygen :: < Sha256_128 > ( & ssts_parameter, & seed, None , & mut lms_tree_identifier)
181- . unwrap ( )
182- } ;
191+ let ( mut signing_key, interm_node) = prepare_sst_keygen :: < H > (
192+ & ssts_parameter,
193+ & seed,
194+ Some ( aux_option. as_mut ( ) . unwrap ( ) ) ,
195+ & mut lms_tree_identifier,
196+ )
197+ . unwrap ( ) ;
198+
183199 let mut interm_nodes =
184200 ArrayVec :: < [ ArrayVec < [ u8 ; MAX_HASH_SIZE ] > ; MAX_SSTS_SIGNING_ENTITIES ] > :: new ( ) ;
201+ let mut tmp_node = ArrayVec :: < [ u8 ; MAX_HASH_SIZE ] > :: new ( ) ;
202+ tmp_node. extend_from_slice ( & interm_node) ;
185203 for _ in 0 ..2usize . pow ( L0_TOP_DIV ) {
186- let mut tmp_node = ArrayVec :: < [ u8 ; MAX_HASH_SIZE ] > :: new ( ) ;
187- tmp_node. extend_from_slice ( & interm_node) ;
188204 interm_nodes. push ( tmp_node) ;
189205 }
190- let _verifying_key = finalize_sst_keygen :: < Sha256_128 > (
206+
207+ let verifying_key = finalize_sst_keygen :: < H > (
191208 signing_key. as_slice ( ) ,
192209 & interm_nodes,
193- aux_option,
210+ Some ( aux_option. as_mut ( ) . unwrap ( ) ) ,
194211 & lms_tree_identifier,
195212 )
196213 . unwrap ( ) ;
214+
215+ let signature = signing_key
216+ . try_sign_with_aux ( & message, aux_option, Some ( & lms_tree_identifier) )
217+ . unwrap ( ) ;
218+
219+ assert ! ( verifying_key. verify( & message, & signature) . is_ok( ) ) ;
220+ message[ 0 ] = 33 ;
221+ assert ! ( verifying_key. verify( & message, & signature) . is_err( ) ) ;
197222 }
198223}
0 commit comments