Releases: timme0126/MEGA-entropy
Release list
MEGA Beta v0.1.10
MEGA v0.1.10 security hardening release.
Highlights:
- Strict Bitcoin amount bounds and overflow-safe fee calculations
- Strict PSBT witness_utxo and sighash field parsing
- Truncated BBQr compressed streams rejected
- Partial signatures cryptographically verified before finalization
- Review prediction now matches actual finalization behavior
APK SHA-256:
3526b0324d4791a7640648382e6820494624db8c2a007a3a2af209726cab4081
Release APK is non-debuggable and passed signer and permission verification.
MEGA Beta v0.1.9
Changelog
Notable changes to MEGA, most recent first. The current beta build
is v0.1.9 (see README.md) —
the changes below are included in this tagged release.
[0.1.9] — 2026-08-13
Driven by real multisig testing against Sparrow Wallet.
Fixed
- BBQr export rejected by Sparrow ("Invalid input length 150"): the
BBQr spec requires every individual QR frame's Base32 chunk — not just
the full reassembled payload — to independently decode to a whole
number of bytes. MEGA's animated-QR export chunked at a fixed
150-character part size (150 mod 8 = 6, not a valid "complete bytes"
length), which round-tripped fine through MEGA's own decoder (which
used to concatenate every frame's text before decoding, masking the
problem) but was rejected outright by Sparrow's stricter, spec-
compliant per-frame decoding.encodeBbqr's default part size is now
152 (a multiple of 8) and it rejects any non-multiple-of-8 size by
construction; the decoder side now also decodes each frame
independently before concatenating, matching the spec and catching a
malformed chunk immediately instead of only after full reassembly.
Verified against an independently-written reference Base32 decoder
applying Sparrow's exact strict validation rule, not just MEGA's own.
Added
- Transaction review before signing: every PSBT-signing flow (single-
seed and saved-vault) now shows a full review screen — network, input/
output counts and amounts, destination addresses, change-output
identification, total input/output amounts, fee and estimated fee
rate, existing-signature count, required threshold, whether this
device can sign, and whether signing will finalize the transaction —
with an explicit "Confirm and Sign" action required before anything is
signed. Scanning a PSBT no longer signs it immediately; Cancel or Back
at any point discards the scanned PSBT without signing. Any value that
can't be reliably determined is shown as "Unknown" rather than
guessed. NewcomputePsbtSummary(entropy-core) never derives or
touches a private key — only compares an already-known fingerprint
string against fingerprints already embedded in the PSBT. - Sign PSBT for a saved multisig vault: a saved vault's detail screen
now has a "Sign PSBT" action. Since a saved vault stores only public
cosigner data (fingerprint/path/xpub — never a link to a local seed),
the flow makes the user pick which cosigner slot this device
represents, pick a candidate saved session, and verifies — fail
closed — that the session's own BIP32 master fingerprint actually
matches the claimed cosigner's stored fingerprint before ever
reaching the PSBT scanner (entropy-core's newsignPsbtForCosigner
re-checks the same fingerprint again immediately before signing, as
defense in depth). A mismatch that actually belongs to a different
cosigner in the same vault is called out by name rather than shown as
a generic failure. Reuses the existing PSBT scanner and sign-result
screens unchanged. - Sign PSBT: Advanced Mode can now sign a PSBT (Partially Signed
Bitcoin Transaction) with the loaded seed. Scan a PSBT as a single
base64 QR or an animated BBQr series, and MEGA signs every input it
holds a key for (BIP174 parsing, RFC6979-deterministic ECDSA, BIP143
segwit sighash, PSBT finalization — all inentropy-core). A fully
signed transaction is shown as hex plus a broadcast-ready animated QR;
a still-partially-signed multisig PSBT is re-exported the same way to
hand off to the next cosigner. - BBQr animated QR support: the multisig scanner now decodes BBQr —
theB$<encoding><type><total><index>header Sparrow (and other
Bitcoin tools) use to spread a larger export, such as a full multisig
descriptor, across a series of QR codes. Hand-implemented Base32
(RFC4648) and raw-Zlib-inflate (wbits=10) decoding in
entropy-core/.../Bbqr.kt, verified against real vectors generated
with Python's own zlib/base64. The scanner accumulates parts with a
"Scanned X of Y" progress indicator until the full set is read. - SeedQR import resumed: "Import via SeedQR" (Standard and Compact,
SeedSigner's format, also read by Sparrow) is back in Advanced Mode —
shelved on 2026-08-10 after its original scan screen failed to decode
reliably and crashed on the back button. Rebuilt on the same camera
plumbing since proven out by the multisig scanner, rather than
debugging the original separate implementation. - BIP-380 descriptor checksums: MEGA's own generated descriptors now
carry a correct trailing#CHECKSUM(buildMultisigWallet), so they
round-trip cleanly into Sparrow, Bitcoin Core, and other BIP-380 tools.
The checksum algorithm is a direct port of Bitcoin Core's own,
verified byte-for-byte against its reference test vectors. - Descriptor-import confirmation dialog: scanning or pasting a full
descriptor that would overwrite cosigner slots you've already filled
now stages the import behind an explicit confirm/cancel step, instead
of silently replacing a (possibly already-verified) cosigner set. - Per-field cosigner editing: every filled cosigner slot has three
independent pencil icons — label, master fingerprint, and derivation
path — each correctable after the fact without re-entering the whole
cosigner. - Home button on the finished-vault screen, shown only once the
vault has actually been saved, jumping straight back to Advanced Mode
instead of stepping back through Slots/Policy one screen at a time. - Local/USB PDF save for a multisig vault, hinting
Intent.EXTRA_LOCAL_ONLYto steer the system picker away from
cloud-storage destinations.
Changed
- "Complete Cosigner Info" (completing a bare xpub scanned or pasted
without its own[fingerprint/path]origin) no longer asks for an
account index or custom derivation path up front — the exporting
wallet already fixed that when it produced the key, so re-typing it
was friction for the common case. The cosigner completes at the
vault's standard account-0 BIP48 path; a genuinely non-default path
is set afterward via its own pencil icon. - That same dialog now requires a label instead of auto-generating
one from the fingerprint and path — the auto-generated label used to
go stale the moment either value was corrected afterward. - A bare-xpub cosigner's master fingerprint is no longer required up
front either — it defaults to the00000000unknown-origin
placeholder (the same convention Sparrow uses when it doesn't know
the real one), editable later via pencil. Confirmed via research that
an all-zero fingerprint doesn't affect a descriptor's spendability or
recoverability, only automatic signer-matching convenience. parseMultisigDescriptornow accepts (and verifies) an optional
trailing BIP-380 checksum instead of rejecting any descriptor that has
one — Sparrow includes one by default on export.
Fixed
- Saved-session auto-lock: completing PIN setup or "Change PIN" could
leave the unlock timestamp unset, causing an immediate spurious
re-lock right after setting/changing a PIN. Lock-timing logic was
extracted into pure, unit-tested functions
(SavedSessionLockDecisions.kt) as part of the fix. - Multisig descriptor/fragment parsing now rejects pathologically long
input (over 8000 characters) before running any regex against it.
MEGA Beta v0.1.8
MEGA beta v0.1.8 focuses on Advanced Mode multisig workflows, QR scanning, saved vaults, and security hardening. This is still experimental beta software for disposable test roll sequences only; do not use it to protect meaningful funds.
APKs
Primary APK for fresh installs:
mega-beta-v0.1.8.apk- SHA-256:
39f2339e466298a056dd978f3304bbbb9180f059eee0fd620c417b24b5538d16 - Release-type, non-debuggable APK signed with the MEGA beta release key.
Debug-compatible APK for existing testers:
mega-beta-v0.1.8-debug-compat.apk- SHA-256:
e302302a73175af9ec724b10d460d8d2363514b3825e8c3b23c0aa2e523e823c - Use this only if Android refuses to update an older debug-signed MEGA test install with
App not installed. Fresh installs should use the primary APK.
Highlights
- Advanced Mode now has Multi-Signature Vaults with M-of-N setup, saved-session cosigner derivation, paste import, QR scan import, saved vault list/detail, descriptor QR, first receive address, and PDF export.
- Bare xpub/tpub imports now offer a helper to complete missing cosigner origin info instead of failing with a raw parser error.
- PIN reuse across Saved Sessions and Advanced Mode saved-session import now respects the configured timeout window.
- Added release-signing verification, app-layer unit tests, QR hardening, clipboard/passphrase/input hardening, and duress/session-delete improvements.
- README and beta-testing docs now explain the primary APK, debug-compatible APK, multisig test path, and release signing model.
Verification run before release
./gradlew :app:testDebugUnitTest./gradlew test lint securityAudit assembleDebug./gradlew assembleRelease verifyReleaseArtifact
verifyReleaseArtifact passed: the release APK is non-debuggable, signed by the expected beta signer, and declares no forbidden network/storage permissions. CAMERA is present only for local QR scanning.
MEGA Beta v0.1.6
MEGA Beta v0.1.6
Highlights:
- Advanced Mode can now import a saved session or manually enter 12/24 BIP39 words, add a passphrase for the current derivation, and derive BIP85 child mnemonics.
- Wallet public-key verification tools now derive BIP44/BIP49/BIP84 account xpub/ypub/zpub values and the first receive address.
- Optional WIF export is available only behind a separate off-by-default setting plus a per-use confirmation. This refreshed APK also adds a WIF QR code for sweep workflows after the private key is explicitly generated. Treat this as test-only beta functionality.
- Saved-session dice-roll editing now uses a lock/unlock affordance and recalculates saved mnemonic state safely.
- Screenshots and seed-word copy remain off by default; README, Privacy, and mini-site text reflect the opt-in settings accurately.
Verification:
- ./gradlew check
- ./gradlew assembleDebug
- SHA-256: f5db5a1ebf968a88cc891be0e570e3ac5290be63d7e62339246fb6540dd529b9
Experimental beta. Use disposable test data only; do not protect meaningful funds with this build.
MEGA Beta v0.1.5
Experimental beta. Use disposable test seeds only. Not independently audited.
APK SHA-256:
01186366f7ce25f3977d3cb82109c1ecb164c771c3ccadb180689825090982d2
What's new
- Added Advanced Mode import from Saved Sessions behind the same saved-session PIN gate.
- Added BIP39 autocomplete suggestions for Advanced Mode manual mnemonic entry.
- Manual mnemonic validation now accepts unambiguous BIP39 prefixes and resolves them to full words.
- Added saved-session wallet-account key derivation entry points when Advanced Mode is enabled.
- Added no-passphrase and verified-passphrase wallet key paths from saved sessions.
- Fixed BIP85 derivation so prefix-resolved parent words are expanded before deriving the BIP39 seed.
- Added regression tests for prefix-based manual mnemonic entry and BIP85 parent prefix resolution.
Review notes
- Import from Saved Sessions imports seed words only; passphrases are not imported because MEGA does not store the passphrase itself.
- The saved-session import path reuses the same PIN gate as Saved Sessions.
- Security checks still confirm no INTERNET/storage permissions and backup exclusion.
Verification run before release:
./gradlew :entropy-core:test./gradlew check./gradlew assembleDebug
MEGA Beta v0.1.4
Experimental beta. Use disposable test seeds only. Not independently audited.
APK SHA-256:
f8a0aecb5364911fe1d26fe787eb6d1f30948f7390178bbc66d31c3259ccf816
v0.1.2 - saved-session security and UX
- Added opt-in screenshot support, default off.
- Added opt-in seed/BIP85 copy support, default off.
- Replaced seed copy buttons with small copy icons.
- Added dice-roll lock/unlock control for saved-session edit review.
- Fixed BIP85 back navigation from saved sessions.
- Added passphrase-aware BIP85 access from saved sessions after passphrase verification.
v0.1.3 - Advanced Mode beta
- Added Advanced Mode setting, default off, with explicit warning.
- Added manual 12/24-word BIP39 entry with checksum validation.
- Added BIP85 derivation from manually entered seeds plus optional passphrase.
- Added account-level xpub/ypub/zpub derivation.
- Added first receive address display for BIP44/BIP49/BIP84 checks.
- Added QR rendering for public extended keys only.
v0.1.4 - security and vector hardening
- Added BIP85 passphrase regression vector for 24-word parent and 24-word child at index 0.
- Tightened BIP85 parent validation to require checksum-valid BIP39 mnemonics.
- Clarified no-passphrase vs verified-passphrase BIP85 paths in saved sessions.
- Removed full xpub/ypub/zpub strings from QR image accessibility descriptions.
- Bumped Android version to 0.1.4 / versionCode 5.
Verification run before release:
./gradlew :entropy-core:test./gradlew check./gradlew assembleDebug
MEGA Beta v0.1.1
Beta v0.1.1 expands saved-session security and recovery tooling after the initial v0.1.0 beta.
Highlights since v0.1.0:
- BIP85 child mnemonic derivation for 12 or 24 English BIP39 words by index.
- BIP85 access from saved sessions.
- Saved-session settings screen with auto-lock timeout, PIN layout choice, secure delete, and duress PIN.
- Duress PIN securely deletes all saved MEGA session data when entered at a PIN prompt.
- Screenshot protection on saved sessions, mnemonics, PIN, passphrase, and BIP85 screens.
- Saved-session lock now re-prompts for PIN after timeout instead of returning to Home.
- Saved Sessions only asks for PIN when saved sessions exist.
- Dice-only saved sessions can calculate seed words later, save those words, use passphrase checks, and use BIP85.
- Saved dice rolls can be edited one 5-roll batch at a time, with warnings and validation.
- Home power button with confirmation.
- Version shown on Home.
- Light/dark logo fixes.
APK SHA-256:
46600cf00dbb1a2423add224c9213f6caa9b245fbc14b417711db3869f5b15fe mega-beta-v0.1.1.apk
Still beta software. Use disposable test seeds only.
MEGA Beta v0.1.0
MEGA beta v0.1.0 APK for early testing.
Asset: mega-beta-v0.1.0.apk
SHA-256: 9d50ae9b4a99ae57ff56ec18ca67f10e8f08d9b7e4a910d33f4cfdc5b01aadfe
Status: experimental beta, not independently audited. Do not use this build to protect meaningful funds. Use disposable test roll sequences only.