Skip to content

Releases: timme0126/MEGA-entropy

MEGA Beta v0.1.10

Choose a tag to compare

@timme0126 timme0126 released this 13 Aug 20:06

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

Choose a tag to compare

@timme0126 timme0126 released this 13 Aug 15:25

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. New computePsbtSummary (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 new signPsbtForCosigner
    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 in entropy-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 —
    the B$<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_ONLY to 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 the 00000000 unknown-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.
  • parseMultisigDescriptor now 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

Choose a tag to compare

@timme0126 timme0126 released this 12 Aug 04:16

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

Choose a tag to compare

@timme0126 timme0126 released this 10 Aug 19:11

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

Choose a tag to compare

@timme0126 timme0126 released this 09 Aug 19:06

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

Choose a tag to compare

@timme0126 timme0126 released this 09 Aug 18:28

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

MEGA Beta v0.1.1 Pre-release
Pre-release

Choose a tag to compare

@timme0126 timme0126 released this 09 Aug 11:08

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 Pre-release
Pre-release

Choose a tag to compare

@timme0126 timme0126 released this 08 Aug 16:58

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.