Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,62 @@ All notable changes to Latch are documented in this file.
- Sub-48px tap targets replaced with `IconButton`
- `main.dart` update-check `StreamSubscription` stored + cancelled in `dispose()`

## 0.15.0-beta.1

### Password Vault & Autofill
- **Password vault** — store, edit, and organize credentials inside the encrypted vault
- **Password editor** with generator for strong random passwords
- **Password list** with search, domain filtering, and multi-select
- **Android Autofill service** — seamlessly fill credentials in other apps and browsers
- Autofill credential toggle with security warning dialog
- **Autofill support** on PIN and password unlock inputs
- **Clipboard auto-clear** after pasting passwords
- Password index included in vault backups

### Crypto Overhaul
- **AEAD key-wrapping** for vault master key (AES-256-GCM wrapping)
- **Argon2id** key derivation alongside PBKDF2
- `HeaderCodec` for encrypted file format detection
- Stateless **AES-256-GCM** and **AES-256-CTR** cipher primitives
- **Key wrapping and biometric unlock** for master keys
- Encryption key **re-wrapping** after password/PIN change
- Constant-time string comparison for cryptographic operations
- **PBKDF2 iterations increased to 600,000** (from 100,000)
- Default encryption algorithm set to **AES-256-GCM**

### Update System Rework
- **GitHub-based updates** via `url_launcher` (supports non-Play Store installs)
- Install source detection — Play Store vs sideload vs GitHub
- Pre-release version ordering with `pub_semver`

### Testing & Infrastructure
- **CI workflow** for versionF branch
- Comprehensive unit tests for AES-256-GCM, CTR, crypto hygiene, password strength
- PBKDF2 isolate test suite
- Argon2id KWK derivation and AES-256-GCM key wrapping tests

### UI Polish
- Tooltips on song player, media viewer, and password editor buttons
- SnackBar margin, shape, and elevation styling
- Search and sort actions moved to overflow menu
- GestureDetector replaced with IconButton for better accessibility
- `forceReload` parameter on vault cache loaders

### Security Hardening
- App backup disabled
- Network security config for cleartext traffic policy
- ProGuard minification enabled for release builds
- ProGuard rules for Flutter, crypto, and autofill service

### Cleanup
- Removed Firebase dependencies from Android Gradle config
- Removed deprecated compression services and widgets
- Removed redundant file existence checks across the codebase
- Removed unused UI components, imports, and platform stubs
- Replaced `cupertino_icons` and `encrypt` with `device_info_plus`

---

## 0.14.4-beta.4

