Releases: norsehorse-dev/AgePonyAndroid
Release list
AgePony 4.0.1
AgePony 4.0.1 fixes crashes and rough edges from 4.0.0.
- Fixes a lock-screen crash after reinstalling or restoring the app from a backup; the vault now resets cleanly instead of failing to open.
- The vault no longer locks the instant you switch apps. A quick trip to another app keeps your place and any half-entered recipient.
- The keyboard now opens on its own when a password or PIN is needed.
AgePony 4.0.0
AgePony 4.0.0 makes signing fully usable, and adds a duress password.
- Sign and verify files from a new Sign tab, using SSH Ed25519 or RSA keys, a hardware key, or a security key over NFC.
- Keep a list of trusted signers; import and export OpenSSH allowed_signers.
- Sign-then-encrypt now works with hardware keys too.
- Unlock with a password or PIN, with or without biometrics.
- Optional duress password that silently wipes the vault when entered.
AgePony v3.2.0
Encrypting more than one file stops being a chore.
Everything in the encrypt flow used to reset itself: armor went back on, passphrase mode went back off, recipients were forgotten, and finishing a file dropped you at an empty form. Encrypting ten files meant setting the same three things ten times. This release makes the encrypt screen one window that remembers what you told it.
Reported by @Umotas in #2, who listed five specific things that were slower than they needed to be. All five are fixed.
Fixed
- "Armor as text" is remembered, between files and between launches, with a switch in Settings → Encryption.
- Passphrase (scrypt) only is remembered the same way, with its own Settings switch.
- A passphrase is entered once per session. It is held until the vault locks, so a run of files asks once rather than once each. Memory only — never written to disk, never in the encrypted vault snapshot, and dropped by the same code path that drops the vault key, which runs whenever the app is backgrounded. "Forget passphrase" is on the encrypt screen and in Settings.
- Recipients are chosen inline. The picker opens in place instead of replacing the screen, so the whole setup is one window and confirming no longer bounces you to the top of the form.
- Finishing an encrypt keeps every setting. "Encrypt more files" holds recipients, passphrase, signing key and armor and goes straight to the file picker. "Clear recipients & passphrase" is there when you do want a fresh start.
- Add Recipient no longer pre-fills the name with the key. The field used to start out holding a truncated key, which read as a read-only display rather than an editable name, so recipients got saved as
age1pqdu27d…d8swW. It now starts empty with the key shown above it, and saving unnamed asks first.
Deliberate limits
- The Text tab does not inherit a file passphrase. Convenience should not quietly carry a passphrase between contexts.
- The encrypt button is disabled while the picker is open. Encrypting with unconfirmed edits on screen would have used the last confirmed choice — silently sending a file to the previous recipient.
- Signing-only identities are never preselected. Hardware and security-key identities can be active but cannot receive a file.
Compatibility
No format change, and no change to agepony-core at all — the age implementation, every recipient type and the streaming payload cipher are untouched. Files written by 3.2.0 are ordinary age files, and files from earlier AgePony versions or the age CLI open unchanged.
No change to the vault format either: the new settings are app preferences, not vault contents, so upgrading in place keeps every identity, recipient and note.
No new dependencies. The unsigned foss release APK builds byte-identically from two independent clean clones.
Build fix
buildTypes.release assigned the release signing config unconditionally while only populating it when keystore.properties existed, so any tree without the keystore failed in packageRelease with SigningConfig "release" is missing required property "storeFile". The assignment now sits inside the same guard, and those builds produce an unsigned APK. Present in 3.0.2 and 3.1.0 as well — not a 3.2.0 regression.
Download
AgePony-3.2.0-foss.apk — the F-Droid flavor, no Google dependencies.
SHA-256: 86fbec00cb506b06fe89dd9d3c5a04b4319cb7566ec069af9aa5d191fb0187ae
This build is signed with the AgePony release key. The Google Play build is re-signed by Play App Signing and an eventual F-Droid build is signed by F-Droid, so the three are not interchangeable — switching between them needs an uninstall.
AgePony 3.0.2
AgePony 3.0.2
Post-quantum encryption arrives in AgePony. This release adds quantum-safe hybrid keys, fuses encryption and signing into one action, and ships a migration tool to bring your existing files forward. It is also the first fully open-source, reproducible build ready for F-Droid. Everything still runs entirely on your device.
Highlights
Post-quantum hybrid encryption
AgePony can now generate and use quantum-safe recipients built on the standardized ML-KEM-768 + X25519 hybrid (X-Wing). Files encrypted to a quantum-safe recipient stay protected against "harvest now, decrypt later" attacks, while remaining fully interoperable with the age command-line tool (v1.3.0 and later).
New key type generated in the vault alongside classic X25519 keys.
Quantum-safe recipients use the age1pq... prefix; identities use AGE-SECRET-KEY-PQ-....
Uses the mlkem768x25519 stanza per the C2SP age specification.
Clear "Quantum-safe" badges and algorithm labels throughout the UI, so you always know the protection in use.
A no-mixing rule keeps quantum-safe and classic recipients from being combined by accident on a single file.
Encrypt and sign in one action
Encryption and SSH signing are now a single step. AgePony signs your plaintext, bundles the payload with its signature, and encrypts the bundle, so the signer's identity stays hidden inside the ciphertext. On the way back, decryption verifies the signature and shows you the trust result before revealing the file.
Sign with an SSH Ed25519 key using the SSHSIG standard.
New SSH Ed25519 key generation added to the key menu.
Single encrypted output file; no separate detached signature to manage.
Upgrade to quantum-safe migration tool
A built-in migration tool re-encrypts your existing files to a new quantum-safe identity in batches. Your originals are kept until each new copy is verified, so nothing is lost in the process.
Batch re-encrypt files and notes to a chosen quantum-safe identity.
Optional shared passphrase for the re-encrypted set.
Results are marked quantum-safe once complete.
Fixes
Decryption output no longer keeps a trailing .age extension. Files like report.pdf.age now decrypt to report.pdf, and chained extensions are handled correctly.
F-Droid and open-source build
This release ships a foss product flavor with no Google dependencies, so AgePony builds fully open-source for F-Droid. The proprietary Google Play In-App Review library is scoped to the play flavor only, the APK drops the Google dependency-metadata block (dependenciesInfo.includeInApk = false), and the build is reproducible: it pulls no JDK toolchains over the network and embeds no build-machine VCS metadata, so it verifies byte-for-byte against F-Droid's clean-room build.
Compatibility
Files encrypted to quantum-safe recipients require an age implementation with post-quantum support (age v1.3.0+ on desktop, or AgePony 3.0.2 or later).
Classic X25519 recipients, passphrase encryption, and SSH recipients are unchanged and fully backward compatible.
Android minSdk 26 (Android 8.0) and above.
Notes
Quantum-safe crypto was verified byte-for-byte against the filippo.io/hpke reference vectors.
All encryption, decryption, signing, and key generation happen locally on device. No accounts, no servers, no tracking.
Full changeset: fd49cb3 (tag v3.0.2)