• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

tari-project / tari / 38240644255
77%

Build:
DEFAULT BRANCH: development
Ran 12 Oct 2026 12:36PM UTC
Jobs 1
Files 800
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

12 Oct 2026 11:07AM UTC coverage: 74.173% (-0.6%) from 74.81%
38240644255

push

github

web-flow
fix(ledger): sign device sender-offset keys only through the reviewed metadata instruction (#8104)

## Summary

A Ledger device's sender-offset keys could sign through
`GetRawSchnorrSignature` over a host-supplied 64-byte challenge, with
nothing on screen. Host side, `get_metadata_signature` took exactly that
route for change outputs, `wallet_output_builder` self-signing and the
no-recipient re-sign. So a compromised host could get metadata
signatures for outputs nobody was shown.

This PR makes `GetOneSidedMetadataSignature` the only way a
`OneSidedSenderOffset` key produces a metadata signature. The design
assumes the host lies, so the device signs only over data it builds
itself:
- **The script:** a stealth `PushPubKey` built from the receiver address
and the commitment mask.
- **The metadata hash:** `common` = H(version, features, covenant,
encrypted data, minimum value promise), hashed from raw fields.

A lie by the host therefore yields a signature that only verifies on an
output carrying exactly what the device saw.

### What changes

- **Device: raw Schnorr refusal.** `GetRawSchnorrSignature` refuses the
`OneSidedSenderOffset` branch with `BadBranchKey`, before the reserved
nonce is taken. The comms accessor and `sign_with_nonce_and_challenge`
mirror the refusal (`LedgerSenderOffsetRawSignature`). `PreMine` sender
offsets still sign raw; pre-mine step 3 needs it (see residuals).
- **Device: metadata hashed on the device.**
`GetOneSidedMetadataSignature` is now instruction `0x15`. `0x11` is
retired, so an old host's single APDU can't be misread as a chunk. The
request is split into chunks:
- **Chunk 0:** `account | network | sender_offset_key_index |
sender_offset_branch | value | commitment_mask | preimage_size(2) |
address_size(2) | address`.
- **Chunks 1 and on:** the consensus borsh preimage of `(version,
features, covenant, encrypted_data, minimum_value_promise)`, 250 bytes
per chunk, capped at 1280 bytes.

The device parses the whole prei... (continued)

967 of 1037 new or added lines in 14 files covered. (93.25%)

1297 existing lines in 30 files now uncovered.

123433 of 166413 relevant lines covered (74.17%)

1173719.05 hits per line

Uncovered Changes

Lines Coverage ∆ File
24
90.66
applications/minotari_ledger_wallet/common/src/metadata_output.rs
22
73.0
1.73% applications/minotari_ledger_wallet/comms/src/accessor_methods.rs
11
82.96
0.91% base_layer/transaction_components/src/key_manager/manager.rs
6
93.61
0.01% base_layer/transaction_components/src/transaction_builder/builder.rs
6
36.96
0.01% base_layer/wallet/src/transaction_service/service.rs
1
89.08
1.4% applications/minotari_ledger_wallet/common/src/utils.rs

Coverage Regressions

Lines Coverage ∆ File
716
58.31
-11.46% base_layer/core/src/chain_storage/blockchain_database.rs
266
33.85
-45.7% base_layer/core/src/base_node/rpc/query_service.rs
107
80.53
-15.78% base_layer/core/src/base_node/sync/header_sync/validator.rs
66
59.26
-1.34% base_layer/core/src/chain_storage/lmdb_db/lmdb_db.rs
39
72.12
-4.12% base_layer/core/src/base_node/sync/horizon_state_sync/synchronizer.rs
16
80.91
-1.97% base_layer/core/src/test_helpers/blockchain.rs
13
48.02
-6.44% base_layer/core/src/base_node/sync/rpc/service.rs
9
92.18
-1.9% comms/dht/src/outbound/broadcast.rs
8
72.9
-0.08% comms/core/src/connectivity/manager.rs
7
75.73
-6.8% base_layer/core/src/blocks/accumulated_data.rs
6
81.82
-9.09% base_layer/common_types/src/types/fixed_hash.rs
6
86.04
-2.7% comms/core/src/protocol/rpc/status.rs
5
64.79
-1.48% base_layer/core/src/chain_storage/db_transaction.rs
4
72.34
-0.15% base_layer/wallet/src/output_manager_service/storage/sqlite_db/mod.rs
3
98.98
-0.76% base_layer/core/src/consensus/base_node_consensus_manager.rs
3
50.67
-4.0% base_layer/core/src/validation/error.rs
3
67.98
-1.48% comms/core/src/connectivity/requester.rs
3
81.25
-4.69% comms/core/src/pipeline/outbound.rs
2
87.65
-0.2% base_layer/core/src/proof_of_work/cuckaroo_pow.rs
2
87.25
0.18% comms/core/src/connection_manager/peer_connection.rs
2
84.41
-0.3% comms/core/src/protocol/rpc/client/mod.rs
2
80.57
-0.11% comms/dht/src/connectivity/mod.rs
2
85.32
-0.46% comms/dht/src/network_discovery/rebootstrap.rs
1
59.04
-1.2% base_layer/core/src/chain_storage/block_add_result.rs
1
81.5
-0.16% base_layer/core/src/chain_storage/lmdb_db/lmdb.rs
1
82.86
2.02% base_layer/core/src/validation/helpers.rs
1
80.82
-1.37% base_layer/node_components/src/blocks/chain_block.rs
1
93.61
0.01% base_layer/transaction_components/src/transaction_builder/builder.rs
1
69.0
0.0% base_layer/wallet/src/transaction_service/storage/sqlite_db.rs
1
49.06
-0.94% comms/core/src/connectivity/selection.rs
Jobs
ID Job ID Ran Files Coverage
1 38240644255.1 12 Oct 2026 12:36PM UTC 800
74.17
GitHub Action Run
Source Files on build 38240644255
  • Tree
  • List 800
  • Changed 54
  • Source Changed 17
  • Coverage Changed 54
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #38240644255
  • 897835c7 on github
  • Prev Build on development (#37943560178)
  • Next Build on development (#38375892864)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc