You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Two correctness defects and four test-integrity ones.
eip712_stream: multidimensional arrays were validated against the WRONG
dimension. Solidity nests right-to-left -- in T[k][j] the outer array holds j
-- so int16[2][][4] parses to [2, 0, 4] while the first list a walker meets
holds 4. Levels are now consumed from the END. Single-dimension arrays are
unaffected (both ends coincide), which is why every existing test passed.
clearsign_abi: signed integers were encoded as unsigned. intN was rejected for
every negative value and ACCEPTED at or above 2^(N-1), which the EVM reads
back as negative -- calldata that does not mean what its declared type says.
Split the paths; intN is now range-checked to [-2^(N-1), 2^(N-1)-1] and
sign-extended.
test_msg_ethereum_thorchain_deposit: assertRaises((CallException, Exception))
accepts every failure, including a fixture that fails to build, so a security
gate could pass without the firmware ever refusing. Narrowed to CallException.
test_msg_solana_lut_attestation: two tests compared a degraded run against a
baseline without reloading the RAM-only signer that the preceding signing tore
down -- so they compared two identical baseline flows and would pass even if
bad signatures were accepted. The attested test above them already documents
this exact trap; the other two now reload too.
test_msg_thorchain_signtx: restores real verification. Both tests asserted only
r/s LENGTHS, which a wrong router, wrong calldata or wrong sighash would also
satisfy. They now reconstruct the legacy sighash and recover the signer,
comparing it to ethereum_get_address -- the pattern already proven in the
mayachain suite. Stronger than the frozen vectors this replaced, and it stays
correct across router changes. The superseded 7.14.2 vectors are kept as
comments.
test_msg_recoverydevice_cipher: gate raised to 7.15.1 to match its docstring.
.gitmodules: device-protocol tracks master again, not up/release-protocol.
NOT taken: forwarding a non-rune denom through thorchain_sign_tx. The firmware
this targets hardcodes "denom":"rune" in its sign-doc; only 7.15+ reads one.
nanopb SKIPS unknown fields, so forwarding it to older firmware would be
silently ignored and the device would sign a RUNE transfer while the host
believed otherwise. The refusal is fail-closed and stays, now with the reason
recorded at the guard.
0 commit comments