Skip to content

Commit 3328f39

Browse files
committed
test(bip137): add test vectors for bip137 fix
Added unit tests agains BIP137 spec and apply lenient agains strict checks.
1 parent e15abe7 commit 3328f39

2 files changed

Lines changed: 314 additions & 27 deletions

File tree

tests/pages/home_pages/test_sign_message_ui.py

Lines changed: 16 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def test_sign_message(mocker, m5stickv, tdata):
6868
BUTTON_ENTER, # Hex Public Key Text
6969
BUTTON_ENTER, # PK QR code
7070
],
71-
"MEQCIHKmpv1+vgPpFTN0JXjyrMK2TtLHVeJJ2TydPYmEt0RnAiBJVt/Y61ef5VlWjG08zf92AeF++BWdYm1Yd9IEy2cSqA==",
71+
"KNDYjnAavccLPKVJ7u6RjWs9n2NzN+kHc8MHrrUiQRq9TEoXa3UAbwsjESNCi7wcAZ9Vw1N7K+ujZzasgEgsvL0=",
7272
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b",
7373
None,
7474
),
@@ -86,7 +86,7 @@ def test_sign_message(mocker, m5stickv, tdata):
8686
BUTTON_ENTER, # Hex Public Key Text
8787
BUTTON_ENTER, # PK QR code
8888
],
89-
"MEQCIEHpCMfQ+5mBAOH//OCxF6iojpVtIS6G7X+3r3qB/0CaAiAkbjW2SGrPLvju+O05yH2x/4EKL2qlkdWnquiVkUY3jQ==",
89+
"KIyFNagItWNotujcQQ7AoXLO90ndVEmsQvXeJbaTnFKufb2eq+G1RKvxRw+eR887Rn0UgqAKyrji4GQQYGfxvkw=",
9090
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b",
9191
None,
9292
),
@@ -167,11 +167,11 @@ def test_sign_message(mocker, m5stickv, tdata):
167167
BUTTON_PAGE_PREV, # Move to "Go"
168168
BUTTON_ENTER, # Press "Go" (saved pubkey to SD)
169169
],
170-
"MEQCIHKmpv1+vgPpFTN0JXjyrMK2TtLHVeJJ2TydPYmEt0RnAiBJVt/Y61ef5VlWjG08zf92AeF++BWdYm1Yd9IEy2cSqA==", # 4 base64 for display_qr_codes / print_qr_prompt
170+
"KNDYjnAavccLPKVJ7u6RjWs9n2NzN+kHc8MHrrUiQRq9TEoXa3UAbwsjESNCi7wcAZ9Vw1N7K+ujZzasgEgsvL0=", # 4 base64 for display_qr_codes / print_qr_prompt
171171
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b", # 5 pubkey for display_qr_codes / print_qr_prompt
172172
# 6 SD file
173173
binascii.b2a_base64(
174-
"MEQCIHKmpv1+vgPpFTN0JXjyrMK2TtLHVeJJ2TydPYmEt0RnAiBJVt/Y61ef5VlWjG08zf92AeF++BWdYm1Yd9IEy2cSqA==".encode(
174+
"KNDYjnAavccLPKVJ7u6RjWs9n2NzN+kHc8MHrrUiQRq9TEoXa3UAbwsjESNCi7wcAZ9Vw1N7K+ujZzasgEgsvL0=".encode(
175175
"utf-8"
176176
),
177177
newline=False,
@@ -206,7 +206,6 @@ def test_sign_message(mocker, m5stickv, tdata):
206206
with patch(
207207
"builtins.open", new=get_mock_open({"/sd/signed-message.sig": case[6]})
208208
) as mock_file:
209-
210209
# function being tested
211210
home.sign_message()
212211

@@ -263,7 +262,7 @@ def test_sign_message_invalid_derivations(mocker, m5stickv, tdata):
263262
],
264263
"signmessage m84h ascii:hello",
265264
"m84h",
266-
"MEQCIA7DCCFox6tQqC3GE9a5IMvm8cVu1Zh6OWcUE1gls77gAiAzLncevU9FFJRvG83ahSJ8hISimgtSSdRHye2rmijwlg==",
265+
"J7jAswueRmlhh64HDmfIuVvo5pcMMgBYdSCXAnMh2NQsQUwYkyI1O8G0F/8ChIiOz2pfCiQwE0FfOXWTAtMsMDE=",
267266
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b",
268267
),
269268
(
@@ -278,7 +277,7 @@ def test_sign_message_invalid_derivations(mocker, m5stickv, tdata):
278277
],
279278
"signmessage m/8xh/0/0 ascii:hello",
280279
"m/8xh/0/0",
281-
"MEQCIDL/XdIRF+v0wnN/JDOu2XYMTYqJaAyjuIDdSG4E/909AiASARSc1zfJsvUKC6MDQlM3E2lrkTx3iYfpJUWRZy/Vpg==",
280+
"JwdAF2MY6uglo4E3Wxbbi9G6NyrEna4LyYBsUueJg8yoLQm39BHDJ+ulgRhXl2RI/BManG05oTmRyXOqjDfDrs0=",
282281
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b",
283282
),
284283
( # 2 - QR invalid (empty segment)
@@ -293,15 +292,13 @@ def test_sign_message_invalid_derivations(mocker, m5stickv, tdata):
293292
],
294293
"signmessage m//0 ascii:hello",
295294
"m//0",
296-
"MEQCIDx4K8atJhGiaFdCCsgaUqFv22ncJ3AFHczFsNLZmbcGAiBuQdB5/pztOHjyQt0DKmuMKo799raQuRrXMVKK69ELjQ==",
295+
"J0yYgnVLwEditYd+QwmJrXqFRplrBqfUfUHOpAF4m+EEW9MYf4BVp/SWPujLDYfQKWxbpRPVZdaYuyGm77bNSsE=",
297296
"02707a62fdacc26ea9b63b1c197906f56ee0180d0bcf1966e1a2da34f5f3a09a9b",
298297
),
299298
]
300299

