summaryrefslogtreecommitdiffstats
path: root/content/en/hardenedpass/reference
diff options
context:
space:
mode:
Diffstat (limited to 'content/en/hardenedpass/reference')
-rw-r--r--content/en/hardenedpass/reference/_index.md8
-rw-r--r--content/en/hardenedpass/reference/security/index.md59
-rw-r--r--content/en/hardenedpass/reference/settings/index.md65
-rw-r--r--content/en/hardenedpass/reference/troubleshooting/index.md76
4 files changed, 190 insertions, 18 deletions
diff --git a/content/en/hardenedpass/reference/_index.md b/content/en/hardenedpass/reference/_index.md
index 9a07df6..7b14a54 100644
--- a/content/en/hardenedpass/reference/_index.md
+++ b/content/en/hardenedpass/reference/_index.md
@@ -1,13 +1,9 @@
+++
title = "Reference"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Reference pages for HardenedPass: every setting, the security model and fixes for common errors."
weight = 30
draft = true
+++
-Placeholder.
-
-## First heading
-
-Text.
+Look things up here when you need them. There is no need to read these pages in order.
diff --git a/content/en/hardenedpass/reference/security/index.md b/content/en/hardenedpass/reference/security/index.md
index 0c1ba30..c865c1d 100644
--- a/content/en/hardenedpass/reference/security/index.md
+++ b/content/en/hardenedpass/reference/security/index.md
@@ -1,13 +1,64 @@
+++
title = "Security"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "What HardenedPass protects, where each secret lives, what it sends over the network and which threats it does not cover."
weight = 100
draft = true
+++
-Placeholder.
+This page says what the app does for you and, just as important, what it does not do.
-## First heading
+## Where your secrets live
+
+| Secret | Where it is | How it is protected |
+|---|---|---|
+| Entries | Files in the app's private storage, and on your git server | OpenPGP, the same as `pass` on a computer |
+| OpenPGP private key | The app's private storage | Its own passphrase |
+| Key passphrase | Nowhere, unless you enable caching | If cached: AES-GCM under an Android Keystore key |
+| Git and proxy passwords | The app's private storage, if you tell it to remember them | AES-GCM under an Android Keystore key |
+| SSH key made on the phone | Android Keystore | The system, plus your screen lock if you ask for it |
+| SSH key you imported | The app's private storage | Its own passphrase, if it has one |
+
+Android Keystore keys are held by the system and cannot be copied out of the phone, even
+by the app that uses them.
+
+## What the app does
+
+- **No telemetry.** No analytics, no crash reports, no Google Play Services. The app
+ only connects to the git server you configured, and to your proxy if you set one.
+- **Blocks screenshots of secrets.** Entries, the editor, the generator, passphrase
+ dialogs and autofill windows cannot be captured by screenshots, and do not appear in
+ the recent apps view.
+- **Clears the clipboard.** A copied password is removed after a timeout.
+- **Checks the SSH server.** The server's host key is saved on first connection and
+ checked after that. The first connection is trusted without asking, so make it on a
+ network you trust.
+- **Trusts known browsers only.** Autofill works only in browsers whose signing
+ certificate the app recognizes, and warns you if an app's publisher changes. See
+ [Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+- **Refuses outside files.** Other apps can open the app, but it only opens paths that
+ really are inside your store.
+
+## What the app does not protect you from
+
+- **A compromised phone.** Malware that controls an unlocked phone can see what you
+ see. Keep the system up to date.
+- **Your keyboard.** A keyboard app sees everything you type, the passphrase included.
+ Use one you trust, with network access off if your system allows that.
+- **Other apps reading the clipboard** before the timeout runs out. Autofill avoids the
+ clipboard altogether.
+- **A weak passphrase.** If someone gets your key file, the passphrase is all that is
+ left.
+- **Your git server seeing names.** Entry and folder names are file names, and they are
+ not encrypted, so the server can read them, along with the dates of your commits.
+- **Biometric lock as encryption.** **Enable biometric authentication** is a gate at app
+ start. It keeps out someone holding your unlocked phone for a moment, and it does not
+ encrypt anything.
+- **Losing your key.** No one can recover a store without its private key and passphrase.
+
+## Passphrase caching
+
+Caching is convenient, but while the passphrase is cached, anyone who gets into the
+unlocked app can open every entry. It is experimental. If you use it, turn on
+**Automatically clear passphrase cache** as well.
-Text.
diff --git a/content/en/hardenedpass/reference/settings/index.md b/content/en/hardenedpass/reference/settings/index.md
index 81a68ad..d856f93 100644
--- a/content/en/hardenedpass/reference/settings/index.md
+++ b/content/en/hardenedpass/reference/settings/index.md
@@ -1,13 +1,70 @@
+++
title = "Settings"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Every HardenedPass setting and what it does, section by section: general, autofill, passwords, repository, misc and PGP."
weight = 90
draft = true
+++
-Placeholder.
+Open **Settings** from the three dots in the list's search bar, or from the welcome
+screen. Settings are grouped in six sections.
-## First heading
+## General
-Text.
+| Setting | What it does |
+|---|---|
+| **App theme** | Light, dark or following the battery saver. |
+| **Password file organization** | How autofill names the files it saves, for example `work/example.org.gpg` or `work/example.org/alice@example.org.gpg`. |
+| **Password sort order** | Folders first, or recently used first. |
+| **Disable pull to sync action** | Stops the pull down gesture on the list from starting a sync. |
+| **Recursive filtering** | Search also looks inside the folders below the current one. |
+| **Open search on start** | Opens the search bar when the app starts. |
+| **Show all files and folders** | Lists files that are not passwords as well. |
+| **Enable biometric authentication** | Asks for your fingerprint when the app starts. See [Security]({{< relref "/hardenedpass/reference/security" >}}) for what this does and does not protect. |
+
+## Autofill
+
+| Setting | What it does |
+|---|---|
+| **Enable Autofill** | Makes HardenedPass the autofill service. See [Autofill]({{< relref "/hardenedpass/using/autofill" >}}). |
+| **Default username** | Used when autofill cannot find a username in the entry or its path. |
+| **Custom domains** | Domains whose subdomains autofill treats as separate sites. |
+
+## Passwords
+
+| Setting | What it does |
+|---|---|
+| **Password generator type** | The generator that opens first: Classic (the Random tab) or Diceware. |
+| **Password copy timeout** | Seconds a copied password stays in the clipboard, 45 by default. 0 means forever. |
+| **Show the password** | Whether a decrypted password is visible right away. Copying still works when it is hidden. |
+| **Automatically copy password** | Copies the password as soon as an entry is decrypted. |
+
+## Repository
+
+| Setting | What it does |
+|---|---|
+| **Rebase on pull** | On, your local commits go on top of the server's. Off, a merge commit is made instead. On by default. |
+| **Edit Git server settings** | Changes the repository URL and how you log in. |
+| **HTTP(S) proxy settings** | Sets a proxy. Shown for HTTPS remotes only. |
+| **Local Git config & utilities** | Commit name and email, commit log, and the recovery tools described in [Sync]({{< relref "/hardenedpass/using/sync" >}}). |
+| **Import SSH key** | Reads a private SSH key from a file. |
+| **Generate SSH key pair** | Makes a new SSH key on the phone. |
+| **View generated public SSH key** | Shows the public half, to add to your server. |
+| **Delete repository** | Deletes the local copy of the store. The server's copy is not touched, and neither are local commits you did not sync: those are gone. |
+
+## Misc
+
+| Setting | What it does |
+|---|---|
+| **Export passwords** | Copies the store, still encrypted, to a folder you choose. |
+| **Workaround clipboard history feature** | On phones with a clipboard history, fills it with numbers to push passwords out. |
+| **Debug logging** | Turns on debug logs, after an app restart. Release builds only. |
+
+## PGP settings
+
+| Setting | What it does |
+|---|---|
+| **Key manager** | Lists imported keys, imports new ones and deletes old ones. |
+| **Encrypt in ASCII armor mode** | Writes entries as text instead of binary. Leave it off unless you know you need it. |
+| **Enable passphrase caching** | Remembers the key's passphrase, so that entries open without asking. Experimental, and needs an active screen lock. |
+| **Automatically clear passphrase cache** | Forgets the passphrase when the screen turns off. |
diff --git a/content/en/hardenedpass/reference/troubleshooting/index.md b/content/en/hardenedpass/reference/troubleshooting/index.md
index 4221c83..3dfce92 100644
--- a/content/en/hardenedpass/reference/troubleshooting/index.md
+++ b/content/en/hardenedpass/reference/troubleshooting/index.md
@@ -1,13 +1,81 @@
+++
title = "Troubleshooting"
date = 2026-11-05T00:00:00Z
-description = ""
+description = "Common HardenedPass errors, what they mean and how to fix them: passphrase, keys, SSH, push rejected, detached head, autofill."
weight = 110
draft = true
+++
-Placeholder.
+## Keys and passphrases
-## First heading
+**The app asks for the passphrase again and says it is wrong.** The passphrase does not
+match the private key. If you changed the key's passphrase on a computer, the app
+needs the new one. If caching is on, it asks again and replaces the old value.
-Text.
+**`Failed to import PGP key`.** The file is not a key the app can use. Keys without an
+encryption subkey are rejected, because they could not decrypt anything. Check that you
+exported the **private** key, with `gpg --armor --export-secret-keys`.
+
+**An entry will not open and no key matches.** The store is encrypted for a key that is
+not imported. Compare **Store recipients** on the import screen, or the `.gpg-id` file,
+with the keys in **Key manager**. A public key alone cannot decrypt: import the private
+one.
+
+**The key is on a smartcard.** GnuPG exports a stub for such a key, with no secret
+material in it. The app cannot decrypt with that. It needs the real private key.
+
+**`Found .gpg-id, but it contains an invalid key ID, fingerprint or user ID`.** The
+`.gpg-id` file has something the app does not understand. Check it on a computer: one
+key ID, fingerprint or address per line.
+
+## Connecting
+
+**`The provided repository URL is not valid`.** See the address forms in
+[Connect the app]({{< relref "/hardenedpass/getting-started/connect" >}}).
+
+**`Wrong password` or `Wrong passphrase`.** For a repository password or an SSH key's
+passphrase. Many hosting services want an access token rather than the account password.
+
+**`Selected file does not appear to be an SSH private key`.** You picked the public key,
+or a file in another format. Choose the file without `.pub`.
+
+**The sync fails after the server was reinstalled or moved.** Its host key changed. If
+you are sure why, use **Clear saved host key** on the repository screen, under **Edit
+Git server settings**. If you are not, treat it as an attack until you know better.
+
+**SSH login is refused.** Check that the public key is on the server, for the right
+account. **View generated public SSH key** shows it for a key made on the phone.
+
+## Syncing
+
+**`Push was rejected by remote, run pull before pushing again`.** The server has commits
+you do not have. Use **Synchronize repository**, which pulls and then pushes.
+
+**`Pull has failed, you're in a detached head`.** A conflict stopped the rebase.
+[Sync]({{< relref "/hardenedpass/using/sync" >}}) has the steps.
+
+**`Merge has failed, you're in a conflicting state`.** The same conflict, with **Rebase
+on pull** off. The way out is the hard reset in
+[Sync]({{< relref "/hardenedpass/using/sync" >}}), after saving anything you need.
+
+**`The repository must be cloned before syncing changes`.** The store on the phone has no
+remote. Set one under **Edit Git server settings** and clone it.
+
+## Autofill
+
+**No suggestions appear.** Check that HardenedPass is the selected autofill service in
+Android's settings, and that the browser is on the list in
+[Autofill]({{< relref "/hardenedpass/using/autofill" >}}).
+
+**Only the password gets filled.** That is the browser's support level, as with Vanadium.
+
+**`This app is currently not supported`.** The app cannot save from there. You can still
+add the entry by hand.
+
+**Nothing happens after tapping Save.** Android 14 and later hold back background
+windows, and the app has a workaround: update to the latest version.
+
+## Still stuck?
+
+Open an issue on the [tracker](https://github.com/danixland/HardenedPass/issues). Say
+which version you run and what you did. Never paste passwords, keys or real entry names.