# Security Notes

- This application can sign and broadcast real Bitcoin and Ethereum mainnet
  transactions. Start with disposable, low-value accounts.
- BTC and ETH use independent recovery phrases and Android Keystore encryption.
  Back up each phrase offline before funding it.
- `BIOMETRIC_STRONG` is mandatory at launch and for every connection approval,
  signature, send, export, or device proof. No PIN or device credential is a
  fallback.
- Recovery and import screens block screenshots. Android backup and device
  transfer extraction are disabled. Bundled WebViews cannot navigate to
  arbitrary pages.
- WalletConnect sessions expose only an allowlist. PSBT signing, raw transaction
  signing, `eth_sign`, and `eth_signTransaction` are not supported.
- Reown Verify `INVALID` and known-scam origins are blocked. `UNKNOWN` is not a
  trust decision; the user and companion must still validate the peer.
- Device validation uses a hardware-backed Android Keystore key where the
  device supports it. The returned certificate chain is evidence for a remote
  verifier, not proof by itself. Reject reused nonces, expired payloads,
  unexpected package names, signing certificates, origins, chains, or wallets.
- BTC recipient and USD 4.99 service outputs are atomic in one transaction.
- ETH recipient and USD 4.99 service transfers are sequential because native
  ETH cannot create two outputs atomically. The recipient transaction is sent
  first. An interrupted approved service transaction is retained and retried
  by hash; the recipient payment is not retried.
- Ethereum WalletConnect contract calls are capped at 2,000,000 gas, use chain
  ID 1, and ignore dapp-supplied nonce and gas values in favor of wallet quotes.
- Price data older than two minutes is rejected when calculating the fixed USD
  service fee.
- Bitcoin uses confirmed provider-indexed UTXOs, local native-SegWit signing,
  and an approved miner-fee cap. Ethereum uses local EIP-1559 signing and
  receipt-status verification.
- The Alchemy credential embedded in a distributed APK can be extracted. Apply
  provider restrictions, monitoring, rotation, and rate limits. A Reown project
  ID is a public client identifier, not a secret.
- Diamond handoffs accept bounded QR/Data Matrix capsules and HTTPS audio only.
  Redirects remain HTTPS, private/special-use destinations are rejected after
  DNS resolution, response size is capped, and only the selected track enters
  the app-private encrypted Tella vault. Vault playback has no public export
  route. Publisher authorization and media rights remain operational concerns.
- GTARAD and publisher URLs are network dependencies. A compromised authorized
  endpoint could still provide malicious or misleading content, so production
  deployment requires endpoint monitoring, pinning/allowlisting policy review,
  and media parser testing.

Independent Android, transaction-construction, dependency, WalletConnect,
attestation, NFC replay/relay, privacy, and operations audits are required
before material-value deployment. Physical testing must cover process death,
network interruption, chain reorganization, stale quotes, nonce/UTXO
contention, biometric changes, malicious Diamond codes, oversized or
malformed media, session expiry, and both successful and reverted contract
calls.