### Notes System
Expand Down
71 changes: 71 additions & 0 deletions lib/services/whats_new_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,77 @@ class WhatsNewService {
/// The key MUST match `PackageInfo.version` exactly (the `+buildNumber`
/// suffix is ignored).
static const Map<String, List<WhatsNewSection>> _builtIn = {
'0.15.0-beta.1': [
WhatsNewSection(
title: 'Password Vault & Autofill',
items: [
WhatsNewItem(
icon: Icons.lock_outlined,
title: 'Password vault',
description:
'Store, edit, and organise credentials inside the encrypted vault with a built-in strong password generator.',
),
WhatsNewItem(
icon: Icons.auto_awesome_outlined,
title: 'Android Autofill',
description:
'Seamlessly fill credentials in other apps and browsers — Latch now integrates with the Android Autofill framework.',
),
WhatsNewItem(
icon: Icons.info_outlined,
title: 'Clipboard auto-clear',
description:
'Copied passwords are automatically cleared from the clipboard after use.',
),
],
),
WhatsNewSection(
title: 'Crypto Overhaul',
items: [
WhatsNewItem(
icon: Icons.shield_outlined,
title: 'Argon2id + key wrapping',
description:
'AEAD key-wrapping protects the vault master key. Argon2id joins PBKDF2 for memory-hard key derivation.',
),
WhatsNewItem(
icon: Icons.key_outlined,
title: '600,000 PBKDF2 iterations',
description:
'Default iterations raised 6× — from 100k to 600k — for stronger resistance against brute-force attacks.',
),
WhatsNewItem(
icon: Icons.new_releases_outlined,
title: 'Auto re-wrap on PIN change',
description:
'The encryption key is automatically re-wrapped when you change your password or PIN.',
),
],
),
WhatsNewSection(
title: 'Updates & Stability',
items: [
WhatsNewItem(
icon: Icons.system_update_outlined,
title: 'GitHub update support',
description:
'Update checks now detect your install source — Play Store, sideload, or GitHub — and route you accordingly.',
),
WhatsNewItem(
icon: Icons.bug_report_outlined,
title: 'Comprehensive test suite',
description:
'New unit tests cover every crypto path: AES-256-GCM, CTR, PBKDF2, Argon2id, and key wrapping.',
),
WhatsNewItem(
icon: Icons.build_outlined,
title: 'CI workflow active',
description:
'Automated builds and tests now run on every push to the versionF branch.',
),
],
),
],
'0.14.4-beta.4': [
WhatsNewSection(
title: 'Notes',
Expand Down
60 changes: 35 additions & 25 deletions whats_new.json
Original file line number Diff line number Diff line change
@@ -1,52 +1,62 @@
{
"0.14.4-beta.5": [
"0.15.0-beta.1": [
{
"title": "Security Hardening",
"title": "Password Vault & Autofill",
"items": [
{
"icon": "lock_outline",
"title": "Argon2id key wrapping",
"description": "Your PIN or password now derives a key-wrapping key with Argon2id that encrypts the vault master key — the credential actually protects the vault, not just the lock screen."
"icon": "lock_outlined",
"title": "Password vault",
"description": "Store, edit, and organise credentials inside the encrypted vault with a built-in strong password generator."
},
{
"icon": "speed",
"title": "Stronger key derivation",
"description": "Default PBKDF2 iterations raised to 600,000 and AES-256-GCM is now the default cipher for new media."
"icon": "auto_awesome_outlined",
"title": "Android Autofill",
"description": "Seamlessly fill credentials in other apps and browsers — Latch now integrates with the Android Autofill framework."
},
{
"icon": "verified_user_outlined",
"title": "Hardened credential checks",
"description": "Constant-time comparison for all credential and decoy verification, 6-digit minimum decoy PIN, and plaintext wiped from temp files after re-encryption."
"icon": "info_outlined",
"title": "Clipboard auto-clear",
"description": "Copied passwords are automatically cleared from the clipboard after use."
}
]
},
{
"title": "Password Vault",
"title": "Crypto Overhaul",
"items": [
{
"icon": "password_outlined",
"title": "Passwords in the gallery",
"description": "Open and create password entries directly from the gallery screen's quick actions."
"icon": "shield_outlined",
"title": "Argon2id + key wrapping",
"description": "AEAD key-wrapping protects the vault master key. Argon2id joins PBKDF2 for memory-hard key derivation."
},
{
"icon": "key_outlined",
"title": "600,000 PBKDF2 iterations",
"description": "Default iterations raised 6× — from 100k to 600k — for stronger resistance against brute-force attacks."
},
{
"icon": "new_releases_outlined",
"title": "Auto re-wrap on PIN change",
"description": "The encryption key is automatically re-wrapped when you change your password or PIN."
}
]
},
{
"title": "Under the Hood",
"title": "Updates & Stability",
"items": [
{
"icon": "architecture_outlined",
"title": "Crypto modules split",
"description": "Encryption internals split into independently tested GCM, CTR, key-derivation, header, and key-wrap modules — 33 new round-trip and auth-failure tests."
"icon": "system_update_outlined",
"title": "GitHub update support",
"description": "Update checks now detect your install source — Play Store, sideload, or GitHub — and route you accordingly."
},
{
"icon": "cleaning_services_outlined",
"title": "Dead code purge",
"description": "Removed unused widgets, a dead asset, vestigial Firebase wiring, and stale platform stubs for a leaner build."
"icon": "bug_report_outlined",
"title": "Comprehensive test suite",
"description": "New unit tests cover every crypto path: AES-256-GCM, CTR, PBKDF2, Argon2id, and key wrapping."
},
{
"icon": "science_outlined",
"title": "CI + ProGuard",
"description": "GitHub Actions CI runs analyze and tests on every push; release builds now ship obfuscated with ProGuard rules for crypto and autofill."
"icon": "build_outlined",
"title": "CI workflow active",
"description": "Automated builds and tests now run on every push to the versionF branch."
}
]
}
Expand Down
Loading