- Always require anti-klepto on the BitBox02, raising the minimum firmware version to 9.4.0, and warn on a taproot signing issue with older firmware
- Add a BitBox02 attestation failed dialog, reporting an unattestable version or a short attestation response as a failed check
- Register the wallet policy again and retry when the Ledger rejects a stored registration, and check HID read and write results in the Ledger transport
- Serialise USB device access so the periodic enumeration cannot interrupt an operation in progress, and isolate a misbehaving device from the rest of the enumeration
- Reject truncated and oversized TLV lengths when parsing keycard responses, and fail rather than loop indefinitely on an unsuccessful card wait or repeated secure channel resets
- Gate the display address, sign message and keystore discovery panes on a fingerprint resolved after in-app PIN entry
- Improve validation of BIP129, descriptor and Unchained wallet imports, and detect legacy multisig descriptors case insensitively when warning about key sorting
- Confirm the imported quorum and cosigners before completing an incomplete multisig wallet
- Improve max cosigner handling in the Settings tab, reducing the maximum to 15 for legacy P2SH multisig wallets
- Confirm the passphrase in the wallet-level and terminal seed imports, and clarify that the SLIP39 import passphrase applies to all shares and not individual ones
- Warn before creating a keystore from a scanned seed with an invalid checksum
- Name the conflicting keystore when an entered extended key is not unique, and ensure imported keystore labels are truncated and unique
- Reject extended private keys when creating a terminal watch only wallet, and show import errors
- Check and reprompt for the BIP38 passphrase rather than clearing the encrypted key
- Improve validation of legacy multipart QR part numbers, and catch any parse failure when opening pasted or server-fetched transactions
- Fall back to the next usable camera instead of failing the QR scan on one reporting no resolutions
- Improve randomization for UTXO selection, input and output shuffling, and anti-fee-sniping
- Clear silent payment, DNSSEC proof and taproot keypath fields from public PSBT copies used in payjoins
- Improve validation of payjoin proposals, accepting a substituted payment output where a change output is present
- Scope payjoin endpoints to the payment tab and transaction instead of the destination address, and disable payjoin on transactions with silent payment outputs
- Disable transaction version and locktime editing once signed
- Skip malformed silent payment tweak values rather than aborting the scan batch
- Show the resource an auth47 challenge is signed for
- Always check and restrict existing wallets and backup directories to owner only permissions
- Retain the existing wallet encryption when a password change is cancelled, and release the reference to the derived encryption key when clearing a loaded wallet
- Compare the ECIES MAC in constant time
- Redact the Bitcoin Core credentials from the BWT debug log, and secret-bearing messages and CPace pairing values from Trezor debug logs
- Support additional Electrum server RPC methods with configurable batch paging, and document the server RPC method contracts
- Bound the Electrum read timeout across the wait for a response, not just acquiring the read lock, and bound the Bitcoin Core RPC connect and read timeouts, exempting the methods that rescan synchronously
- Range check the server supplied minimum relay fee
- Verify that fetched transactions match the requested txid
- Maintain a verified block header store anchored at pinned per-network checkpoints, refreshing affected wallets on a reorg
- Verify merkle inclusion proofs for newly confirmed transactions, leaving them unconfirmed where they cannot be proved
- Verify proof of work on chain tips and warn when a tip goes stale
- Warn when a Bitcoin Core node is neither local nor onion, and report failed Bitcoin Core descriptor imports instead of only logging them
- Close remaining local DNS resolution gaps when classifying hostnames and connecting via Tor
- Resolve BIP353 HRNs over TCP via the SOCKS proxy when one is configured, reusing the connection between queries
- Eliminate DNS payment resolution races by matching the currently entered recipient
- Disable the proxy setting when a blank proxy server is configured
- Only save certificates passing hostname verification as CA validated, and retain not yet valid certificates
- Verify the version check signature before assigning the current version used in the download verifier
- Report an oversized download manifest instead of verifying the signature alone, and ignore the results of superseded download verifications
- Pin the Gradle distribution checksum in the wrapper properties
- Fix the skipInstallers property being ignored and document its use
- Upgrade hummingbird to v1.7.5
- Bug fix: Fix wallets sharing a filename prefix having their backups deleted, or being re-encrypted on a password change
- Bug fix: Fix preserving leading zero bytes when decoding SLIP39 share values
- Bug fix: Fix handling an absent final scriptSig or witness when restoring the original payjoin inputs
- Bug fix: Fix storage left open when testing schema validation (@nzb-tuxxx)
- Bug fix: Fix detecting notification transactions where an OP_RETURN output has no push data
- Bug fix: Fix compressed key encoding round trips and verify the BIP38 address hash