301-
n = 0
302-
for case in cases:
300+
for n, case in enumerate(cases):
303301
print("Case: ", n)
304-
n = 0
305302

306303
# A mainnet wallet
307304
wallet = Wallet(tdata.SINGLESIG_SIGNING_KEY)
@@ -372,7 +369,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
372369
False,
373370
"a test message with a colon ':' character.",
374371
"3. bc1qgl5…3cn3", # bc1qgl5vlg0zdl7yvprgxj9fevsc6q6x5dmcyk3cn3
375-
"IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
372+
"KN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
376373
),
377374
( # 1 - Sign P2WPKH Testnet
378375
[
@@ -387,7 +384,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
387384
False,
388385
"A test message.",
389386
"3. tb1qynp…m5km",
390-
"ILc30ti8OPSpCtzfj7sNnftANBCuVpyRX7pnM3iAgOk9F9IUtnXNPus0+MF12y5HKYHAB6IVYr66sLmL3Vi3oEE=",
387+
"KLc30ti8OPSpCtzfj7sNnftANBCuVpyRX7pnM3iAgOk9F9IUtnXNPus0+MF12y5HKYHAB6IVYr66sLmL3Vi3oEE=",
391388
),
392389
( # 2 - Sign P2TR Mainnet
393390
[
@@ -432,7 +429,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
432429
False,
433430
"a test message with a colon ':' character.",
434431
"3. 38CahkV…sEAN",
435-
"HyH8898c2S6eF8hTPGhRqLC6UQrJrhw/fdguBeFG0cCrOFkbG8TCVURXOgxXaEV93vrFlHyxNGEvL10IcsLtvvI=",
432+
"IyH8898c2S6eF8hTPGhRqLC6UQrJrhw/fdguBeFG0cCrOFkbG8TCVURXOgxXaEV93vrFlHyxNGEvL10IcsLtvvI=",
436433
),
437434
( # 5 - Sign P2WPKH Mainnet - Save to SD card
438435
[
@@ -449,7 +446,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
449446
True, # Sign to SD
450447
"A test message.",
451448
"3. bc1qgl5…3cn3",
452-
"IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
449+
"KN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
453450
),
454451
( # 6 - Sign P2WPKH Mainnet - Load from and save to SD card
455452
[
@@ -468,7 +465,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
468465
True, # Sign to SD
469466
"A test message.",
470467
"3. bc1qgl5…3cn3",
471-
"IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
468+
"KN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
472469
),
473470
( # 7 - Sign empty - Load from and save to SD card
474471
[
@@ -488,7 +485,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
488485
True, # Sign to SD
489486
"A test message.",
490487
"3. bc1qgl…cn3",
491-
"IN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
488+
"KN/4LmcGRaI5sgvBP2mrTXQFvD6FecXd8La03SixPabsb/255ElRGTcXhicT3KFsNJbfQ9te909ZXeKMaqUcaPM=",
492489
),
493490
]
494491
case_count = 0
@@ -532,7 +529,7 @@ def test_sign_message_at_address(mocker, m5stickv, tdata):
532529

533530
if case[2] != b"":
534531
ctx.display.draw_hcentered_text.assert_has_calls(
535-
[mocker.call("Message:", 10, theme.highlight_color)]
532+
[mocker.call("Message:", mocker.ANY, theme.highlight_color)]
536533
)
537534
ctx.display.draw_hcentered_text.assert_has_calls(
538535
[mocker.call(case[4], mocker.ANY, max_lines=10)]
@@ -577,20 +574,12 @@ def test_load_from_sd_card(mocker, m5stickv, tdata):
577574

578575
ctx = create_ctx(mocker, btn_seq, wallet)
579576
sign_msg = SignMessage(ctx)
580-
581-
# test sign at address with binary content (it can't be decoded to UTF8 and it is not sign to address)
582-
sign_msg._sign_at_address_from_sd(file_content) == None
583-
584-
# mock load of file
577+
assert sign_msg._sign_at_address_from_sd(file_content) is None
585578
sign_msg._load_message = lambda: (file_content, FORMAT_NONE, filename)
586579

587580
mocker.spy(sign_msg, "_export_signature")
588581
mocker.spy(sign_msg, "_export_to_qr")
589-
590-
# Successful sign a binary (that can't be decoded) from sd card
591582
sign_msg.sign_message()
592-
593-
# Assert signature sucessfully exported to QR
594583
sign_msg._export_signature.assert_called()
595584
sign_msg._export_to_qr.assert_called()
596585

0 commit comments

Comments
 (0)