{"id":13548424,"url":"https://github.com/HR/Crypter","last_synced_at":"2025-04-02T21:31:33.745Z","repository":{"id":54931341,"uuid":"56356468","full_name":"HR/Crypter","owner":"HR","description":"🔓✨🔒 An innovative, convenient and secure encryption app","archived":false,"fork":false,"pushed_at":"2021-02-19T13:47:51.000Z","size":13549,"stargazers_count":456,"open_issues_count":3,"forks_count":70,"subscribers_count":23,"default_branch":"master","last_synced_at":"2024-08-01T12:16:24.204Z","etag":null,"topics":["client","cross-platform","crypter","crypto","data-encryption","decryption","desktop","electron","encyption","linux","macos","masterpass","masterpass-credentials","masterpass-reuse","portability","security","windows"],"latest_commit_sha":null,"homepage":"https://git.io/Crypter","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HR.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null}},"created_at":"2016-04-16T00:03:38.000Z","updated_at":"2024-08-01T09:38:01.000Z","dependencies_parsed_at":"2022-08-14T06:50:49.750Z","dependency_job_id":null,"html_url":"https://github.com/HR/Crypter","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HR%2FCrypter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HR%2FCrypter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HR%2FCrypter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HR%2FCrypter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HR","download_url":"https://codeload.github.com/HR/Crypter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222878918,"owners_count":17051810,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["client","cross-platform","crypter","crypto","data-encryption","decryption","desktop","electron","encyption","linux","macos","masterpass","masterpass-credentials","masterpass-reuse","portability","security","windows"],"created_at":"2024-08-01T12:01:10.170Z","updated_at":"2024-11-03T17:31:04.944Z","avatar_url":"https://github.com/HR.png","language":"JavaScript","readme":"\u003ch1 align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/HR/Crypter\"\u003e\u003cimg src=\"./build/icons/256x256.png\" alt=\"Crypter\" width=\"180\" style= \"margin-bottom: 1rem\"\u003e\u003c/a\u003e\n  \u003cbr\u003e\n  Crypter\n  \u003cbr\u003e\n  \u003cbr\u003e\n\u003c/h1\u003e\n\n\u003ch4 align=\"center\"\u003eAn innovative, convenient and secure crypto app.\u003c/h4\u003e\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/HR/Crypter/releases/latest\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/Download-4.0-orange.svg\"\n            alt=\"Download latest release\" style= \"margin-bottom: 0.5rem\" height=\"25px\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"http://standardjs.com/\"\u003e\n        \u003cimg src=\"https://img.shields.io/badge/code%20style-standard-brightgreen.svg\"\n             alt=\"Standard JS Code Style\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://travis-ci.org/HR/Crypter\"\u003e\n        \u003cimg src=\"https://travis-ci.org/HR/Crypter.svg?branch=master\"\n             alt=\"Travis Build\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://ci.appveyor.com/project/HR/crypter\"\u003e\n        \u003cimg src=\"https://ci.appveyor.com/api/projects/status/4pa8cnlb1qnyj1xd/branch/master?svg=true\"\n             alt=\"AppVeyor Build\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://coveralls.io/github/HR/Crypter?branch=master\"\u003e\n        \u003cimg src=\"https://coveralls.io/repos/github/HR/Crypter/badge.svg?branch=master\"\n             alt=\"Test Coverage\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://codeclimate.com/github/HR/Crypter?branch=master\"\u003e\n        \u003cimg src=\"https://codeclimate.com/github/HR/Crypter/badges/gpa.svg\"\n             alt=\"CodeClimate GPA\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/HR/Crypter/releases/latest\"\u003e\n        \u003cimg src=\"https://img.shields.io/github/downloads/hr/crypter/total\"\n             alt=\"GitHub all releases downloads\" \u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\u003cbr\u003e\n\n\u003e Encrypt unlimited bits. Remember only a bit.\n\n**Crypter** is a cross-platform crypto app that makes encryption and decryption\nconvenient while still upholding strong security. It tackles one of the weakest\nlinks in most security systems today - weak passwords. It simplifies secure\npassword generation and management and requires you to only remember one bit -\nyour MasterPass.\n\n[Crypter v4.0](https://github.com/HR/Crypter/releases/tag/v4.0.0) is a crypto\napp that can decrypt and encrypt any arbitrary data this includes files and\nfolders. This version has been released and fully tested for macOS (OSX), Linux\n(for all distros via [AppImage](http://appimage.org/)) and Windows (32 \u0026 64\nbit). All core modules (modules that provide the core functionality) are fully\ntested.\n\n[Crypter v5.0](https://github.com/HR/Crypter/milestone/4) will save your MasterPass\nin your OS's Keychain so you won't have to enter it every time you open the app.\nTo help speed up the development please send a PR for what's left do https://github.com/HR/Crypter/milestone/4\n\nPlease open an issue if you have any suggestions and add improvements via PRs!\n\nAlso checkout [Ciphora](https://github.com/HR/ciphora) (https://github.com/HR/ciphora)\na decentralized end-to-end encrypted messaging app.\n\nLink to this README: https://git.io/Crypter.info\n\n---\n\n# Contents\n\n\u003c!-- TOC depthFrom:2 depthTo:6 withLinks:1 updateOnSave:1 orderedList:0 --\u003e\n\n- [Installation](#installation)\n- [Screens](#screens)\n- [Crypto](#crypto)\n  - [Encryption process](#encryption-process)\n  - [Decryption process](#decryption-process)\n  - [Public credentials](#public-credentials)\n- [CRYPTO file](#crypto-file)\n  - [Format](#format)\n  - [Reusing the same MasterPass](#reusing-the-same-masterpass)\n  - [Achieving portability and same MasterPass reuse](#achieving-portability-and-same-masterpass-reuse)\n- [Security](#security)\n  - [Security-first practice](#security-first-practice)\n  - [MasterPass](#masterpass)\n  - [MasterPassKey](#masterpasskey)\n- [FAQs](#faqs)\n  - [How do I encrypt a file or folder?](#how-do-i-encrypt-a-file-or-folder)\n  - [How do I decrypt a CRYPTO file?](#how-do-i-decrypt-a-crypto-file)\n  - [How do I encrypt multiple files?](#how-do-i-encrypt-multiple-files)\n  - [Why am I getting the \"Corrupted Crypter file or trying to decrypt on a different machine.\" error?](#why-am-i-getting-the-corrupted-crypter-file-or-trying-to-decrypt-on-a-different-machine-error)\n  - [Why can't I decrypt a CRYPTO file on a different machine with the same MasterPass?](#why-cant-i-decrypt-a-crypto-file-on-a-different-machine-with-the-same-masterpass)\n  - [Why can't I decrypt a CRYPTO file with the same MasterPass?](#why-cant-i-decrypt-a-crypto-file-with-the-same-masterpass)\n  - [Where are my encrypted/decrypted files/folders placed?](#where-are-my-encrypteddecrypted-filesfolders-placed)\n  - [How can I access Crypter's preferences?](#how-can-i-access-crypters-preferences)\n  - [How can I reset my MasterPass?](#how-can-i-reset-my-masterpass)\n  - [What is a valid MasterPass?](#what-is-a-valid-masterpass)\n  - [What are MasterPass credentials?](#what-are-masterpass-credentials)\n  - [How can I export my MasterPass credentials?](#how-can-i-export-my-masterpass-credentials)\n  - [How can I import my MasterPass credentials?](#how-can-i-import-my-masterpass-credentials)\n- [Development](#development)\n  - [Configurations](#configurations)\n  - [Install (dependencies)](#install-dependencies)\n  - [Run](#run)\n  - [Test](#test)\n  - [Build](#build)\n- [License](#license)\n\n## \u003c!-- /TOC --\u003e\n\n## Installation\n\nAll prebuilt binaries for all major platforms are available under\n[releases](https://github.com/HR/Crypter/releases/latest).\n\nCrypter is also on [Homebrew Cask](https://formulae.brew.sh/cask/crypter) for\nmacOS. So to install it, simply run the following command in the Terminal:\n\n```bash\n$ brew install --cask crypter@4.0.0\n```\n\n\u003cbr/\u003e\n\n## Screens\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"/.github/Welcome_screen.png?raw=true\" alt=\"Welcome screen\" width=\"100%\"\u003e\n  \u003cimg src=\"/.github/Crypter_main_screen.png?raw=true\" alt=\"Crypter screen\" width=\"40%\"\u003e\n  \u003cimg src=\"/.github/MasterPass_screen.png?raw=true\" alt=\"MasterPass screen\" width=\"40%\"\u003e\n  \u003cimg src=\"/.github/Settings_screen.png?raw=true\" alt=\"Settings screen\" width=\"85%\"\u003e\n\u003c/p\u003e\n\n\u003cbr/\u003e\n\n## Crypto\n\n\u003e One key to derive them all!\n\nCrypter derives a MasterPassKey from the MasterPass obtained at setup by using\nthe PBKDF2 key derivation algorithm (see below for the specification). It\nthen uses PBKDF2 to derive a number of encryption keys from the MasterPassKey\nthat can be used for the encryption of files. This method allows for the\ngeneration of very secure encryption keys for data encryption. Moreover, by\npublicly storing the credentials used to derive the MasterPassKey and the salts\nused to derive the encryption keys, you are able to produce the encryption keys\nat will and without needing to store them securely. Your MasterPass is the only\nthing that you need to remember.\n\nCrypter never directly encrypts anything with your MasterPass. Instead, it\nderives a MasterPassKey from it, which it then uses to derive the\nencryption key used to encrypt your file. Every time a file is decrypted,\nthe encryption key is re-derived from the MasterPassKey. Every time you set the\nMasterPass through the setup or reset it through Verify MasterPass, the\nMasterPassKey is derived from the MasterPass using a newly generated set of\n(random) credentials. These credentials are used to re-derive the MasterPassKey\nevery time that Crypter is executed (i.e. the app is launched).\n\nAuthentication with the AES-256-GCM symmetric block cipher is used by default.\nThis ensures that data integrity is verified on decryption and allows the app\nto detect tampering or data corruption.\n\nThe following are the crypto defaults and can be found under `app/config.js`:\n\n```js\n// Crypto defaults\n{\n  ITERATIONS: 50000, // file encryption key derivation iterations\n  KEYLENGTH: 32, // encryption key length\n  IVLENGTH: 12, // initialisation vector length\n  ALGORITHM: 'aes-256-gcm', // encryption algorithm\n  DIGEST: 'sha256', // digest function\n  HASH_ALG: 'sha256', // hashing function\n  MPK_ITERATIONS: 100000 // MasterPassKey derivation iterations\n}\n```\n\n### Encryption process\n\nWhen encrypting a file, Crypter first creates a temporary hidden directory,\nnamely '.crypting'. It then encrypts the user-selected file with the crypto\ndefaults and flushes the encrypted data to a file in the directory, namely\n'data'. If it is a directory then it is compressed first (tar). It also writes\nthe public credentials to a file within the same directory, namely 'creds'.\nFinally, Crypter compresses the directory to a tar archive with the name of the\nuser-selected file and the '.crypto' extension appended to it.\n\n### Decryption process\n\nThe decryption process is essentially the inverse of the encryption process.\nDuring decryption, Crypter creates a temporary hidden directory named\n'.decrypting'. It then reads the credentials from the creds file and decrypts\nthe data file into the original file or directory (after decompressing it) with\nits original name and extension, as deduced from the CRYPTO file name (e.g. the\nextension for \"file.txt.crypto\" would be \".txt\").\n\n### Public credentials\n\nCertain credentials are required to decrypt the encrypted data. These are\nneeded to reconstruct the particular encryption key and to verify data integrity.\nThese can be stored publicly without compromising security since it is fairly\nimpossible (by current standards) to reconstruct the encryption key without the\nMasterPass and its credentials. These credentials are stored in the creds file of\nthe [CRYPTO file](#crypto-file) archive (as delineated above) in the following\nformat:\n\n#### v1\n\n```\nCrypter#iv#authTag#salt#dir\n```\n\n#### v2\n\nUses JSON\n\n```json\n{\n  \"type\": \"CRYPTO\",\n  \"iv\": \"...\",\n  \"authTag\": \"...\",\n  \"salt\": \"...\",\n  \"isDir\": true || false\n}\n```\n\nThe `dir` part is only included for directories\n\u003cbr/\u003e\n\n## CRYPTO file\n\n### Format\n\nA CRYPTO file is the product of the Crypter encryption process. This file\nstores both the encrypted version of the user file and the public credentials\nneeded to encrypt and decrypt it. It has a `.crypto` file extension, which\nis appended to the full file name (including the extension) of the file\noriginally encrypted. The file itself is a tar archive in the following\nstructure:\n\n```c\nsomeFile.crypto\n├── data // the encrypted version of the user selected file\n└── creds // the public credentials used to encrypt it\n```\n\n### Reusing the same MasterPass\n\nIf you attempt to decrypt a CRYPTO file by _resetting to a specific\nMasterPass_ or _setting an identical MasterPass on a different machine_,\nyou will likely encounter the following error:\n\n```\nERROR: Unsupported state or unable to authenticate data\n```\n\nThis issue occurs because the MasterPassKey that was originally used to\nderive the encryption key on is **not the same** as the MasterPassKey\nderived with the reused MasterPass. Since Crypter uses randomness to\ngenerate secure credentials, this second set of credentials will be quite\n**different** from the original set. As a result, the derived encryption key is\nincorrect and yields this error.\n\nSee [Achieving portability and same MasterPass reuse](#achieving-portability-and-same-masterpass-reuse)\nfor instructions on how to successfully reuse the same MasterPass.\n\n### Achieving portability and same MasterPass reuse\n\nTo achieve portability on Crypter, the set of MasterPassKey credentials\nneed to be exported from Crypter on the source machine\u003csup\u003e[1](#source)\u003c/sup\u003e\nand imported into Crypter on the target machine\u003csup\u003e[2](#target)\u003c/sup\u003e.\n\nThis can be achieved in two simple steps:\n\n\u003col\u003e\n  \u003cli\u003e\u003ca href=\"#how-can-i-export-my-masterpass-credentials\"\u003eExport MasterPass credentials on the source machine\u003c/a\u003e\u003csup\u003e\u003ca href=\"#source\"\u003e1\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#how-can-i-import-my-masterpass-credentials\"\u003eImport MasterPass credentials on the target machine\u003c/a\u003e\u003csup\u003e\u003ca href=\"#target\"\u003e2\u003c/a\u003e\u003c/sup\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\nPlease refer to the FAQs for instructions on how to perform the above steps.\n\n\u003chr\u003e\n\n\u003ca name=\"source\"\u003e\u003c/a\u003e [1] The machine where the CRYPTO file was initially\nencrypted.\n\n\u003ca name=\"target\"\u003e\u003c/a\u003e [2] The machine where you wish to decrypt the CRYPTO\nfile.\n\n\u003cbr/\u003e\n\n## Security\n\n### Security-first practice\n\nCrypter follows a security-first practice. This means that security is its\nhighest priority and first consideration. Thus, while Crypter seeks\nto make encryption more convenient, it always defers to maintaining\na high level of security.\n\n### MasterPass\n\nCrypter never stores your MasterPass in memory or on the filesystem. This\nsubstantially improves the security of your MasterPass. You are only asked to\nenter the MasterPass when you first set, reset or verify it. Whenever you enter\nyour MasterPass, Crypter derives a MasterPassKey (using a set of generated\ncredentials) and then immediately discards the MasterPass. The MasterPassKey is\nthen securely stored in memory and used to derive the encryption keys. Since\nthese credentials are derived via a one-way function, they cannot be used in\nany way to derive the MasterPass.\n\n### MasterPassKey\n\nCrypter uses a WeakMap to store the MasterPassKey inside the MasterPassKey class\nusing a closure function. This makes the MasterPassKey data held in the object\n(externally) inaccessible, consequently increasing the protection of the\nMasterPassKey. The MasterPassKey is never flushed to the filesystem and is always\nstored in (main) memory. Since JS does not give control over or allow such a\nlow-level operation as wiping memory, the program relies on the garbage\ncollection and volatility of the main memory for the permanent erasure of the\nMasterPassKey stored in memory.\n\nA decent number of iterations (see the above specifications) are used in the\nderivation of the MasterPassKey to mitigate brute-force attacks. A good\namount of iterations are also used during the derivation of the encryption\nkeys from the MasterPassKey. Consequently, performance and speed are not\nsignificantly compromised. For critical applications, you may choose to\nselect 10,000,000 iterations instead of the default number\n(in app/core/crypto.js). Please refer to\nhttp://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf for\nmore information.\n\nCrypter generates a new set of random credentials for deriving the MasterPassKey\nevery time the MasterPass is set (at setup) or reset. Crypter employs randomness\nto mitigate brute-force attacks and thus drastically improve security.\n\n\u003cbr/\u003e\n\n## FAQs\n\n### How do I encrypt a file or folder?\n\nIf you haven't already, walk through the setup and set your MasterPass.\nTo encrypt a file or folder, first launch Crypter and verify your MasterPass.\nAfter doing so successfully, you will see the main Crypter window with an orange\narea. Here, you can simply drag-and-drop or click to select the file/folder you\nwish to encrypt. Once Crypter is done encrypting your file/folder, it will show\nyou the encryption information (i.e. the encryption key and the path of the\nencrypted file) in a new window. To encrypt another file/folder simply click the\nback arrow at the bottom left and start-over ;)\n\n### How do I decrypt a CRYPTO file?\n\n\u003e The following instructions assume that the CRYPTO file that you wish to\n\u003e decrypt is being used with the same MasterPass that you set at setup and also\n\u003e that you have not reset it since that time. If this is not the case, please refer\n\u003e to [Reusing the same MasterPass](#reusing-the-same-masterpass).\n\nTo decrypt a CRYPTO file, first launch Crypter and verify your MasterPass. After\ndoing so successfully, you will see the main Crypter window with an orange area.\nHere, you can simply drag-and-drop or click to select the CRYPTO file that you\nwish to decrypt. After a few seconds, the process will complete and you will see\nsome information about the file and its original encryption in a new window. By\ndefault, the decrypted file has the same name as the name of the original file\n(i.e. the encrypted file name without the `.crypto` at the end).\n\n### How do I encrypt multiple files?\n\nCrypter can encrypt an entire folder so you can put them in a folder or,\nalternatively, compress them into an archive (like a `.zip`) and then just pass\nit to Crypter ;)\n\n### Why am I getting the \"Corrupted Crypter file or trying to decrypt on a different machine.\" error?\n\nThis error means that either your Crypter file (i.e. the `data` file) is\ncorrupt/tempered, that you are on a different machine than the one originally\nused to encrypt the file or that you have previously reset your MasterPass.\nFor the last two cases, please refer to\n[Reusing the same MasterPass](#reusing-the-same-masterpass) and\n[Achieving portability and same MasterPass reuse](#achieving-portability-and-same-masterpass-reuse).\n\n### Why can't I decrypt a CRYPTO file on a different machine with the same MasterPass?\n\nPlease refer to [Reusing the same MasterPass](#reusing-the-same-masterpass) and\n[Achieving portability and same MasterPass reuse](#achieving-portability-and-same-masterpass-reuse)\n\n### Why can't I decrypt a CRYPTO file with the same MasterPass?\n\nPlease refer to [Reusing the same MasterPass](#reusing-the-same-masterpass) and\n[Achieving portability and same MasterPass reuse](#achieving-portability-and-same-masterpass-reuse)\n\n### Where are my encrypted/decrypted files/folders placed?\n\nBy default, every source file that you encrypt/decrypt gets encrypted/decrypted\nto the same directory where the source file is located.\n\n### How can I access Crypter's preferences?\n\nYou can access Crypter's preferences by either clicking on the cog icon in the\nmain Crypter window or by going to `Crypter \u003e Preferences...` from the menu.\n\n### How can I reset my MasterPass?\n\nYou can reset your MasterPass by clicking on the \"Forgot it\" link in the Verify\nMasterPass window. This takes you to a new screen where you can enter a new, valid\nMasterPass. Once you've entered it, click the 'Reset' button and you'll be sent\nback to the verify screen where you can verify your new MasterPass.\n\n### What is a valid MasterPass?\n\nCrypter will not allow you to set an invalid MasterPass. A MasterPass is valid\nwhen it adheres to the following rules:\n\n- It is at least 8 characters long\n- It has at least one uppercase alphabetic character (A-Z)\n- It has at least one lowercase alphabetic character (a-z)\n- It has at least one numeric character (0-9)\n- It has at least one special character (\\$@!%\\*#?\u0026)\n\nThese rules are enforced via the following regular expression:\n\n```javascript\n/^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@!%*#?\u0026]).{8,}$/;\n```\n\n### What are MasterPass credentials?\n\nMasterPass credentials are a set of values that are required to derive the\nMasterPassKey from the MasterPass. These values have a pseudo-random element and\nare cryptographically linked. Every MasterPass that is set or reset with Crypter\nhas a unique set of MasterPass credentials. These yield a distinct MasterPassKey,\neven when a MasterPass is reused.\n\n### How can I export my MasterPass credentials?\n\nTo export your MasterPass credentials, you can first open Crypter's\npreferences (see above). From this screen, click on the \"Export\" button. A\ndialog will appear from which you can select the folder where you wish to export\nthe credentials. A success message will confirm a successful export. The\nexported MasterPass credentials file is always named `credentials.crypter`.\n\n### How can I import my MasterPass credentials?\n\nTo import a set of MasterPass credentials, you can first open Crypter's\npreferences (see above). From this screen, click on the \"Import\" button. A\ndialog will appear from which you can locate your `credentials.crypter` file.\nAfter you select it, a success message will confirm a successful import and\nyou will have to verify the MasterPass for the credentials.\n\nNOTE: while Crypter does not require the MasterPass credentials file to be\nexactly named `credentials.crypter`, it does require the file's contents to\nbe unaltered from when it was exported from Crypter. If it has been altered,\nthe import may fail.\n\n\u003cbr/\u003e\n\n## Development\n\nCrypter is developed in the \"dev\" branch, which may be unstable at times.\nThis branch should typically be used for pull requests.\n\nThe \"master\" branch will always be kept stable.\n\n### Configurations\n\nAll major configurations that you can apply are found under `app/config.js`.\nThis includes changes to certain cryptography settings. Please be advised\nthat altering these may break functionality and\n[portability](#achieving-portability-and-same-masterpass-reuse).\n\n### Install (dependencies)\n\nTo install all dependencies, run:\n\n```\n$ yarn install\n```\n\n### Run\n\nSince Crypter uses gulp, please install it globally if you have not already\ndone so. To start Crypter, run:\n\n```\n$ gulp\n```\n\n### Test\n\nCrypter primarily uses mocha and chai for testing. Since the project uses a\nlot of JS ES6 syntax, babel is also used as a transpiler. To run all the tests,\nexecute:\n\n```\n$ yarn test\n```\n\nCrypter uses istanbul for coverage. To run test coverage, execute:\n\n```\n$ yarn run coverage\n```\n\n### Build\n\nCrypter's binaries (available under releases) have been built using\nElectron. Since Crypter uses electron-builder to build binaries,\nyou must install it globally:\n\n```\n$ npm install electron-builder@next -g\n```\n\nTo build the app for **macOS**, run:\n\n```\n$ yarn run build:mac\n```\n\nTo build the app for **Linux**, run:\n\n```\n$ sudo apt-get install --no-install-recommends -y icnsutils graphicsmagick xz-utils\n$ yarn run build:lin\n```\n\nTo build the app for **Windows** x84 and/or x64, run:\n\n```\n$ yarn run build:win\n```\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) Habib Rehman (https://git.io/HR)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished todo so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n","funding_links":[],"categories":["JavaScript","Applications","Apps"],"sub_categories":["Utilities","🛠️ Utilities (79)","Open Source"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHR%2FCrypter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FHR%2FCrypter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FHR%2FCrypter/lists"}