peach-android

@june

A free, open source, local-first password manager for Android.

Kotlin

v2.17.43 · 814 saves · 50,983 lines · updated 3 weeks ago

350 files
4f8a9094ec9b
back to HEAD
app/4.7 MB · 3 months ago
drafts/221.1 KB · 4 months ago
C1/11.5 KB · 4 months ago
C7/17.6 KB · 4 months ago
MF1MF2/177.5 KB · 4 months ago
BROWSER-SPEC.mdExtracted from peach-browser source (read-only; never modified).26.8 KB · 4 months agoExportRoundTripTest.kt2.6 KB · 4 months agogen_peach_fixture.mjs1.9 KB · 4 months agoImportParsersTest.kt2.5 KB · 4 months agoImportScreen.kt───────────────────────────────────────────────────────────────────────────── ViewModel ─────────────────────────────────────────────────────────────────────────────26.0 KB · 4 months agomf1_kat_gen.mjsGenerates an MF-1 known-answer vector using the BROWSER's exact recovery algorithm (recovery-words.ts) against the REAL browser word list.4.1 KB · 4 months agoparse_android_export.mjs1011 B · 4 months agoPeachPayloadCodec.ktPeachScript binary payload (PCHS) — a byte-for-byte port of the browser's peachPayload.ts (MF-2).31.5 KB · 4 months agoPeachScript.ktPeachScript outer codec — maps each payload byte to one Private-Use-Area code point in U+E000..U+E0FF, and back.1.9 KB · 4 months agoPeachScriptExport.ktPeachScript export (MF-2) — writes the browser's PCHS binary payload (Argon2id + AES-256-GCM, zstd sections, BLAKE3 checksum, size-bucket padding, string-table entry packing) re-encoded into Private-Use-Area text.1.0 KB · 4 months agoPeachScriptImport.ktPeachScript import (MF-2) — parses the browser's PCHS binary payload back into full vault entries.2.2 KB · 4 months agoPeachScriptTest.kt9.9 KB · 4 months agoRecoveryEscrowTest.kt10.0 KB · 4 months agoRecoveryWords.kt6.0 KB · 4 months agoVaultCrypto.kt4.5 KB · 4 months agoVaultRepository.kt38.1 KB · 4 months agoVaultStore.ktOne encrypted slot at rest.7.5 KB · 4 months ago
B2-INTEGRATION.mdDraft implementation of spec B2 (lines 110–163).7.4 KB · 4 months agoC2-INTEGRATION.mdDraft implementation of spec C2 (lines 289–337).7.1 KB · 4 months ago
src/4.5 MB · 3 months ago
androidTest/3.5 KB · 3 months ago
debug/267 B · 3 months ago
res/267 B · 3 months ago
values/267 B · 3 months ago
main/4.1 MB · 3 months ago
java/1.4 MB · 3 months ago
com/1.4 MB · 3 months ago
peachpasswords/1.4 MB · 3 months ago
autofill/52.4 KB · 3 months ago
AssistStructureParser.ktThe autofillable fields discovered in one [AssistStructure], plus the origin (web domain for browsers, package name otherwise) used to rank vault entries.4.9 KB · 4 months agoAutofillEnablement.ktWhether Peach is actually the system's autofill service, and the one-time offer to make it so.2.1 KB · 3 months agoAutofillEntryPickerActivity.ktBranded bottom sheet shown when the user taps "Search Peach…"/"Unlock Peach" in the system autofill drop-down.22.7 KB · 3 months agoAutofillIntents.ktPendingIntents the autofill surfaces hand to the framework: a no-op attribution target the inline chip requires, the authentication IntentSender that opens the branded [AutofillEntryPickerActivity], and the "open new entry" launcher that the picker fires when the user taps the "+ Create new entry" affordance.3.8 KB · 3 months agoAutofillNavRepository.ktCarries a one-shot "open the new-entry editor" request from the autofill picker to the nav host.1.5 KB · 3 months agoAutofillNavViewModel.ktThin Compose-friendly wrapper around [AutofillNavRepository] so the NavHost can grab the singleton via hiltViewModel() without reaching for an EntryPoint accessor.499 B · 3 months agoAutofillResponseBuilder.ktTurns parsed form fields + vault entries into autofill [Dataset]s — the menu RemoteViews row, the inline keyboard chip, and the actual field values.5.5 KB · 4 months agoAutofillSave.kt3.0 KB · 4 months agoPeachAutofillService.ktSystem autofill provider.7.3 KB · 4 months agoTrustedBrowsers.ktConservative allowlist of apps permitted to request autofill for a web origin (MF-7).1.2 KB · 4 months ago
codex/37.5 KB · 3 months ago
di/847 B · 3 months ago
feedback/3.0 KB · 4 months ago
haptics/2.3 KB · 4 months ago
license/7.2 KB · 3 months ago
passkeys/33.8 KB · 4 months ago
qs/3.1 KB · 4 months ago
shared/4.3 KB · 4 months ago
sync/218.5 KB · 3 months ago
BatteryExemption.ktAsks once to be left out of Doze / App Standby.2.0 KB · 3 months agoChirpAdopt.ktVault adoption frame protocol — exact port of the browser shared/chirp-adopt.ts.11.4 KB · 3 months agoChirpIdentity.kt2.9 KB · 3 months agoChirpSyncCoordinator.ktChirp Sync — Phase 2 manifest-diff coordinator.12.2 KB · 3 months agoChirpSyncSession.ktTransport-neutral session consumed by the sync coordinator.436 B · 3 months agoChirpTypes.kt680 B · 3 months agoCloudRelayReconnectListener.kt11.3 KB · 3 months agoCodePairingServer.ktCode-based pairing, phone side.16.7 KB · 3 months agoCryptoCompare.ktFixed-format protocol comparisons.539 B · 3 months agoDeviceManifestSupport.kt0x02 added the revoked array to the signed body.6.6 KB · 3 months agoForegroundSyncCoordinator.kt2.9 KB · 3 months agoMdnsPairingServer.ktC7 TCP + mDNS reconnect SERVER (responder side).14.4 KB · 3 months agoNoiseKK.kt2.3 KB · 3 months agoNoiseNK.kt4.1 KB · 3 months agoPairedDevice.kt548 B · 3 months agoPairedDeviceStore.ktPersistent registry of paired devices, encrypted at rest with EncryptedSharedPreferences (same construction as DuressConfigStore / LicenseRepository, v2.1.36).8.1 KB · 3 months agoPairingAuth.kt4.7 KB · 3 months agoPairingCode.ktThe compact join code this phone displays and the user types into the browser.6.2 KB · 3 months agoPairingDiscoveryClient.ktC7 TCP + mDNS reconnect CLIENT (initiator side).13.1 KB · 3 months agoPairingFrames.ktLength-delimited frame IO for a pairing/sync connection.4.8 KB · 3 months agoPairingInvitation.kt1.9 KB · 3 months agoPairingProgress.kt482 B · 4 months agoPeachSyncService.ktKeeps the pairing/sync listener reachable.5.7 KB · 3 months agoPeachWebSocket.ktA minimal RFC 6455 server endpoint — just enough of the protocol to talk to a browser extension's new WebSocket(...).7.6 KB · 3 months agoPendingVouchedDeviceStore.kt3.1 KB · 4 months agoRelayAdoptionHost.kt7.5 KB · 3 months agoRelayAdoptionReceiver.ktReceiver half of relay-first vault adoption.4.0 KB · 3 months agoRelayFrames.ktBrowser-to-browser relay frames — the wire addition from PEACH_SYNC_RELAY_DESIGN.md §3, made concrete.4.0 KB · 3 months agoRelayHub.ktWhether this device will relay for others.6.1 KB · 3 months agoRelaySettingsStore.ktWhether this device relays sync traffic for other paired devices.2.2 KB · 3 months agoRendezvous.kt5.2 KB · 3 months agoRustNoiseNative.ktThin JNI boundary over the canonical Rust snow state machine.3.4 KB · 3 months agoSASDerivation.kt543 B · 3 months agoSyncAlert.kt3.8 KB · 3 months agoSyncAlertStore.kt2.2 KB · 4 months agoSyncIdentity.kt3.7 KB · 3 months agoSyncLimits.ktCloudflare Workers caps one WebSocket message at 32 MiB.1.6 KB · 3 months agoSyncMessage.ktChirp Sync wire protocol — exact port of the browser ChirpSyncMessage union (shared/sync-types.ts).3.9 KB · 3 months agoSyncPadding.ktE7: frame padding at the relay boundary.2.4 KB · 3 months agoSyncReconnectListener.ktThe everyday sync path: already-paired devices reconnecting without a code.10.8 KB · 3 months agoSyncStatus.kt294 B · 4 months agoVaultSyncAdapter.ktProduction [ChirpSyncVaultAdapter] backing the coordinator with the live [VaultRepository].12.6 KB · 3 months ago
ui/821.2 KB · 3 months ago
codex/45.2 KB · 3 months ago
components/65.1 KB · 3 months ago
BirdAnimation.ktThe three acts of the pairing animation, bound to the audio protocol.5.8 KB · 3 months agoCharEnterText.ktPer-character entrance: each glyph fades in and rises into place with a staggered delay.2.8 KB · 4 months agoCopyButton.ktCopy button with the two-effect copy feedback (spec §4.4): a diagonal sheen sweeps once over ~600ms and an accent drain bar fills 0→100% over 1.4s.3.6 KB · 4 months agoCopyFeedbackOverlay.kt3.2 KB · 3 months agoFaviconInitials.ktInitials chip used in place of a network favicon (offline-first).2.9 KB · 4 months agoLockRuneString.kt2.4 KB · 4 months agoPairingBirds.ktThe two pairing birds, ported path-for-path from the browser extension's ChirpPairingFlow.tsx (a finch and a swallow) rather than redrawn by eye.14.4 KB · 3 months agoPeachEmptyOrEndState.kt2.0 KB · 3 months agoPeachExpandableCard.kt2.7 KB · 3 months agoPeachField.kt3.7 KB · 3 months agoPeachMark.ktThe Peach brand mark — a peach fruit with a single leaf.3.2 KB · 3 months agoPeachSegmentedControl.kt5.2 KB · 3 months agoPeachTopBar.kt2.7 KB · 3 months agoQaFlags.ktDebug-only, opt-in escape hatch so automated visual QA (screenshot-based Gate 2 comparisons) can capture screens that are normally FLAG_SECURE-protected.630 B · 3 months agoRuneGridBackground.kt6.4 KB · 3 months agoSecureFlagEffect.ktSets WindowManager.FLAG_SECURE while this composable is in the composition and clears it on dispose — blocking screenshots, screen recording, and the recents thumbnail of screens that display secrets (MN-3: recovery words, export blob, codex generation).1.4 KB · 3 months agoTOTPRing.ktA small ring that sweeps once per TOTP period and turns breach-red in the final 5 seconds.2.1 KB · 3 months ago
lock/35.6 KB · 3 months ago
onboarding/16.8 KB · 3 months ago
pairing/45.7 KB · 3 months ago
recovery/19.6 KB · 3 months ago
security/6.6 KB · 4 months ago
settings/125.8 KB · 3 months ago
sync/8.6 KB · 3 months ago
theme/22.2 KB · 3 months ago
updates/20.4 KB · 3 months ago
vault/390.5 KB · 3 months ago
AdditionalUrlsDetail.ktE3 — additional-URL rows for EntryDetailScreen.11.4 KB · 4 months agoAdditionalUrlsEditor.ktE3 — hard cap on additional URLs, matching the spec.4.7 KB · 4 months agoCardDetailFields.ktD2 — EntryDetail CARD display block.8.6 KB · 4 months agoCardEditFields.ktD2 — EntryEdit CARD field block.4.0 KB · 4 months agoCardFieldUtils.ktShared card formatting/detection helpers for D2 (card type fields).6.2 KB · 4 months agoContextMenuSheet.ktD12 long-press context menu (spec §9).6.0 KB · 4 months agoCsvExport.ktPure-Kotlin CSV serialisation for the C2 Export screen (CSV sub-view).2.2 KB · 4 months agoCsvImport.ktPure-Kotlin CSV / JSON import parsing for the Import screen (spec B2).19.0 KB · 4 months agoDetailTagRow.ktInline tag row for EntryDetailScreen, mirroring the browser EntryView: chips display in place, and the "+" affordance expands a same-surface tag editor.4.0 KB · 4 months agoEditableFieldRow.ktD6 — Inline per-field editing for EntryDetailScreen.13.3 KB · 3 months agoEntryDetailGenerator.ktD4 drafts — generator access from EntryDetailScreen.7.0 KB · 3 months agoEntryDetailScreen.kt37.9 KB · 3 months agoEntryDetailViewModel.kt13.5 KB · 3 months agoEntryEditScreen.kt20.7 KB · 3 months agoEntryEditViewModel.kt14.9 KB · 3 months agoExportScreen.kt───────────────────────────────────────────────────────────────────────────── Password strength scorer (local, dependency-free) ─────────────────────────────────────────────────────────────────────────────20.5 KB · 3 months agoIdentitySuggestDropdown.ktAnchored suggestion dropdown for identity-style fields (username/email).5.0 KB · 4 months agoImportScreen.kt───────────────────────────────────────────────────────────────────────────── ViewModel ─────────────────────────────────────────────────────────────────────────────37.5 KB · 3 months agoMultiSelectUi.ktD12 multi-select per-row checkbox (spec §9).4.1 KB · 4 months agoNotesModeScreen.ktE2 — full-screen editor for NOTE-type entries.18.9 KB · 3 months agoNotesModeViewModel.ktBacks [NotesModeScreen].4.7 KB · 4 months agoPasswordHistorySection.ktShared past-password history UI, extracted from EntryEditScreen so both the editor and EntryDetailScreen render the same rows.6.4 KB · 4 months agoPeachField.ktThe Peach text field used across the entry-edit screens: a bare underline (no border box), drawn in t3 and lit to the accent while focused — matching the lock screen's credential inputs.4.2 KB · 4 months agoPeachScriptExport.ktPeachScript export (MF-2) — writes the browser's PCHS binary payload (Argon2id + AES-256-GCM, zstd sections, BLAKE3 checksum, size-bucket padding, string-table entry packing) re-encoded into Private-Use-Area text.1.4 KB · 4 months agoPeachScriptImport.ktPeachScript import (MF-2) — parses the browser's PCHS binary payload back into full vault entries.2.7 KB · 4 months agoRecoveryWordsScreen.kt12.1 KB · 3 months agoRuneResolve.ktWhich leg of the restore animation is running (browser: RestoreSymbols' animating).7.0 KB · 3 months agoTagChipEditor.ktMax tags per entry.7.2 KB · 4 months agoTagListWidgets.ktHorizontally scrollable tag filter strip for VaultListScreen, placed between the search bar and the sort bar.3.6 KB · 4 months agoTotpInlineEdit.ktE6 — TOTP double-tap to edit the 2FA secret, inline in EntryDetailScreen.12.3 KB · 4 months agoTrashScreen.kt9.8 KB · 3 months agoVaultHealthScreen.ktWarm amber used for the "reused" and "weak" advisory buckets.13.1 KB · 3 months agoVaultListScreen.kt35.0 KB · 3 months agoVaultListViewModel.kt11.7 KB · 3 months ago
PeachAppNavHost.kt16.5 KB · 3 months agoPeachNav.ktEvery navigation destination in the app.2.8 KB · 3 months ago
updates/23.2 KB · 3 months ago
vault/180.3 KB · 3 months ago
BrowserSlot.ktReads the browser extension's slot A so Android can restore a vault that was created there — a Codex printed from the extension, most importantly.6.7 KB · 3 months agoCanary.kt325 B · 4 months agoDuressConfig.ktThe action Peach takes when the duress passphrase is entered at the lock screen.3.4 KB · 4 months agoJwkString.ktReads a passkey's privateKeyJwk whether it arrives as a JSON object or a string, and writes it back as an object.2.4 KB · 3 months agoLastViewedEntryStore.ktRemembers the id of the entry the user last opened so a fresh unlock can land straight back on it (matching the extension, which opens the last entry rather than the list).1.7 KB · 4 months agoPasskeyData.kt771 B · 3 months agoPasswordGenerator.ktCryptographically random password generator.1.6 KB · 4 months agoPasswordHistoryItem.ktOne past password kept in [VaultEntry.passwordHistory].758 B · 4 months agoPeachPayloadCodec.ktPeachScript binary payload (PCHS) — a byte-for-byte port of the browser's peachPayload.ts (MF-2).34.5 KB · 4 months agoPeachScript.ktPeachScript outer codec — maps each payload byte to one Private-Use-Area code point in U+E000..U+E0FF, and back.1.9 KB · 4 months agoRecoveryWordList.kt26.9 KB · 4 months agoRecoveryWords.kt6.0 KB · 4 months agoSavedIdentity.kt250 B · 4 months agoTOTPGenerator.ktRFC 6238 TOTP / RFC 4226 HOTP.3.8 KB · 4 months agoVaultCrypto.kt6.4 KB · 3 months agoVaultEntry.kt3.6 KB · 3 months agoVaultHealth.kt3.9 KB · 4 months agoVaultLockTimer.ktIdle auto-lock timer.1.8 KB · 4 months agoVaultRepository.ktLenient parser for the Codex vault-blob wrapper only.63.5 KB · 3 months agoVaultSettings.kt816 B · 4 months agoVaultSnapshot.kt269 B · 4 months agoVaultStore.ktOne encrypted slot at rest.9.3 KB · 3 months ago
widget/2.7 KB · 4 months ago
MainActivity.ktFragmentActivity (not ComponentActivity) so androidx BiometricPrompt can attach.8.3 KB · 3 months agoPeachApplication.kt2.4 KB · 3 months ago
jniLibs/2.0 MB · 3 months ago
arm64-v8a/502.8 KB · 3 months ago
armeabi-v7a/379.1 KB · 3 months ago
x86/634.1 KB · 3 months ago
x86_64/581.5 KB · 3 months ago
res/665.2 KB · 3 months ago
AndroidManifest.xml7.3 KB · 3 months ago
test/391.6 KB · 3 months ago
java/391.6 KB · 3 months ago
com/391.6 KB · 3 months ago
peachpasswords/391.6 KB · 3 months ago
autofill/10.5 KB · 3 months ago
codex/9.4 KB · 4 months ago
license/519 B · 4 months ago
passkeys/11.2 KB · 4 months ago
qs/1.2 KB · 4 months ago
security/6.5 KB · 4 months ago
shared/3.0 KB · 4 months ago
sync/143.1 KB · 3 months ago
C7ChirpTransportTest.ktC7 transport tests.8.5 KB · 3 months agoChirpAdoptTest.ktAdoption frame protocol parity with the browser chirp-adopt.test.ts.12.8 KB · 3 months agoChirpSyncCoordinatorTest.ktTwo in-memory [ChirpSyncSession]s wired back to back.6.3 KB · 3 months agoChirpSyncSuiteTest.ktChirpSync suite (brief Suite 13): length-prefixed pairing frames, SAS derivation KAT, and cross-device entry sync through the [VaultSyncAdapter] (two repositories made to share a sync root key via the Codex blob).9.5 KB · 3 months agoCloudRelayReconnectListenerTest.kt5.7 KB · 3 months agoCodePairingServerTest.ktCovers the two behaviours that are easy to get quietly wrong: a bad token must be refused with no reply at all, and an abandoned code must stop working.12.1 KB · 3 months agoForegroundSyncCoordinatorTest.kt996 B · 4 months agoNoiseKKTest.kt4.3 KB · 3 months agoPairingAuthTest.kt3.8 KB · 3 months agoPairingCodeTest.ktThe phone is the only side that generates pairing codes and the browser is the only side that reads them, so a drift here is invisible until a real pairing fails with nothing to look at.3.8 KB · 3 months agoPairingInvitationTest.kt1.2 KB · 3 months agoPeachWebSocketTest.ktExercises the server against OkHttp's RFC 6455 client rather than a hand-rolled one.5.7 KB · 3 months agoRelayAdoptionHostTest.kt14.7 KB · 3 months agoRelayFramesTest.ktThe relay frames share a channel with ordinary sync frames, so the one thing that must never break is telling them apart: a sync frame misread as a relay frame would be forwarded to another device, and a relay frame misread as sync would be handed to the vault.2.0 KB · 3 months agoRelayHubTest.ktThe relay's whole job is to move bytes it must not understand between two peers that cannot reach each other.5.6 KB · 3 months agoRelaySettingsPropagationTest.kt913 B · 3 months agoRendezvousTest.kt4.1 KB · 3 months agoSyncAlertTest.kt4.8 KB · 3 months agoSyncPaddingTest.kt2.4 KB · 3 months agoSyncReconnectListenerRelayTest.ktThe dispatch itself, over a real socket and a real Noise session: two paired "laptops" connect, one asks to be relayed to the other, and a frame crosses.12.9 KB · 3 months agoVaultSyncAdapterTest.kt21.0 KB · 3 months ago
ui/70.0 KB · 3 months ago
codex/2.9 KB · 4 months ago
lock/5.6 KB · 4 months ago
onboarding/3.6 KB · 3 months ago
security/3.0 KB · 4 months ago
settings/4.9 KB · 3 months ago
theme/1.9 KB · 4 months ago
vault/43.3 KB · 3 months ago
NavigationFlowTest.ktNavigation suite (brief Suite 9): route construction and the flow-decision functions that route the app — onboarding gate, list-tap, and post-unlock.4.8 KB · 3 months ago
updates/3.8 KB · 3 months ago
vault/125.6 KB · 3 months ago
BrowserPasskeyJwkTest.ktA passkey's privateKeyJwk is a JSON OBJECT in the browser (JsonWebKey in shared/types.ts); Android holds it as a compact string.2.9 KB · 3 months agoBrowserSlotTest.ktPins the browser→Android slot-A translation that Codex restore depends on.4.8 KB · 3 months agoCardSerializationTest.ktIn-memory [VaultStorage] for exercising last4 derivation on save (MF-3).3.4 KB · 4 months agoDuressSlotBTest.ktIn-memory [VaultStorage] including a decoy (slot B) slot, for the MF-6 duress model.5.3 KB · 3 months agoOfficialCryptoVectorsTest.kt2.8 KB · 3 months agoPasskeyEntryTest.kt1.1 KB · 4 months agoPasswordGeneratorTest.kt1.2 KB · 4 months agoPeachScriptRoundTripTest.ktPeachScript + CSV round-trip suite (brief Suite 7): large-vault fidelity, ciphertext tamper detection, size-bucket padding, and CSV column/injection behavior.6.5 KB · 4 months agoPeachScriptTest.kt10.5 KB · 4 months agoRecoveryEscrowIntegrationTest.ktIntegration coverage for the full create → confirm → seal → unlock recovery chain (brief Fix 1).4.8 KB · 4 months agoRecoveryEscrowSuiteTest.ktRecoveryEscrow suite (brief Suite 3): word validation/autocomplete, partial and wrong-word failures, missing-escrow handling, recovery-driven password reset, and the duress-mode guard that recovery escrows are never sealed for the decoy.8.2 KB · 3 months agoRecoveryEscrowTest.kt10.0 KB · 4 months agoSlotAUnlockTest.ktIn-memory [VaultStorage] for the non-committing dual-derivation path (MF-5).3.1 KB · 4 months agoSlotPaddingTest.ktExposes the raw stored slots so the padding lengths (MN-1) can be inspected.3.1 KB · 4 months agoTOTPGeneratorTest.kt1.3 KB · 4 months agoVaultCryptoKdfTest.ktMF-4: the Argon2id KDF must hash the password's explicit UTF-8 bytes (matching the browser's TextEncoder().encode), not its UTF-16 code units.1.9 KB · 4 months agoVaultCryptoTest.ktVaultCrypto suite (brief Suite 2): Argon2id key derivation, AES-256-GCM round-trips, AAD enforcement, and KDF parameters.9.1 KB · 3 months agoVaultHealthTest.ktVaultHealth suite (brief Suite 8): the pure [VaultHealth.buildReport] scoring — breach / reused / weak / aged / sensitivity detection, section counts, and the sensitivity-weighted vault score.7.5 KB · 4 months agoVaultLockTimerTest.ktIn-memory [VaultStorage] so the timer can drive a real repository off-device.3.9 KB · 4 months agoVaultRepositoryExtraTest.ktSecond VaultRepository suite (brief Suite 1 expansion).16.6 KB · 3 months agoVaultRepositoryTest.ktIn-memory [VaultStorage] so the repository can be exercised without Android.17.5 KB · 4 months ago
widget/761 B · 4 months ago
CrossPlatformKATTest.ktMN-4: cross-platform known-answer tests.6.1 KB · 3 months ago
build.gradle7.9 KB · 3 months agoproguard-rules.pro44 B · 4 months ago
gradle/73.4 KB · 4 months ago
scripts/1.6 KB · 3 months ago
build.gradle667 B · 3 months agogradle.properties222 B · 4 months agogradlew734 B · 4 months agokepr.build524 B · 3 months agopeach-android-audit-report.mdDate: 2026-06-09 Base version (per brief): v2.1.40 — note: app/build.gradle actually declares versionName "2.2.0" / versionCode 202000.41.5 KB · 4 months agosettings.gradle396 B · 4 months agoVERSION7 B · 3 months ago
363a93112668feat: Add EdDSA passkey crypto (v2.3.45)4 months ago142232e24288feat: Add ES256 passkey creation (v2.3.44)4 months ago44316f00e2edfeat: Sign ES256 passkey assertions (v2.3.43)4 months agoc3d88387bfd8feat: Surface passkeys in Credential Provider (v2.3.42)4 months ago93c2fbea8f2cfix: Preserve passkey private keys in PeachScript (v2.3.41)4 months agoad458e292ac6fix: Preserve Autofill picker origin type (v2.3.40)4 months agod651e3c935cdfix: Match additional URLs in Autofill origin checks (v2.3.39)4 months agoba9c7c76f6c9feat: Add Autofill save prompt handling (v2.3.38)4 months ago954dad0e1f77feat: Add Codex PDF sharing (v2.3.37)4 months agodfcad5a107c1feat: Add Codex restore shortfall parity (v2.3.36)4 months ago43dfb18543c3fix: Match browser Codex PDF filename (v2.3.35)4 months agof7363adae266feat: Gate Codex generation behind Pro (v2.3.34)4 months agobca92a34882afeat: Complete import/export parity (v2.3.33)4 months ago5460e6c45135fix: Align import restore error copy (v2.3.32)4 months ago424682531f2ffeat: Carry PeachScript metadata sections (v2.3.31)4 months agocb5e4242bca1fix: Match browser export filenames (v2.3.30)4 months agof6b8ff169519fix: Route peach backup files into restore flow (v2.3.29)4 months agoeee8f3be34b5feat: Complete feedback parity (v2.3.28)4 months ago31256f603665feat: Show active Pro license details (v2.3.27)4 months agobecd92652892feat: Match appearance theme toggle (v2.3.26)4 months ago4cf6c7a7417dfeat: Queue vouched sync devices (v2.3.25)4 months ago6453b0dda43ffeat: Add sync identity rotation (v2.3.24)4 months ago5c05adf0b225feat: Add protection breach check (v2.3.23)4 months agoc915805f8c62feat: Add passkey provider protection toggle (v2.3.22)4 months ago827354a8a29dfeat: Add vault history restore (v2.3.21)4 months ago94361110a63afeat: Add vault duplicate cleanup (v2.3.20)4 months agoa175832dabe6feat: Complete Notes parity flow (v2.3.19)4 months agoeb3db0cf92c2fix: Match browser note save and delete behavior (v2.3.18)4 months agodf73b22b6f1bfix: Add browser-style canary controls (v2.3.17)4 months agof9ec7f8479b4fix: Match browser card expiry entry (v2.3.16)4 months ago53183c79f084fix: Match browser add-entry tag behavior (v2.3.15)4 months agofb79f4f138acfix: Match browser card add-entry fields (v2.3.14)4 months ago610b588ac078fix: Match browser add-entry generator feel (v2.3.13)4 months ago15ca7bed330efix: Match browser add-entry identity suggestions (v2.3.12)4 months agod548c5f17d11fix: Match add-entry primary action state (v2.3.11)4 months ago33e27acd130dfix: Match browser optional add-entry fields (v2.3.10)4 months ago83e1953cc74ffix: Give vault list browser sheet transitions (v2.3.9)4 months ago2ea2f7890d69fix: Match browser vault search ranking (v2.3.8)4 months ago1d2329079f28docs: Add browser parity task map4 months ago55dfa7a7d79afix: Expose vault multi-select from sort bar (v2.3.7)4 months ago12a236a42d04fix: Match browser create-vault gating (v2.3.6)4 months agodd36496a3560fix: Unify existing entry editing with detail view (v2.3.5)4 months agoed96f6235dd3feat: Complete entry detail browser parity pass (v2.3.4)4 months ago1541d408acb4fix: Close browser gap quick wins (v2.3.3)4 months agoc94b00fae8aadocs: record pairing Pro license transfer session in CONTINUITY (v2.3.2)4 months agoc98070593695feat: Pro license transfer during chirp pairing — PAIR_IDENTITY gains optional 'license'; a Pro device advertises its signed blob and the peer activates it (LicenseRepository signature-verify) after SAS confirm, either direction; browser-parity wire field; bump 2.3.1→2.3.24 months ago7e04b97b04e0docs: record android sync UX parity session in CONTINUITY — sync-hub card, initial-sync copy, deck stride/tap fix, pull-to-refresh (v2.3.1)4 months agob6a502bb7352feat: pull-to-refresh on the vault list — custom nestedScroll spinner triggers SyncViewModel.syncNow(); dependency-free, accent-styled (v2.3.1)4 months agoaf8b5b404e22fix: Android settings/sync browser parity — tappable Sync hub row (drop open button + DEVICE FLOW label, add pair-device description), initial-sync local-network copy, deck tabs use fixed browser stride + active-card tap no-op (v2.3.1)4 months ago55d03cd77bf2docs: record PCH-02-002 Noise fix in CONTINUITY (v2.3.0)4 months ago

← newerolder →

details

Peach for Android

A free, open source, local-first password manager for Android.

No accounts. No subscription. Your passwords stay on the device, encrypted with AES-256-GCM and protected by Argon2id key derivation. Sync, backup, and autofill happen without trusting any cloud in the middle.

peachpasswords.com


Features

  • Zero-knowledge vault — AES-256-GCM encryption, Argon2id KDF, keys never leave your device
  • End-to-end encrypted sync — pairs with your other Peach devices over a Noise channel; the relay only forwards ciphertext it cannot read
  • Inline autofill — fills directly in apps, no copy-paste detour
  • Passkeys — WebAuthn credentials alongside your passwords
  • Quick Settings tile — copy a credential from anywhere with a single tap
  • Biometric unlock — hardware-backed AndroidKeyStore escrow, invalidated on enrollment change
  • Codex — prints your encrypted vault as Aztec codes on paper. Physical offline backup

Open Source

Peach is free and open source under the GPL v3 license. Both the browser extension and the Android app.

The source is hosted on Kepr — Asha Software's own version control platform.


Security

Peach has undergone two adversarial analysis sessions against this codebase. The most recent findings have been resolved.

Cryptographic primitives:

  • Key derivation: Argon2id (m=64MiB, t=3, p=4)
  • Encryption: AES-256-GCM with fresh random nonces
  • Sync handshake: Noise NK / Noise KK (25519, ChaChaPoly, BLAKE2s)
  • Backup codec: GF(2⁸) Reed-Solomon with zstd compression
  • BLAKE3 checksums throughout

The canonical Noise core lives in a shared Rust crate with the browser extension — Android drives it via JNI. See docs/CRYPTOGRAPHIC-TEST-VECTORS.md for the byte-level vectors that pin each primitive.


Building

./gradlew assembleRelease

Outputs to app/build/outputs/apk/release/. The shared Noise core is built from ../peach-browser/crypto-core.


License

GPL v3 — see LICENSE.


Peach Pro

Pro features (end-to-end encrypted sync, Codex, Canary) are available for $39 one-time at peachpasswords.com. Purchasing Pro supports continued development.


Built by Asha Software · [email protected]