aboutsummaryrefslogtreecommitdiffstats
path: root/app/build.gradle.kts
AgeCommit message (Collapse)AuthorFilesLines
12 hoursbuild(deps): update sshj to 0.41.2 and drop eddsaDanilo M.1-1/+0
sshj 0.40 replaced the unmaintained net.i2p.crypto:eddsa 0.3.0 (last release 2019) with Bouncy Castle's Ed25519. 0.41.2 still targets Java 8. The app used eddsa directly for wrapped Ed25519 SSH keys. Generate the 32-byte seed with SecureRandom and build the key pair with sshj's Ed25519KeyFactory and Bouncy Castle's public key derivation. The wrapped format is still the raw RFC 8032 seed, so keys generated by 0.1.3 keep working; Ed25519KeyPairTest pins this with the RFC 8032 test vector. sshj 0.40 also changed setSecurityProvider(null) to reset the registerBouncyCastle flag, which undid the earlier setRegisterBouncyCastle(false): sshj then forced every operation through Bouncy Castle, which cannot sign with Android Keystore keys ("no encoding for EC private key"), and hardware-backed SSH keys failed to authenticate. Call the two in the opposite order; SshjConfigTest checks that sshj leaves provider selection to the JCA. Verified with the R8 release build on the emulator against the e2e server: a hardware ECDSA key, a newly generated wrapped Ed25519 key and an imported OpenSSH Ed25519 key all authenticated and synced. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursfeat(crypto): replace androidx security-crypto with Keystore AES-GCMDanilo M.1-1/+0
security-crypto is deprecated in 1.1.0 and the app was stuck on 1.1.0-alpha06, since the stable release fails the warnings-as-errors build. It also pulled in Tink for what is a single AES-GCM operation. KeystorePreferences is a SharedPreferences whose values are AES-GCM sealed under an Android Keystore key (random IV, entry name as AAD so values cannot be swapped between entries); a value that fails to decrypt reads as absent. It backs the Git credentials (git_secrets), the proxy credentials (proxy_secrets) and the PGP passphrase cache, whose key needs the screen lock or a strong biometric within 60s and is recreated if a new biometric enrollment invalidates it. Wrapped Ed25519 SSH keys are sealed the same way into the private key file. Password generator settings are not secret and move to plain preferences. Nothing is migrated: removeSecurityCryptoData deletes the old encrypted preference files, Tink keysets, their Keystore master keys and a security-crypto wrapped Ed25519 key once on upgrade. Only 0.1.x installs from the last few hours have such data. Hardware SSH keys and imported keys are untouched. Tests: KeystorePreferencesTest (round trip, defaults, no plaintext, random IVs, AAD binding, tamper rejection, remove/clear) with a software AES key. Verified on the emulator by upgrading a 0.1.2 debug build that held a wrapped Ed25519 key, Tink keysets and a cached passphrase: the old data was deleted, a new Ed25519 key authenticated over SSH after a fingerprint unlock, and a passphrase cached on first decrypt was reused on the second with only the fingerprint. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
13 hoursfix(crypto): refuse to encrypt when a .gpg-id recipient key is missingDanilo M.1-0/+1
CryptoRepository.encrypt looked up every .gpg-id recipient and dropped the ones it could not find, so an entry saved on a device that lacked one recipient's key was encrypted to the others only. With a store shared between a phone key and a smartcard key, entries created on the phone could no longer be decrypted with the smartcard alone. Fail with the lookup error instead (KeyNotFoundException names the key), so the user imports the missing public key and saves again. PasswordCreationActivity also ignored the Result of encrypt and wrote the output buffer regardless: on any encryption failure it wrote an empty .gpg file, overwriting the entry when editing, and committed it. Show the error and leave the file untouched. CryptoRepositoryTest covers both the missing-recipient failure and the all-present success path, with keys generated by PGPainless (added as an app test dependency). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
18 hoursfeat: rename the app to HardenedPass (xyz.danix.hardenedpass)Danilo M.1-1/+1
The fork gets its own application ID and name, so it installs next to upstream's app.passwordstore instead of replacing it, and could be submitted to F-Droid. Debug builds keep the .debug suffix and are labelled "HardenedPass Debug". The Kotlin package stays app.passwordstore: renaming it would be churn with no visible effect. "GrapheneOS" is kept out of the name because it is that project's trademark; "Hardened" nods to its vocabulary. README and AGENTS.md describe the fork's GrapheneOS goal. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
18 hoursbuild: drop the nonFree flavor, Sentry and Play ServicesDanilo M.1-5/+0
The fork targets GrapheneOS and ships only FOSS builds. The nonFree flavor added Sentry crash reporting, wired to upstream's Sentry project, and Play Services SMS one-time-code autofill, which needs Google's servers. Neither is wanted, so remove the flavor dimension entirely: - Delete app/src/nonFree, the SentryPlugin, the sentry-stub module, the Sentry and Play Services catalog entries, and the Sentry scope setup in Application. - Move the free AutofillSmsActivity stub into main; it keeps the SMS OTP feature off exactly as the free build did. A ponytail note marks the FillOtpFromSms paths for later removal. - SlimTests no longer needs to skip a nonFree variant. - Workflows and docs use :app:assembleDebug / :app:assembleRelease. A bare assembleRelease would also verify library modules in release mode, where ui:compose fails on a pre-existing AppCompat attribute reference the old flavored task never touched. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
21 hoursbuild: update to Gradle 9.8.2, AGP 9.5.0, Kotlin 2.4.21, Hilt 2.60.1Danilo M.1-2/+10
AGP 9 migration: - Configure the shared Android setup through the new DSL (CommonExtension, ApplicationExtension) instead of the removed TestedExtension and BaseAppModuleExtension; targetSdk moves to the application extension. - Stop applying the Kotlin Android plugin; AGP 9 compiles Kotlin itself. - Replace kapt with KSP 2.3.13 for Hilt, which built-in Kotlin requires, and carry the Dagger compiler options over as KSP arguments. - AGP 9 now applies packaging excludes to unit-test resources, which stripped the diceware word list (**/*.txt) from its tests; lift that exclude in the diceware module. - Use resources.directories instead of the deprecated srcDir. Plugin updates required by Gradle 9 / AGP 9: Sentry Gradle plugin 6.25.0 (sentry-android 8.62.0), metalava plugin 0.5.1, maven-publish 0.37.0, spotless 8.10.4, version-catalog-update 1.1.2, download task 5.7.0, foojay resolver 1.0.0, with their API changes. Newer metalava models Kotlin properties, so autofill-parser/api.txt is regenerated; the diff is representation only, no API was added or removed. Fix new Kotlin 2.4 and lint findings (explicit return type in a function with an early return, UseKtx in autofill-parser), drop deprecated Kotlin Gradle properties, and make the AGENTS.md pre-commit command cover every task CI runs (both flavors, lint on all modules). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
22 hoursbuild(deps): update Bouncy Castle to 1.86 and PGPainless to 1.7.8Danilo M.1-1/+5
Bouncy Castle 1.78.1 is affected by GHSA-574f-3g2m-x479, GHSA-9pwp-9qqc-pr26, GHSA-c3fc-8qff-9hwx and GHSA-qp49-qgx5-5m26, all fixed by 1.85. PGPainless 1.7.8 is the newest 1.x release. A root resolution rule keeps every Bouncy Castle module on the catalog version; before, bcpg 1.77 shipped next to bcprov 1.78.1. The new stack decrypts the OCB (LibrePGP) packets GnuPG 2.3+ emits by default, which the old one rejected as "non-standard AEAD". Drop the NonStandardAEAD error, its bottom sheet and strings, and replace the mislabelled aead_* fixtures (SHA-1 self-signed keys plus a message encrypted to an unrelated key) with a real GnuPG 2.5 key and OCB message that the tests now decrypt. The new fixture is a throwaway test key, so it is allowlisted in .gitleaksignore by fingerprint. Fix KeyUtils.isKeyUsable, which compared a Boolean to null and so accepted every key that parsed, including keys with no encryption subkey. A signing-only key fixture now covers the rejection path. Also: migrate the removed SelectUserId.firstMatch and deprecated addDecryptionPassphrase APIs, keep one copy of the Bouncy Castle META-INF/LICENSE.md in the APK, and move the existing InvalidPackage lint baseline entries to the bcpkix 1.86 jar. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2024-10-01fix(deps): update dependency com.android.tools.build:gradle to v8.7.0 (#3240)renovate[bot]1-1/+0
* fix(deps): update dependency com.android.tools.build:gradle to v8.7.0 * fix: remove deprecated options --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-08-18fix: rework Crowdin integration (#3175)Harsh Shandilya1-6/+0
* chore: set up Crowdin configuration * fix(app): sync strings from Crowdin Closes #3174 * fix(ci): use crowdin/github-action instead of homebrew setup * fix(build): remove obsolete Crowdin plugin
2024-08-14chore: add missing copyright headers and update existing onesHarsh Shandilya1-1/+1
2024-08-05enable per-app language setting (Android-13+) (#3152)agrahn1-0/+2
2024-05-22fix(deps): update kotlin and compose to v2 (major) (#3064)renovate[bot]1-4/+2
* fix(deps): update kotlin and compose to v2 * fix(build): switch to Kotlin Compose Compiler --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-04-06fix(deps): update dependency org.bouncycastle:bcprov-jdk18on to v1.78 (#2986)renovate[bot]1-0/+3
* fix(deps): update dependency org.bouncycastle:bcprov-jdk18on to v1.78 * fix(deps): add missing bcutil dependency * fix(build): drop multi-release JAR artifacts from APK --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-01-25chore(deps): upgrade androidx.activityHarsh Shandilya1-1/+1
2023-12-15Revert "Refactor SSHKey into a separate module (#2450)"Harsh Shandilya1-1/+0
This reverts commit 97b3577a463966e93d24649ff348fc4bb6825e50.
2023-11-28feat: remove WhatTheStackHarsh Shandilya1-6/+0
This is pretty unmaintained
2023-11-26feat: remove Leak CanaryHarsh Shandilya1-2/+1
This mostly ends up spamming about Autofill leaks in the framework
2023-09-04fix(deps): update dependency com.hierynomus:sshj to v0.36.0 (#2670)renovate[bot]1-2/+5
* fix(deps): update dependency com.hierynomus:sshj to v0.36.0 * refactor(build): drop unnecessary explicit dependency * chore(idea): cruft * fix(app): ensure SLF4J v1 is used * fix(build): disable illegal BindsCanBeExtensionFunction lint * chore: refresh Lint baselines --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2023-08-10refactor: un-flatten module structureHarsh Shandilya1-3/+3
2023-07-12fix(build): properly resolve JavaPoet version resolution issueHarsh Shandilya1-1/+1
2023-07-06fix(build): adjust ktfmt path filtering to allow formatting build.gradle.kts ↵Harsh Shandilya1-3/+1
files
2023-06-15fix: address `ComposeUnstableCollections` lintHarsh Shandilya1-0/+1
2023-06-15chore: rename TOML keys for coroutines depsHarsh Shandilya1-2/+2
2023-05-20refactor(build): sync Gradle properties set with current AGPHarsh Shandilya1-6/+5
2023-04-02Refactor SSHKey into a separate module (#2450)Aditya Wasan1-0/+1
* refactor(ssh): add `ssh` module Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add `SSHKey` data class Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add `SSHKeyType` enum Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add `SSHKeyAlgorithm` class Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add class to generate `RSA` key Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * chore(ssh): add required dependencies Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add `ECDSAKeyGenerator` and remove constants Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): add utilities Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * feat(ssh): add `SSHKeyWriter` Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * refactor(ssh): make ssh key generators suspending Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * fix(ssh): fix explicit API violations * feat: complete `ED25519KeyWriter` implementation Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * factor(ssh/writer): update writer interface Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * feat(ssh/provider): add providers for different key types Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * feat(ssh): add SSHKeyManager for common key functionality Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * feat(ssh): add remaining methods to reach feature parity with old SSH implementation Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * wip(app): start using SSHKeyManager instead of SSHKey class Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> * refactor(ssh): update package name Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * chore(ssh): fix detekt warnings Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> * chore: fixes across the board --------- Signed-off-by: Aditya Wasan <adityawasan55@gmail.com> Signed-off-by: Harsh Shandilya <me@msfjarvis.dev> Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2023-03-21refactor(build): wire up CC-compatible task dependencies for CrowdinHarsh Shandilya1-1/+1
2023-03-21fix(build): remove `DSL_SCOPE_VIOLATION` suppressionHarsh Shandilya1-1/+1
This was a Gradle bug that is now fixed https://docs.gradle.org/8.1-rc-1/release-notes.html#:~:text=Access%20to%20version%20catalog%20for%20plugins%20in%20the%20plugins%20%7B%7D%20block
2023-03-01refactor(app): centralize lint configurationHarsh Shandilya1-11/+0
2022-12-19refactor: merge format-common-impl into format-commonHarsh Shandilya1-1/+1
Also converts the format-common module into an Android library since UriTotpFinder requires the Android SDK.
2022-12-03feat(leakcanary): migrate to manual initializationHarsh Shandilya1-1/+1
2022-11-27feat: remove BeagleHarsh Shandilya1-3/+0
It breaks WhatTheStack and doesn't offer anything particularly useful
2022-11-18chore: inject VM with Lifecycle-ViewModel-Compose integrationHarsh Shandilya1-0/+1
2022-11-16feat: remove Beagle's logger integrationHarsh Shandilya1-3/+0
Fixes Sentry issue PASSWORD-STORE-GOOGLE-PLAY-14
2022-10-25refactor(deps): switch to Compose BOMHarsh Shandilya1-1/+2
2022-10-24feat: setup Beagle for debuggingHarsh Shandilya1-0/+6
2022-10-24refactor: use generated accessors for flavor dependenciesHarsh Shandilya1-3/+3
2022-10-24chore(gradle): add missing suppressions and license headersHarsh Shandilya1-0/+1
2022-10-21Refactor `format-common` module (#2196)Harsh Shandilya1-1/+1
* fix: touch up `PasswordEntryTest` KDoc * feat: add format-common-impl module * refactor: switch app to format-common-impl * refactor: move `format-common` tests to `format-common-impl` * feat: add a test for Steam OTP
2022-07-23Improvements to key list activity (#2030)Harsh Shandilya1-0/+1
2022-07-18Misc cleanups and bugfixes (#2019)Harsh Shandilya1-0/+1
* Fix decrypt activity items being editable * Remove unused resources and re-roll lint baseline * Make lint mark all warnings as errors
2022-07-18Add key manager UIHarsh Shandilya1-0/+9
2022-07-15Remove OpenKeychain code and leave TODOs for missing functionalityHarsh Shandilya1-2/+0
2022-07-15all: re-do package structure yet againHarsh Shandilya1-1/+1
2022-07-15Change app package name to app.passwordstoreHarsh Shandilya1-1/+1
2022-07-09app: turn off crashing lintHarsh Shandilya1-0/+1
2022-07-07ui-compose: import Manrope fontHarsh Shandilya1-0/+1
2022-05-29Remove unused dependencies (#1930)Harsh Shandilya1-2/+0
gradle: remove unused instrumentation testing deps
2022-05-27Simplify BouncyCastle workaround and upgrade Fragment (#1926)Harsh Shandilya1-3/+3
* Simplify bouncycastle workaround * Upgrade fragment-ktx to 1.5.x
2022-05-19Upgrade to AGP 7.2.0 (#1920)Harsh Shandilya1-9/+1
2022-04-24app: setup Lint baselineHarsh Shandilya1-0/+1