@@ -51,7 +51,10 @@ use crypto::{
5151use logging:: log;
5252use randomness:: { CryptoRng , Rng } ;
5353use serialization:: extras:: non_empty_vec:: DataOrNoVec ;
54- use test_utils:: { random:: gen_random_bytes, random_ascii_alphanumeric_string} ;
54+ use test_utils:: {
55+ random:: { gen_random_bytes, make_seedable_rng} ,
56+ random_ascii_alphanumeric_string,
57+ } ;
5558use tx_verifier:: error:: { InputCheckErrorPayload , ScriptError } ;
5659use wallet_storage:: { DefaultBackend , Store , TransactionRwUnlocked , Transactional } ;
5760use wallet_types:: {
@@ -69,8 +72,15 @@ use crate::{
6972 Account , SendRequest ,
7073} ;
7174
75+ #[ derive( Debug ) ]
76+ pub enum MessageToSign {
77+ Random ,
78+ Predefined ( Vec < u8 > ) ,
79+ }
80+
7281pub fn test_sign_message_generic < MkS1 , MkS2 , S1 , S2 > (
7382 rng : & mut ( impl Rng + CryptoRng ) ,
83+ message_to_sign : MessageToSign ,
7484 make_signer : MkS1 ,
7585 make_another_signer : Option < MkS2 > ,
7686) where
@@ -85,6 +95,21 @@ pub fn test_sign_message_generic<MkS1, MkS2, S1, S2>(
8595
8696 let mut account = account_from_mnemonic ( & chain_config, & mut db_tx, DEFAULT_ACCOUNT_INDEX ) ;
8797
98+ let mut make_message = {
99+ // Note: can't pass rng to the closure without knowing its exact type, so we create a new one.
100+ let mut rng = make_seedable_rng ( rng. gen ( ) ) ;
101+ move || {
102+ let msg = match & message_to_sign {
103+ MessageToSign :: Random => {
104+ vec ! [ rng. r#gen:: <u8 >( ) , rng. r#gen:: <u8 >( ) , rng. r#gen:: <u8 >( ) ]
105+ }
106+ MessageToSign :: Predefined ( msg) => msg. clone ( ) ,
107+ } ;
108+ log:: debug!( "Using message: {msg:?}" ) ;
109+ msg
110+ }
111+ } ;
112+
88113 let pkh_destination = account
89114 . get_new_address ( & mut db_tx, KeyPurpose :: ReceiveFunds )
90115 . unwrap ( )
@@ -106,7 +131,7 @@ pub fn test_sign_message_generic<MkS1, MkS2, S1, S2>(
106131 let standalone_pk_destination = Destination :: PublicKey ( standalone_pk) ;
107132
108133 for destination in [ pkh_destination, pk_destination, standalone_pk_destination] {
109- let message = vec ! [ rng . gen :: < u8 > ( ) , rng . gen :: < u8 > ( ) , rng . gen :: < u8 > ( ) ] ;
134+ let message = make_message ( ) ;
110135 let message_challenge = produce_message_challenge ( & message) ;
111136
112137 let mut signer = make_signer ( chain_config. clone ( ) , account. account_index ( ) ) ;
@@ -136,7 +161,7 @@ pub fn test_sign_message_generic<MkS1, MkS2, S1, S2>(
136161
137162 let mut signer = make_signer ( chain_config. clone ( ) , account. account_index ( ) ) ;
138163
139- let message = vec ! [ rng . gen :: < u8 > ( ) , rng . gen :: < u8 > ( ) , rng . gen :: < u8 > ( ) ] ;
164+ let message = make_message ( ) ;
140165 let err = signer
141166 . sign_challenge (
142167 & message,
0 commit comments