From 38c9ba3a38ebc9c86e1fa6272ffc56383c5ba497 Mon Sep 17 00:00:00 2001 From: Mykhailo Kremniov Date: Wed, 20 Aug 2025 14:46:52 +0300 Subject: [PATCH] Update trezor_signer::tests::test_sign_message to include an important special case --- Cargo.lock | 2 +- Cargo.toml | 4 +-- wallet/src/signer/software_signer/tests.rs | 9 +++++-- wallet/src/signer/tests/generic_tests.rs | 31 +++++++++++++++++++--- wallet/src/signer/trezor_signer/tests.rs | 21 ++++++++++++--- 5 files changed, 56 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5c8df4f47f..41de64b233 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8694,7 +8694,7 @@ dependencies = [ [[package]] name = "trezor-client" version = "0.1.5" -source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=397155e26660993a044e78447dad893852fa44d1#397155e26660993a044e78447dad893852fa44d1" +source = "git+https://github.com/mintlayer/mintlayer-trezor-firmware?rev=8154c7a3bc65d27d64186f1b733750e029f8cad0#8154c7a3bc65d27d64186f1b733750e029f8cad0" dependencies = [ "bitcoin", "byteorder", diff --git a/Cargo.toml b/Cargo.toml index 88fbe3f38d..9e88bdb0b8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -251,8 +251,8 @@ zeroize = "1.5" [workspace.dependencies.trezor-client] git = "https://github.com/mintlayer/mintlayer-trezor-firmware" -# The commit "Mintlayer firmware versioning" -rev = "397155e26660993a044e78447dad893852fa44d1" +# The commit "Merge pull request #16 from mintlayer/sign_message_convert_to_hex_if_non_ascii" +rev = "8154c7a3bc65d27d64186f1b733750e029f8cad0" features = ["bitcoin", "mintlayer"] [workspace.metadata.dist.dependencies.apt] diff --git a/wallet/src/signer/software_signer/tests.rs b/wallet/src/signer/software_signer/tests.rs index 751dded723..1ec960cc56 100644 --- a/wallet/src/signer/software_signer/tests.rs +++ b/wallet/src/signer/software_signer/tests.rs @@ -24,7 +24,7 @@ use crate::signer::tests::{ }, generic_tests::{ test_sign_message_generic, test_sign_transaction_generic, - test_sign_transaction_intent_generic, + test_sign_transaction_intent_generic, MessageToSign, }, make_deterministic_software_signer, make_software_signer, no_another_signer, }; @@ -35,7 +35,12 @@ use crate::signer::tests::{ fn test_sign_message(#[case] seed: Seed) { let mut rng = make_seedable_rng(seed); - test_sign_message_generic(&mut rng, make_software_signer, no_another_signer()); + test_sign_message_generic( + &mut rng, + MessageToSign::Random, + make_software_signer, + no_another_signer(), + ); } #[rstest] diff --git a/wallet/src/signer/tests/generic_tests.rs b/wallet/src/signer/tests/generic_tests.rs index 6d8ae5e5ad..dc96ab432d 100644 --- a/wallet/src/signer/tests/generic_tests.rs +++ b/wallet/src/signer/tests/generic_tests.rs @@ -51,7 +51,10 @@ use crypto::{ use logging::log; use randomness::{CryptoRng, Rng}; use serialization::extras::non_empty_vec::DataOrNoVec; -use test_utils::{random::gen_random_bytes, random_ascii_alphanumeric_string}; +use test_utils::{ + random::{gen_random_bytes, make_seedable_rng}, + random_ascii_alphanumeric_string, +}; use tx_verifier::error::{InputCheckErrorPayload, ScriptError}; use wallet_storage::{DefaultBackend, Store, TransactionRwUnlocked, Transactional}; use wallet_types::{ @@ -69,8 +72,15 @@ use crate::{ Account, SendRequest, }; +#[derive(Debug)] +pub enum MessageToSign { + Random, + Predefined(Vec), +} + pub fn test_sign_message_generic( rng: &mut (impl Rng + CryptoRng), + message_to_sign: MessageToSign, make_signer: MkS1, make_another_signer: Option, ) where @@ -85,6 +95,21 @@ pub fn test_sign_message_generic( let mut account = account_from_mnemonic(&chain_config, &mut db_tx, DEFAULT_ACCOUNT_INDEX); + let mut make_message = { + // Note: can't pass rng to the closure without knowing its exact type, so we create a new one. + let mut rng = make_seedable_rng(rng.gen()); + move || { + let msg = match &message_to_sign { + MessageToSign::Random => { + vec![rng.r#gen::(), rng.r#gen::(), rng.r#gen::()] + } + MessageToSign::Predefined(msg) => msg.clone(), + }; + log::debug!("Using message: {msg:?}"); + msg + } + }; + let pkh_destination = account .get_new_address(&mut db_tx, KeyPurpose::ReceiveFunds) .unwrap() @@ -106,7 +131,7 @@ pub fn test_sign_message_generic( let standalone_pk_destination = Destination::PublicKey(standalone_pk); for destination in [pkh_destination, pk_destination, standalone_pk_destination] { - let message = vec![rng.gen::(), rng.gen::(), rng.gen::()]; + let message = make_message(); let message_challenge = produce_message_challenge(&message); let mut signer = make_signer(chain_config.clone(), account.account_index()); @@ -136,7 +161,7 @@ pub fn test_sign_message_generic( let mut signer = make_signer(chain_config.clone(), account.account_index()); - let message = vec![rng.gen::(), rng.gen::(), rng.gen::()]; + let message = make_message(); let err = signer .sign_challenge( &message, diff --git a/wallet/src/signer/trezor_signer/tests.rs b/wallet/src/signer/trezor_signer/tests.rs index 34ac4cb185..9b0fd20e2c 100644 --- a/wallet/src/signer/trezor_signer/tests.rs +++ b/wallet/src/signer/trezor_signer/tests.rs @@ -30,7 +30,7 @@ use crate::signer::{ }, generic_tests::{ test_sign_message_generic, test_sign_transaction_generic, - test_sign_transaction_intent_generic, + test_sign_transaction_intent_generic, MessageToSign, }, make_deterministic_software_signer, no_another_signer, }, @@ -75,14 +75,28 @@ pub fn make_deterministic_trezor_signer( #[trace] #[serial] #[case(Seed::from_entropy())] -fn test_sign_message(#[case] seed: Seed) { +fn test_sign_message( + #[case] seed: Seed, + #[values( + MessageToSign::Random, + // Special case: an "overlong" utf-8 string (basically, the letter 'K' encoded with 2 bytes + // instead of 1). The firmware used to have troubles with this. + MessageToSign::Predefined(vec![193, 139]) + )] + message_to_sign: MessageToSign, +) { log::debug!("test_sign_message, seed = {seed:?}"); let _join_guard = maybe_spawn_auto_confirmer(); let mut rng = make_seedable_rng(seed); - test_sign_message_generic(&mut rng, make_trezor_signer, no_another_signer()); + test_sign_message_generic( + &mut rng, + message_to_sign, + make_trezor_signer, + no_another_signer(), + ); } #[rstest] @@ -175,6 +189,7 @@ fn test_sign_message_sig_consistency(#[case] seed: Seed) { test_sign_message_generic( &mut rng, + MessageToSign::Random, make_deterministic_trezor_signer, Some(make_deterministic_software_signer), );