From 9b6b560447df23833cc54dd44b500cf8bea5a138 Mon Sep 17 00:00:00 2001 From: Ilya Artemov Date: Tue, 21 Jan 2025 11:08:49 +0100 Subject: [PATCH 1/3] Extending and fixing transacation tests - several (chained) sub-commands covered - change case covered - amount values corrected --- tests/monero_client/monero_cmd.py | 45 +++-- .../test_validate_prehash_update/00001.png | Bin 26917 -> 0 bytes .../00000.png | Bin .../00001.png | Bin 0 -> 27647 bytes .../00002.png | Bin 0 -> 4145 bytes .../00000.png | Bin 0 -> 7195 bytes .../00001.png} | Bin .../test_validate_prehash_update/00000.png | Bin 439 -> 0 bytes .../00000.png | Bin 0 -> 364 bytes .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin .../00005.png | Bin .../00006.png | Bin .../00007.png | Bin .../00008.png | Bin .../00000.png | Bin 0 -> 372 bytes .../00001.png | Bin 0 -> 411 bytes .../00002.png | Bin 0 -> 340 bytes .../test_validate_prehash_update/00000.png | Bin 467 -> 0 bytes .../test_validate_prehash_update/00004.png | Bin 306 -> 0 bytes .../00000.png | Bin 0 -> 390 bytes .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin .../00004.png | Bin 0 -> 306 bytes .../00000.png | Bin 0 -> 397 bytes .../00001.png} | Bin .../test_validate_prehash_update/00000.png | Bin 467 -> 0 bytes .../test_validate_prehash_update/00004.png | Bin 306 -> 0 bytes .../00000.png | Bin 0 -> 390 bytes .../00001.png | Bin .../00002.png | Bin .../00003.png | Bin 0 -> 437 bytes .../00004.png | Bin 0 -> 306 bytes .../00000.png | Bin 0 -> 397 bytes .../00001.png | Bin 0 -> 437 bytes .../test_validate_prehash_update/00001.png | Bin 24018 -> 0 bytes .../test_validate_prehash_update/00003.png | Bin 3901 -> 0 bytes .../00000.png | Bin .../00001.png | Bin 0 -> 24157 bytes .../00002.png | Bin 0 -> 3901 bytes .../00000.png | Bin 0 -> 6735 bytes .../00001.png} | Bin tests/test_sig.py | 164 +++++++++--------- 46 files changed, 116 insertions(+), 93 deletions(-) delete mode 100644 tests/snapshots/flex/test_validate_prehash_update/00001.png rename tests/snapshots/flex/{test_validate_prehash_update => test_validate_prehash_update_first}/00000.png (100%) create mode 100644 tests/snapshots/flex/test_validate_prehash_update_first/00001.png create mode 100644 tests/snapshots/flex/test_validate_prehash_update_first/00002.png create mode 100644 tests/snapshots/flex/test_validate_prehash_update_last/00000.png rename tests/snapshots/flex/{test_validate_prehash_update/00002.png => test_validate_prehash_update_last/00001.png} (100%) delete mode 100644 tests/snapshots/nanos/test_validate_prehash_update/00000.png create mode 100644 tests/snapshots/nanos/test_validate_prehash_update_first/00000.png rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00001.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00002.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00003.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00004.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00005.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00006.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00007.png (100%) rename tests/snapshots/nanos/{test_validate_prehash_update => test_validate_prehash_update_first}/00008.png (100%) create mode 100644 tests/snapshots/nanos/test_validate_prehash_update_last/00000.png create mode 100644 tests/snapshots/nanos/test_validate_prehash_update_last/00001.png create mode 100644 tests/snapshots/nanos/test_validate_prehash_update_last/00002.png delete mode 100644 tests/snapshots/nanosp/test_validate_prehash_update/00000.png delete mode 100644 tests/snapshots/nanosp/test_validate_prehash_update/00004.png create mode 100644 tests/snapshots/nanosp/test_validate_prehash_update_first/00000.png rename tests/snapshots/nanosp/{test_validate_prehash_update => test_validate_prehash_update_first}/00001.png (100%) rename tests/snapshots/nanosp/{test_validate_prehash_update => test_validate_prehash_update_first}/00002.png (100%) rename tests/snapshots/nanosp/{test_validate_prehash_update => test_validate_prehash_update_first}/00003.png (100%) create mode 100644 tests/snapshots/nanosp/test_validate_prehash_update_first/00004.png create mode 100644 tests/snapshots/nanosp/test_validate_prehash_update_last/00000.png rename tests/snapshots/{nanox/test_validate_prehash_update/00003.png => nanosp/test_validate_prehash_update_last/00001.png} (100%) delete mode 100644 tests/snapshots/nanox/test_validate_prehash_update/00000.png delete mode 100644 tests/snapshots/nanox/test_validate_prehash_update/00004.png create mode 100644 tests/snapshots/nanox/test_validate_prehash_update_first/00000.png rename tests/snapshots/nanox/{test_validate_prehash_update => test_validate_prehash_update_first}/00001.png (100%) rename tests/snapshots/nanox/{test_validate_prehash_update => test_validate_prehash_update_first}/00002.png (100%) create mode 100644 tests/snapshots/nanox/test_validate_prehash_update_first/00003.png create mode 100644 tests/snapshots/nanox/test_validate_prehash_update_first/00004.png create mode 100644 tests/snapshots/nanox/test_validate_prehash_update_last/00000.png create mode 100644 tests/snapshots/nanox/test_validate_prehash_update_last/00001.png delete mode 100644 tests/snapshots/stax/test_validate_prehash_update/00001.png delete mode 100644 tests/snapshots/stax/test_validate_prehash_update/00003.png rename tests/snapshots/stax/{test_validate_prehash_update => test_validate_prehash_update_first}/00000.png (100%) create mode 100644 tests/snapshots/stax/test_validate_prehash_update_first/00001.png create mode 100644 tests/snapshots/stax/test_validate_prehash_update_first/00002.png create mode 100644 tests/snapshots/stax/test_validate_prehash_update_last/00000.png rename tests/snapshots/stax/{test_validate_prehash_update/00002.png => test_validate_prehash_update_last/00001.png} (100%) diff --git a/tests/monero_client/monero_cmd.py b/tests/monero_client/monero_cmd.py index 0b08c1f6..bfd8f906 100644 --- a/tests/monero_client/monero_cmd.py +++ b/tests/monero_client/monero_cmd.py @@ -314,7 +314,7 @@ def blind(self, MoneroCryptoCmd.HMAC_KEY, Type.AMOUNT_KEY), mask, - amount.to_bytes(32, byteorder="big") + amount.to_bytes(32, byteorder="little") ]) self.device.send(cla=PROTOCOL_VERSION, @@ -451,16 +451,28 @@ def validate_prehash_update(self, )) if firmware.device == "nanos": - instructions = get_nano_review_instructions(7) + if is_last: + instructions = get_nano_review_instructions(1) + else: + instructions = get_nano_review_instructions(7) elif firmware.device.startswith("nano"): - instructions = get_nano_review_instructions(3) + if is_last: + instructions = get_nano_review_instructions(1) + else: + instructions = get_nano_review_instructions(3) else: - instructions = [ + if is_last: + instructions = [ +# NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), + NavIns(NavInsID.USE_CASE_REVIEW_TAP), + NavIns(NavInsID.USE_CASE_REVIEW_CONFIRM) + ] - NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), - NavIns(NavInsID.USE_CASE_REVIEW_TAP), - NavIns(NavInsID.USE_CASE_REVIEW_CONFIRM) - ] + else: + instructions = [ + NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), + NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), + ] backend.wait_for_text_on_screen("Processing") with self.device.send_async(cla=PROTOCOL_VERSION, @@ -470,11 +482,15 @@ def validate_prehash_update(self, option=(0 if is_last else 0x80) | ( 0x02 if is_short else 0), payload=payload): - - navigator.navigate_and_compare(TESTS_ROOT_DIR, - test_name + "_prehash_update", - instructions, - screen_change_after_last_instruction=False, timeout=10000) + if is_last: + navigator.navigate_and_compare(TESTS_ROOT_DIR, + test_name + "_prehash_update_last", + instructions, + screen_change_after_last_instruction=False, timeout=10000) + else: + navigator.navigate_and_compare(TESTS_ROOT_DIR, + test_name + "_prehash_update_first", + instructions) sw, response = self.device.async_response() # type: int, bytes @@ -527,4 +543,5 @@ def validate_prehash_finalize(self, if not sw & 0x9000: raise DeviceError(error_code=sw, ins=ins, message="P1=3 (finalize)") - assert len(response) == 32 + if is_last: + assert len(response) == 32 diff --git a/tests/snapshots/flex/test_validate_prehash_update/00001.png b/tests/snapshots/flex/test_validate_prehash_update/00001.png deleted file mode 100644 index e8e0658cf089e0f5f7670f3ded64c11acffadf8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26917 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 F{{X&uI-~#q diff --git a/tests/snapshots/flex/test_validate_prehash_update/00000.png b/tests/snapshots/flex/test_validate_prehash_update_first/00000.png similarity index 100% rename from tests/snapshots/flex/test_validate_prehash_update/00000.png rename to tests/snapshots/flex/test_validate_prehash_update_first/00000.png diff --git a/tests/snapshots/flex/test_validate_prehash_update_first/00001.png b/tests/snapshots/flex/test_validate_prehash_update_first/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..80e695ca8a77fd13eff0edced1d36cd6c705ca11 GIT binary patch literal 27647 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 J+u69ne*n@*d*J{8 literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_validate_prehash_update_last/00000.png b/tests/snapshots/flex/test_validate_prehash_update_last/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..ed0ded39c3a203d0299a1fd1bf9ab5b77c039f13 GIT binary patch literal 7195 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/flex/test_validate_prehash_update/00002.png b/tests/snapshots/flex/test_validate_prehash_update_last/00001.png similarity index 100% rename from tests/snapshots/flex/test_validate_prehash_update/00002.png rename to tests/snapshots/flex/test_validate_prehash_update_last/00001.png diff --git a/tests/snapshots/nanos/test_validate_prehash_update/00000.png b/tests/snapshots/nanos/test_validate_prehash_update/00000.png deleted file mode 100644 index b16b0c5f2cdeb70e119050321f960fefabdec2cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 439 zcmV;o0Z9IdP)gw{r?}li*;dV5gr2`+w&mo?Y> zG(`XkO}@|`pJPAiV45xHXFWJbb_MXQS#Rz&bgg9XB;8~OpujifCK2-#)dz+n{;!qy zuOQy}AO`s$2KgWcnZWy*ynBCXkTLJ+x)0;5;R>CVj()AJNu0~p4E8UzqC;hBbDlkN zMV1tGX4U8}W~8rKyL~&dk(za+n(Pef(Jd@f=b7b!7qM$!GJ8@Wo09UMv3#Hx#0_$) zlHSX__6)kxwXB$N#3SYnQgoUf?-nj<#_7Isys@JR9uFhtovs|jPZvgS06Gj6XNfq6 zM;_Zx{}DZ6UjMI9E39z3e6by^?-En-36uCXRpFul=v)Zbpn;Y(^*6Ong?RALBI_)f hEp-3@0001fkOxa;376{zI#d7v002ovPDHLkV1hwP!2kdN diff --git a/tests/snapshots/nanos/test_validate_prehash_update_first/00000.png b/tests/snapshots/nanos/test_validate_prehash_update_first/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..b007f1a9f63a736d4a1adf60b21781e37d59ef89 GIT binary patch literal 364 zcmV-y0h9iTP)WzmQ;GqV1r~wjYAIW$27t}JmN=`S@>9mh_+Ey9kf*%tjSL7>jY6;HqJQiaw`?{wn zJzY+iQp8zQw|ro50#rT35AIq}i=;}mI*kS=fVE&JDYhs*Sco2BO3SkeV?pDUIG@&E z2#z(KsO3B{ig6JD`4Z>^*!@_&l@@zb`%kwHs(qgjLI@#*1mgwc=QypF^n735 z-V+ERJjK_WU<9CoRE91KZAr#B)mrY3;K$2*0(%%A#cBD3e^;g$RJt2kD+Osd@D*U_ zahdc5@VjuS0O+Nn(TSU@3xM(n@DkLCs7=7~yMR#vX$du}=x(zX%$SWoM0zoCIvTd~ z$fj|32|`0}my^M3CZ}U^4N7fFn`SZ&5J`L}^u8x>Ye4BHu5>@DEz&Z7&4(?W<3`Fc zocdR;2U;wZaq_LFwwO(-9~cL*el}D73SgfDQqJZ_s>Ynvn{K$;UjVKEecfNO^nh_8 z0UUrsNP?S8uSgTdUjohh5klSJ0st?W*a6oe4S$%MpfFyAe-MRVzuvj~whwnme)dyh(%wJ0o zxqYc$k#~Oe6AnxMldRiL(Qo0s+$4s@&lK0)vk@xox=z6(XP%{9hW@Ovr5JLD}zThU4407w^5<Wn(a@N8}O3edLRXnQ+X6VNz=tirC2tMZCB9v9TrEhu*?5>yA&(Wkg*@T)4~ zA)G4;u!oHfOu3SNApx7$mlNaaljIZm+b2n0*9XCbd;p46#m%=O=cE7t002ovPDHLk FV1nB?yg>i} literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanos/test_validate_prehash_update_last/00002.png b/tests/snapshots/nanos/test_validate_prehash_update_last/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..9c7e7049cb3e9bcfb1601ec510ee465d38229d4d GIT binary patch literal 340 zcmV-a0jvIrP)b=%MgRq*37h4eRxPbkJCLY|1VIo49_}P}TKpH4$L<8?X{t;p zy+UQc_4@p%0?~E_&igM#?#L~IOHR(-<@sYotiy&C*Y&GII0yeh-p3zW9cv$Q0k>6Y_)5~SfP=m zSMUtz)%Ex|-o}7!H9hbQ(8{%C?kQVa?C`*Uj-J(h>P7(Y#?ZWvi?6}@n{fGLp>YTp myqR(V_$?>^<%seR_VWh!EaktG3V`#=)5BeJPv_T zXZ>#cpLE09e!_&-gNBO6%ih|?XR-w!GA{H2YJ!0W{@P2Y1TBgdd|UGlcdR~_J*Il9#_a+9$+Qx=%ikR|4^uk$}pXqO{D=&&>?~nV(EqQNU z@wttA=le-CWUbUM>6hO$|4zXvu`kut1;HPd9Qy-_5ah7#x~Fxzw$>s&_5-e7^DR%l(zhcdzG`$UbeKY&WG(ZlCv@$G*Ok zZeKaW%)CIosh%;*sx0Dv(7i3(<#JJ(CDZ1ZmBNA-NFO-Ef8u-d-VM>^6(CVhS3j3^ HP6}?;rCbaPG-m^U|X;&6Xcsw~yB@@AKn}_dX>od)j4Y zoS?7!?c1%0{nrzgExs&kdu@8qqRZw6%x304o+{*?t)74GJCpu_`D?tzmsn@*dbF~= zZ^}1^?%l`kI~F=$ynY zo6R5obAP1wyIE4rS>QsGp+RuRgbB?Qz413xmBP6_I&5@WJ|#kpik5cl8P zMFQ&g_rKzl(OUXsPWFsjZg=yT+uYwo-YwnbeKS$(m*|DNon_mPoy#jZd~5mX^&6IN ze>-Qh*)L5erd4Yresr*}R2O&AbUfetz`irQLHF#w9r7QuUE@6UxC5JV0`FO+{t)@f z-*fV1eq3ez?hDL{>{U-3`eif(YgHGmf3o=hrE`b37fw@FXK&yA@05FP&+~sXZWw2( z_)L5L)bL;GeYuxzdg}GNHP&`Sm(*Txzo3#3;ry(5x@yKEwX_>^r(IS#aQ(igOO5-l z6!Bk6?v~uscHy+T-!^;ppL&Cpe&3fBhj*mKu&mmp62bT{O=jQJGV^6??N6(%(ESAq e4j}!&`Y+@AUBBXYmCf1$683cUb6Mw<&;$TU4yzad literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_validate_prehash_update/00001.png b/tests/snapshots/nanosp/test_validate_prehash_update_first/00001.png similarity index 100% rename from tests/snapshots/nanosp/test_validate_prehash_update/00001.png rename to tests/snapshots/nanosp/test_validate_prehash_update_first/00001.png diff --git a/tests/snapshots/nanosp/test_validate_prehash_update/00002.png b/tests/snapshots/nanosp/test_validate_prehash_update_first/00002.png similarity index 100% rename from tests/snapshots/nanosp/test_validate_prehash_update/00002.png rename to tests/snapshots/nanosp/test_validate_prehash_update_first/00002.png diff --git a/tests/snapshots/nanosp/test_validate_prehash_update/00003.png b/tests/snapshots/nanosp/test_validate_prehash_update_first/00003.png similarity index 100% rename from tests/snapshots/nanosp/test_validate_prehash_update/00003.png rename to tests/snapshots/nanosp/test_validate_prehash_update_first/00003.png diff --git a/tests/snapshots/nanosp/test_validate_prehash_update_first/00004.png b/tests/snapshots/nanosp/test_validate_prehash_update_first/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e1237d4076e88005e87d25cd4877e9a41d85b5b7 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBIScSu2mA>h~! z;cxp@zCCK^OkBX9v*+@wIiFQo^!tkr9-9JG4FU}U_Kt<#nqQ00S+1DA@p5wQ*2TV> zPv`6oXjh)UY;KVG-qWv+MRqTIy#IKs+|`*j<-y@|GB-!Rd3F22W3&5mZ;koWqT((l zv8`Ep^j4ho>+4cyO1A7?eEe6CSIIB7v;&XW>}8g${rTqd&+P};KTIoq*;L~08-C~O zrHPm1G78WC5EC&Ev7Ia4eLH?n)UH1-RqteluhsJkx7;>!=P~m$+w;r+{#ZR_dhY#u z>c37XznJZ^moxr?rv7uFyAOoV_&=W;>;(pfAM@o7g>Bt>&TT#$NW|0C&t;ucLK6V4 Cz>5|D literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanosp/test_validate_prehash_update_last/00000.png b/tests/snapshots/nanosp/test_validate_prehash_update_last/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..c5381b2e4840ed92e42827e48c03ea004e174954 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|~;zJBBV z7ko=fW=G^tl4#(YE%|hdhWE8YbBdQgyDi3KyU6-OTX*2U>2c0G`y8JaPQMn_Y%>2B zPeEVHnR%fdyLVnlxQ(@3{6f zBQnXg$;&mmW7n7uSYwtU~>v_YkJ-fcM zM8DgSy1jOh@q#_C^QX#$Y?pB=VJOoSzxV6W=BaaC{s~?1bu8Y|-S|@}-QjQ5F5i?_ o&y>D*n68-lnh_Q*3=9WS{0%RCY1{MaT^C5u)78&qol`;+08*N>zW@LL literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_validate_prehash_update/00003.png b/tests/snapshots/nanosp/test_validate_prehash_update_last/00001.png similarity index 100% rename from tests/snapshots/nanox/test_validate_prehash_update/00003.png rename to tests/snapshots/nanosp/test_validate_prehash_update_last/00001.png diff --git a/tests/snapshots/nanox/test_validate_prehash_update/00000.png b/tests/snapshots/nanox/test_validate_prehash_update/00000.png deleted file mode 100644 index 6a2a0062b439892fc5bb00cdb7d2169488cb3f64..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 467 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|^i(>EaktG3V`#=)5BeJPv_T zXZ>#cpLE09e!_&-gNBO6%ih|?XR-w!GA{H2YJ!0W{@P2Y1TBgdd|UGlcdR~_J*Il9#_a+9$+Qx=%ikR|4^uk$}pXqO{D=&&>?~nV(EqQNU z@wttA=le-CWUbUM>6hO$|4zXvu`kut1;HPd9Qy-_5ah7#x~Fxzw$>s&_5-e7^DR%l(zhcdzG`$UbeKY&WG(ZlCv@$G*Ok zZeKaW%)CIosh%;*sx0Dv(7i3(<#JJ(CDZ1ZmBNA-NFO-Ef8u-d-VM>^6(CVhS3j3^ HP6}?;rCbaPG-m^U|X;&6Xcsw~yB@@AKn}_dX>od)j4Y zoS?7!?c1%0{nrzgExs&kdu@8qqRZw6%x304o+{*?t)74GJCpu_`D?tzmsn@*dbF~= zZ^}1^?%l`kI~F=$ynY zo6R5obAP1wyIE4rS>QsGp+RuRgbB?Qz413xmBP6_I&5@WJ|#kpik5cl8P zMFQ&g_rKzl(OUXsPWFsjZg=yT+uYwo-YwnbeKS$(m*|DNon_mPoy#jZd~5mX^&6IN ze>-Qh*)L5erd4Yresr*}R2O&AbUfetz`irQLHF#w9r7QuUE@6UxC5JV0`FO+{t)@f z-*fV1eq3ez?hDL{>{U-3`eif(YgHGmf3o=hrE`b37fw@FXK&yA@05FP&+~sXZWw2( z_)L5L)bL;GeYuxzdg}GNHP&`Sm(*Txzo3#3;ry(5x@yKEwX_>^r(IS#aQ(igOO5-l z6!Bk6?v~uscHy+T-!^;ppL&Cpe&3fBhj*mKu&mmp62bT{O=jQJGV^6??N6(%(ESAq e4j}!&`Y+@AUBBXYmCf1$683cUb6Mw<&;$TU4yzad literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_validate_prehash_update/00001.png b/tests/snapshots/nanox/test_validate_prehash_update_first/00001.png similarity index 100% rename from tests/snapshots/nanox/test_validate_prehash_update/00001.png rename to tests/snapshots/nanox/test_validate_prehash_update_first/00001.png diff --git a/tests/snapshots/nanox/test_validate_prehash_update/00002.png b/tests/snapshots/nanox/test_validate_prehash_update_first/00002.png similarity index 100% rename from tests/snapshots/nanox/test_validate_prehash_update/00002.png rename to tests/snapshots/nanox/test_validate_prehash_update_first/00002.png diff --git a/tests/snapshots/nanox/test_validate_prehash_update_first/00003.png b/tests/snapshots/nanox/test_validate_prehash_update_first/00003.png new file mode 100644 index 0000000000000000000000000000000000000000..63db7647ff4de471b692cef68df0dd8b4493503a GIT binary patch literal 437 zcmV;m0ZRUfP)H)9Sou?uP9KCFrKKF+B( z;dDNobK&3DycRuuINRTY)L*Pr0$5)Gc;%0-)0rFVUG7c?ti&voc!}a z^m_?^%x(_-t=0+IU5P!nJei>HemJV%O^AWi`bi7^_y_{Tz^qV00000 f0000006^Cl!j~X&&{~Bn00000NkvXXu0mjfCg#d| literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_validate_prehash_update_first/00004.png b/tests/snapshots/nanox/test_validate_prehash_update_first/00004.png new file mode 100644 index 0000000000000000000000000000000000000000..e1237d4076e88005e87d25cd4877e9a41d85b5b7 GIT binary patch literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h5*Qa?Ri978JRyuBIScSu2mA>h~! z;cxp@zCCK^OkBX9v*+@wIiFQo^!tkr9-9JG4FU}U_Kt<#nqQ00S+1DA@p5wQ*2TV> zPv`6oXjh)UY;KVG-qWv+MRqTIy#IKs+|`*j<-y@|GB-!Rd3F22W3&5mZ;koWqT((l zv8`Ep^j4ho>+4cyO1A7?eEe6CSIIB7v;&XW>}8g${rTqd&+P};KTIoq*;L~08-C~O zrHPm1G78WC5EC&Ev7Ia4eLH?n)UH1-RqteluhsJkx7;>!=P~m$+w;r+{#ZR_dhY#u z>c37XznJZ^moxr?rv7uFyAOoV_&=W;>;(pfAM@o7g>Bt>&TT#$NW|0C&t;ucLK6V4 Cz>5|D literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_validate_prehash_update_last/00000.png b/tests/snapshots/nanox/test_validate_prehash_update_last/00000.png new file mode 100644 index 0000000000000000000000000000000000000000..c5381b2e4840ed92e42827e48c03ea004e174954 GIT binary patch literal 397 zcmeAS@N?(olHy`uVBq!ia0vp^4M6O`!2~2@x4h6`U|~;zJBBV z7ko=fW=G^tl4#(YE%|hdhWE8YbBdQgyDi3KyU6-OTX*2U>2c0G`y8JaPQMn_Y%>2B zPeEVHnR%fdyLVnlxQ(@3{6f zBQnXg$;&mmW7n7uSYwtU~>v_YkJ-fcM zM8DgSy1jOh@q#_C^QX#$Y?pB=VJOoSzxV6W=BaaC{s~?1bu8Y|-S|@}-QjQ5F5i?_ o&y>D*n68-lnh_Q*3=9WS{0%RCY1{MaT^C5u)78&qol`;+08*N>zW@LL literal 0 HcmV?d00001 diff --git a/tests/snapshots/nanox/test_validate_prehash_update_last/00001.png b/tests/snapshots/nanox/test_validate_prehash_update_last/00001.png new file mode 100644 index 0000000000000000000000000000000000000000..63db7647ff4de471b692cef68df0dd8b4493503a GIT binary patch literal 437 zcmV;m0ZRUfP)H)9Sou?uP9KCFrKKF+B( z;dDNobK&3DycRuuINRTY)L*Pr0$5)Gc;%0-)0rFVUG7c?ti&voc!}a z^m_?^%x(_-t=0+IU5P!nJei>HemJV%O^AWi`bi7^_y_{Tz^qV00000 f0000006^Cl!j~X&&{~Bn00000NkvXXu0mjfCg#d| literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_validate_prehash_update/00001.png b/tests/snapshots/stax/test_validate_prehash_update/00001.png deleted file mode 100644 index 3d4e8d6b749597b26719391024c61380ab58cc19..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24018 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 X{qCaciCqJ%_5<1)w{Mo+u#fl~+jTfG diff --git a/tests/snapshots/stax/test_validate_prehash_update/00003.png b/tests/snapshots/stax/test_validate_prehash_update/00003.png deleted file mode 100644 index 264824aa9a063e7a04efb45f808709411e10d93c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3901 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 literal 0 HcmV?d00001 diff --git a/tests/snapshots/stax/test_validate_prehash_update_first/00002.png b/tests/snapshots/stax/test_validate_prehash_update_first/00002.png new file mode 100644 index 0000000000000000000000000000000000000000..740935316268cd56e58f77883bd86fb2a13c95fe GIT binary patch literal 3901 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 Date: Tue, 21 Jan 2025 11:19:06 +0100 Subject: [PATCH 2/3] A trick to freeze the secret for test purposes --- src/monero_crypto.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/monero_crypto.c b/src/monero_crypto.c index f986f933..713f2330 100644 --- a/src/monero_crypto.c +++ b/src/monero_crypto.c @@ -1270,6 +1270,8 @@ int monero_rng_mod_order(unsigned char *r, size_t r_len) { unsigned char rnd[32 + 8]; int error; cx_rng(rnd, 32 + 8); + /* To uncomment in order to freeze the secret for test purposes */ + /* memset(rnd, 0xBB, 32 + 8); */ error = cx_math_modm_no_throw(rnd, 32 + 8, (unsigned char *)C_ED25519_ORDER, 32); if (error) { return SW_SECURITY_INTERNAL; From 734c397bbe173e884ccada61a089625b93cb599d Mon Sep 17 00:00:00 2001 From: Ilya Artemov Date: Tue, 21 Jan 2025 16:33:16 +0100 Subject: [PATCH 3/3] Addressing remarks from https://github.com/LedgerHQ/app-monero/pull/145 --- tests/monero_client/monero_cmd.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tests/monero_client/monero_cmd.py b/tests/monero_client/monero_cmd.py index bfd8f906..0510a5e4 100644 --- a/tests/monero_client/monero_cmd.py +++ b/tests/monero_client/monero_cmd.py @@ -27,6 +27,7 @@ from .utils.varint import encode_varint from .utils.utils import get_nano_review_instructions from pathlib import Path +from ragger.firmware import Firmware from ragger.navigator import NavInsID, NavIns PROTOCOL_VERSION: int = 3 @@ -223,13 +224,13 @@ def prefix_hash_init(self, backend, test_name, firmware, navigator, version: int encode_varint(timelock) ]) - if firmware.device == "nanos": + if firmware == Firmware.NANOS: instructions = get_nano_review_instructions(1) - elif firmware.device.startswith("nano"): + elif firmware.is_nano: instructions = get_nano_review_instructions(1) else: instructions = [ - NavIns(NavInsID.SWIPE_CENTER_TO_LEFT) + NavInsID.SWIPE_CENTER_TO_LEFT ] with self.device.send_async(cla=PROTOCOL_VERSION, ins=ins, @@ -386,13 +387,13 @@ def validate_prehash_init(self, # txntype is skipped in the app payload: bytes = struct.pack("B", txntype) + encode_varint(txnfee) - if firmware.device == "nanos": + if firmware == Firmware.NANOS: instructions = get_nano_review_instructions(1) - elif firmware.device.startswith("nano"): + elif firmware.is_nano: instructions = get_nano_review_instructions(1) else: instructions = [ - NavIns(NavInsID.USE_CASE_REVIEW_TAP) + NavInsID.USE_CASE_REVIEW_TAP ] with self.device.send_async(cla=PROTOCOL_VERSION, @@ -402,7 +403,7 @@ def validate_prehash_init(self, option=0, payload=payload): - if firmware.device.startswith("nano"): + if firmware.is_nano: navigator.navigate_and_compare(TESTS_ROOT_DIR, test_name + "_prehash_init", instructions) @@ -450,12 +451,12 @@ def validate_prehash_update(self, blinded_amount )) - if firmware.device == "nanos": + if firmware == Firmware.NANOS: if is_last: instructions = get_nano_review_instructions(1) else: instructions = get_nano_review_instructions(7) - elif firmware.device.startswith("nano"): + elif firmware.is_nano: if is_last: instructions = get_nano_review_instructions(1) else: @@ -463,15 +464,14 @@ def validate_prehash_update(self, else: if is_last: instructions = [ -# NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), - NavIns(NavInsID.USE_CASE_REVIEW_TAP), - NavIns(NavInsID.USE_CASE_REVIEW_CONFIRM) + NavInsID.USE_CASE_REVIEW_TAP, + NavInsID.USE_CASE_REVIEW_CONFIRM ] else: instructions = [ - NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), - NavIns(NavInsID.SWIPE_CENTER_TO_LEFT), + NavInsID.SWIPE_CENTER_TO_LEFT, + NavInsID.SWIPE_CENTER_TO_LEFT, ] backend.wait_for_text_on_screen("Processing")