Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vpksoft/passwordkeeper

A software to store login information into an encrypted file.
https://github.com/vpksoft/passwordkeeper

2fa 2fa-security credential-manager credential-storage cross-platform react rust tauri-app typescript vite

Last synced: 19 days ago
JSON representation

A software to store login information into an encrypted file.

Awesome Lists containing this project

README

        

# PasswordKeeper
A software to store login information into an encrypted file.

[![Lint & Test deployment package](https://github.com/VPKSoft/PasswordKeeper/actions/workflows/main-lint-test-deploy.yml/badge.svg)](https://github.com/VPKSoft/PasswordKeeper/actions/workflows/main-lint-test-deploy.yml) [![Crowdin](https://badges.crowdin.net/passwordkeeper/localized.svg)](https://crowdin.com/project/passwordkeeper)
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper?ref=badge_shield)

![image](https://github.com/VPKSoft/PasswordKeeper/assets/40712699/d9f97198-c4fd-44f1-a1d6-cdb2735f748e)

For instructions, see: [Help](https://vpksoft.github.io/PasswordKeeper/).

# The encryption
The encryption algorithm used is [AES-GCM-SIV](https://en.wikipedia.org/wiki/AES-GCM-SIV) with [Argon2](https://en.wikipedia.org/wiki/Argon2) / Argon2id key derivation function.

# The file structure
|Entry|Length|
|---|---|
|Random [salt](https://en.wikipedia.org/wiki/Salt_(cryptography))|32 bytes|
|Random [nonce](https://en.wikipedia.org/wiki/Cryptographic_nonce)|12 bytes|
|The length of the encrypted data|8 bytes (64-bit) unsigned integer|
|The encrypted data|N bytes|

## The data structure within the file
The login information data is stored as an [JSON](https://en.wikipedia.org/wiki/JSON) array to the with the following [TypeScript](https://www.typescriptlang.org) type definition:
```typescript
/**
* The entry / category data format for the program.
*/
export type DataEntry = {
/** The name of the entry or a category. */
name: string;
/** The optional domain for the login credentials. */
domain?: string | undefined;
/** The host address where the login information is to be used. */
address?: string | undefined;
/** The user name for the credentials. */
userName?: string | undefined;
/** The password for the login credentials. */
password?: string | undefined;
/** Additional notes for the login information. */
notes?: string | undefined;
/** An unique identifier for an entry or a category. */
id: number;
/** In case of an entry the parent category for the entry. Otherwise -1. */
parentId: number;
/** The key <--> URL for OTP authentication. */
otpAuthKey?: string;
/** A value indicating whether to use markdown for the {@link DataEntry.notes} rendering. */
useMarkdown?: boolean;
};
```

# Install
## Windows
Download the [PasswordKeeper_X.Y.Z_x64-setup.exe](https://github.com/VPKSoft/PasswordKeeper/releases/), ignore the warnings and install the software.
If the installation fails you may need to install webview2, See: https://developer.microsoft.com/en-us/microsoft-edge/webview2/#download-section

## Linux
1. Download the [password-keeper_X.Y.Z_amd64.AppImage](https://github.com/VPKSoft/PasswordKeeper/releases/)
2. Run `chmod +x password-keeper_X.Y.Z_amd64.AppImage` on the file.
3. Run the password-keeper_X.Y.Z_amd64.AppImage file.

## macOS
1. Download the [PasswordKeeper_x64.app.tar.gz](https://github.com/VPKSoft/PasswordKeeper/releases/)
2. Extract the `PasswordKeeper.app` from the file
3. Run `xattr -c PasswordKeeper.app` on the file.
4. Run the `PasswordKeeper.app`

# Getting started with the source code
* Install [rust](https://www.rust-lang.org) & cargo.
* Install [Node.js](https://nodejs.org)
* Run the init script, `init.ps1` for Windows, `init.sh` for Linux & Mac.
For linux Mint I needed to install the following packages for the rust build:
```sh
sudo apt-get install webkit2gtk-4.0
sudo apt-get install libjavascriptcoregtk4.0
sudo apt-get install libsoup2.4
```
* Install [VS Code](https://code.visualstudio.com)
* Add plugins to [VS Code](https://code.visualstudio.com)
- [CodeLLDB](https://marketplace.visualstudio.com/items?itemName=vadimcn.vscode-lldb)
- [rust-analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer)
- [Tauri](https://marketplace.visualstudio.com/items?itemName=tauri-apps.tauri-vscode)

* Debug with F5

# Why this software
I know there are a million password managers available already. The current solution I'm using is [VeraCrypt](https://www.veracrypt.fr/code/VeraCrypt/) virtual disk with an encrypted [LibreOffice](https://www.libreoffice.org) Calc file inside the disk. This is challenging to open for a quick review and I always forget to close the file or unmount the virtual disk - feel free to use the tip though 😄
Well, that was background noise - the reasons:
1. Keeping it simple, see: [The KISS Principle](https://en.wikipedia.org/wiki/KISS_principle)
2. I want to learn [rust](https://www.rust-lang.org)
3. To have the code base working fully cross platform
4. Have a simple structure with strong encryption for the file the data is stored into.
5. Programming is a nice hobby 🤓

# Thanks to
[Tauri](https://tauri.app), [Node.js](https://nodejs.org), [React](https://react.dev), [Font Awesome *Free*](https://fontawesome.com/search?o=r&m=free), [Weblate](https://weblate.org), [i18next](https://www.i18next.com), [React Countdown Circle Timer](https://www.npmjs.com/package/react-countdown-circle-timer), [Html5-QRCode](https://www.npmjs.com/package/html5-qrcode), [totp-rs](https://crates.io/crates/totp-rs), [qrcode](https://www.npmjs.com/package/qrcode), [google-authenticator-exporter](https://github.com/krissrex/google-authenticator-exporter), [protobufjs](https://www.npmjs.com/package/protobufjs), [html-react-parser](https://www.npmjs.com/package/html-react-parser), [DOMPurify](https://www.npmjs.com/package/dompurify), [Marked](https://www.npmjs.com/package/marked), [Jodit](https://github.com/xdan/jodit) and [React Jodit WYSIWYG Editor](https://github.com/jodit/jodit-react)

* *UX Powered by* **[Ant Design](https://ant.design)**

![image](https://github.com/VPKSoft/PasswordKeeper/assets/40712699/7f9c19fe-4b38-499a-9cfe-f3cba79347b8)

* Localization powered by [Crowdin](https://crowdin.com) (for Open-source project)

## License
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2FVPKSoft%2FPasswordKeeper?ref=badge_large)