{"id":13419923,"url":"https://github.com/evpo/EncryptPad","last_synced_at":"2025-03-15T06:30:56.174Z","repository":{"id":41067000,"uuid":"52200408","full_name":"evpo/EncryptPad","owner":"evpo","description":"Minimalist secure text editor and binary encryptor that implements RFC 4880 Open PGP format: symmetrically encrypted, compressed and integrity protected. The editor can protect files with passwords, key files or both.","archived":false,"fork":false,"pushed_at":"2024-04-08T10:27:58.000Z","size":32522,"stargazers_count":417,"open_issues_count":19,"forks_count":63,"subscribers_count":33,"default_branch":"master","last_synced_at":"2024-04-08T13:15:31.770Z","etag":null,"topics":["c-plus-plus","cryptography","encryption","openpgp","security","text-editor","utility"],"latest_commit_sha":null,"homepage":"https://evpo.net/encryptpad","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/evpo.png","metadata":{"files":{"readme":"README.htm","changelog":"CHANGES.htm","contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2016-02-21T10:00:03.000Z","updated_at":"2024-04-15T12:32:25.173Z","dependencies_parsed_at":"2023-02-15T17:46:25.357Z","dependency_job_id":"43d7578b-76aa-4c3a-ae64-7138df817ede","html_url":"https://github.com/evpo/EncryptPad","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evpo%2FEncryptPad","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evpo%2FEncryptPad/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evpo%2FEncryptPad/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/evpo%2FEncryptPad/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/evpo","download_url":"https://codeload.github.com/evpo/EncryptPad/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":221548143,"owners_count":16840980,"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":["c-plus-plus","cryptography","encryption","openpgp","security","text-editor","utility"],"created_at":"2024-07-30T22:01:22.911Z","updated_at":"2025-03-15T06:30:56.161Z","avatar_url":"https://github.com/evpo.png","language":"C++","funding_links":[],"categories":["TODO scan for Android support in followings"],"sub_categories":[],"readme":"\u003cp\u003eEncryptPad is an application for viewing and editing symmetrically\nencrypted text. Using a simple and convenient graphical and command line\ninterface, EncryptPad provides a tool for encrypting and decrypting\nbinary files on disk while offering effective measures for protecting\ninformation, and it uses the most widely chosen quality file format\n\u003cstrong\u003eOpenPGP\u003c/strong\u003e \u003ca\nhref=\"https://tools.ietf.org/html/rfc4880\"\u003eRFC 4880\u003c/a\u003e. Unlike other\nOpenPGP software which main purpose is asymmetric encryption, the\nprimary focus of EncryptPad is symmetric encryption.\u003c/p\u003e\n\u003ch2 id=\"table-of-contents\"\u003eTable of Contents\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#supported-platforms\"\u003eSupported platforms\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#why-use-encryptpad\"\u003eWhy use EncryptPad?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#when-encryptpad\"\u003eWhen do I need EncryptPad?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#when-can-i-not\"\u003eWhen can I not use EncryptPad?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#file-types\"\u003eFile types\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#gpg\"\u003eGPG\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#epd\"\u003eEPD\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#feature-support\"\u003eFeature support\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#key-file\"\u003eWhat is an EncryptPad key file?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#epd-file-format\"\u003eEPD file format when encrypting with a\nkey\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#use-curl\"\u003eUse CURL to automatically download keys from a\nremote storage\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#known-weaknesses\"\u003eKnown weaknesses\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#command-line-interface\"\u003eCommand line interface\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#command-line-encryptcli\"\u003eencryptcli\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#command-line-encryptpad\"\u003eencryptpad\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#installing\"\u003eInstalling EncryptPad\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#portable-exe\"\u003ePortable executable\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#install-on-arch\"\u003eArch Linux\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#install-on-ubuntu\"\u003eUbuntu or Linux Mint\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#compile-on-windows\"\u003eCompile EncryptPad on Windows\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#prerequisites\"\u003ePrerequisites\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#steps\"\u003eSteps\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#compile-on-macos\"\u003eCompile EncryptPad on macOS\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#compile-on-linux\"\u003eCompile EncryptPad on Linux\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#build-on-fedora\"\u003eFedora\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-ubuntu\"\u003eUbuntu\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-debian\"\u003eDebian\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-opensuse\"\u003eopenSUSE\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-archlinux\"\u003eArchlinux\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-freebsd\"\u003eFreeBSD\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#build-on-voidlinux\"\u003eVoidLinux\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#portable-mode\"\u003ePortable mode\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#fakevim-mode\"\u003eFakeVim mode\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#fakevim-input-output\"\u003eFakeVim: input and output\ncommands\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#passphrases-in-memory\"\u003eDoes EncryptPad store passphrases\nin the memory to reopen files?\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#acknowledgements\"\u003eAcknowledgements\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#integrity-verification\"\u003eEncryptPad integrity\nverification\u003c/a\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"#openpgp-signing\"\u003eOpenPGP signing and certification\nauthority\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#verification-process\"\u003eStep by step verification\nprocess\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#license\"\u003eLicense\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"#contact\"\u003eContact and feedback\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"features\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"features\"\u003eFeatures\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cstrong\u003eSymmetric\u003c/strong\u003e encryption\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePassphrase\u003c/strong\u003e protection\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKey file\u003c/strong\u003e protection\u003c/li\u003e\n\u003cli\u003eCombination of \u003cstrong\u003epassphrase and key file\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eRandom \u003cstrong\u003ekey file generator\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eKey repository\u003c/strong\u003e in a hidden directory in the user’s\nhome folder\u003c/li\u003e\n\u003cli\u003ePath to a key file can be stored in an encrypted file. If enabled,\n\u003cstrong\u003eyou do not need to specify the key file\u003c/strong\u003e every time you\nopen files.\u003c/li\u003e\n\u003cli\u003eEncryption of \u003cstrong\u003ebinary files\u003c/strong\u003e (images, videos,\narchives etc.)\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eFakeVim\u003c/strong\u003e mode to edit files with a Vim-like user\ninterface\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eRead only\u003c/strong\u003e mode to prevent accidental file\nmodification\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eUTF8\u003c/strong\u003e text encoding\u003c/li\u003e\n\u003cli\u003eWindows/Unix \u003cstrong\u003econfigurable line endings\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eCustomisable \u003cstrong\u003epassphrase generator\u003c/strong\u003e helps create\nstrong random passphrases.\u003c/li\u003e\n\u003cli\u003eFile format compatible with \u003cstrong\u003eOpenPGP\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eIterated and salted S2K\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003ePassphrases are not kept in the memory\u003c/strong\u003e for reuse,\nonly S2K results (\u003ca href=\"#passphrases-in-memory\"\u003emore …\u003c/a\u003e)\u003c/li\u003e\n\u003cli\u003eCipher algorithms: \u003cstrong\u003eTripleDES, CAST5, AES, AES192, AES256,\nCamellia128, Camellia192, Camellia256, Twofish\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eHash algorithms: \u003cstrong\u003eSHA-1, SHA-256, SHA-384, SHA-512,\nSHA-224\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eIntegrity protection: \u003cstrong\u003eSHA-1\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003eCompression: \u003cstrong\u003eZLIB, ZIP, Bzip2\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eASCII armor\u003c/strong\u003e\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eLarge multi-gigabyte files\u003c/strong\u003e are supported\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"supported-platforms\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"supported-platforms\"\u003eSupported platforms\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003eWindows\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eLinux\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eMac OS\u003c/p\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"why-use-encryptpad\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"why-use-encryptpad\"\u003eWhy use EncryptPad?\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eMulti-platform\u003c/strong\u003e codebase: it has been compiled on\nthree popular operating systems and can be adapted to more.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePortable\u003c/strong\u003e: simply copy the executable to a memory\nstick or a network drive and use on all your computers.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eSimple to use\u003c/strong\u003e: EncryptPad is a text editor and\nan encryption tool for binary files but it saves encrypted, compressed\nand integrity protected files.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eOpen source\u003c/strong\u003e with concise codebase: you can read\nthe code or ask somebody you trust to read it for you to ensure that\nthere are no back doors and your information is safe.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eOpenPGP\u003c/strong\u003e file format: you can encrypt a file with\nanother tool (gpg for example) implementing the format and open it with\nEncryptPad and vice versa.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eDouble protection\u003c/strong\u003e: randomly generated key files\nin addition to passphrases.\u003c/p\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"when-encryptpad\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"when-do-i-need-encryptpad\"\u003eWhen do I need EncryptPad?\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003eYou have a file containing sensitive information such as account\nnames, passphrases or IDs. It is stored on an unprotected media or you\ncan’t control who accesses the file, whether it is located on a computer\nat work, a laptop while on the move, a memory stick or a cloud\ndrive.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eYou need to send an encrypted file to somebody with whom you\nprearranged a shared secret (a passphrase or a key file). In this case,\nyou need to exchange the secret personally (not via an accessible\nInternet protocol) for the protected file to be decrypted by the\nrecipient.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eYou store or receive a file and need to ensure that it has not\nbeen tampered with or corrupted during transmission. EncryptPad uses\nSHA-1 hashing algorithm to verify the data’s integrity.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eYou need protection against a brute force attack in case your\nstorage gets in somebody’s hands. EncryptPad allows to generate a key\nand store it separately from encrypted information. The unwanted person\nwould need two secrets to open an encrypted file: the passphrase and the\nkey. Consider this example: you store your encrypted file on a memory\nstick, and protect it with a passphrase. In addition to that, you\nprotect the file with a file key and store the key on computers where\nyou open the file. If the memory stick is lost, the passphrase is not\nenough to decrypt your information. The key file is also needed and it\nis not on the memory stick.\u003c/p\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"when-can-i-not\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"when-can-i-not-use-encryptpad\"\u003eWhen can I not use\nEncryptPad?\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003cp\u003eYou need to send a file to somebody with whom you have\n\u003cstrong\u003enot prearranged a shared secret\u003c/strong\u003e (a passphrase or a key\nfile). In this case, you need asymmetric encryption with public and\nprivate keys. Fortunately, there are many convenient tools suitable for\nthe task.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eYou are on public transport or a common area where\n\u003cstrong\u003esomebody can see your screen\u003c/strong\u003e.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eEncryptPad is not effective on a computer infected with spyware\nor a virus. Do not use it on a \u003cstrong\u003epublic, shared or compromised\ncomputer\u003c/strong\u003e if you do not trust its safety.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eIMPORTANT\u003c/strong\u003e: Before using EncryptPad ensure that\nit is legal in your country to use encryption ciphers that EncryptPad\nprovides. You may find useful information at \u003ca\nhref=\"http://www.cryptolaw.org/\"\u003ecryptolaw.org\u003c/a\u003e.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eIMPORTANT\u003c/strong\u003e: If you forgot your passphrase or lost\na key file, there is nothing that can be done to open your encrypted\ninformation. There are no backdoors in the formats that EncryptPad\nsupports. EncryptPad developers take no responsibility for corrupted or\ninvalid files in accordance with the license.\u003c/p\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"file-types\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"file-types\"\u003eFile types\u003c/h2\u003e\n\u003cp\u003eThe format is determined by an extension of a file. Main extensions\nof encrypted files are GPG and EPD.\u003c/p\u003e\n\u003cdiv id=\"gpg\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"gpg\"\u003eGPG\u003c/h3\u003e\n\u003cp\u003eThis file type conforms to OpenPGP format and it is compatible with\nother OpenPGP tools. Use it if you need to open a file where EncryptPad\nis not available. The format does not support double protection (key\nfile + passphrase). So you need to choose between key file or passphrase\nand cannot use both. In addition, it cannot store file key path in the\nencrypted file. It means that every time you open a file encrypted with\na key file, the application will ask you which key file to use.\u003c/p\u003e\n\u003cdiv id=\"epd\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"epd\"\u003eEPD\u003c/h3\u003e\n\u003cp\u003eEncryptPad specific format. Other OpenPGP software will not be able\nto open it unless the file was only protected with a passphrase. If\npassphrase only protection was used, the file is effectively a GPG file\n(see GPG section above). However, when a key file protection is\ninvolved, it is a GPG file in a \u003ca\nhref=\"https://en.wikipedia.org/wiki/Doom_WAD\"\u003eWAD\u003c/a\u003e container. See the\nfollowing chapter for details.\u003c/p\u003e\n\u003cdiv id=\"feature-support\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"feature-support\"\u003eFeature support\u003c/h3\u003e\n\u003ctable style=\"border: 1px solid black\"\u003e\n\u003ctr\u003e\n\u003cth\u003e\nType\n\u003c/th\u003e\n\u003cth\u003e\nFeature\n\u003c/th\u003e\n\u003cth\u003e\nSupported\n\u003c/th\u003e\n\u003cth\u003e\nKey file path*\n\u003c/th\u003e\n\u003cth\u003e\nOpenPGP compatible\n\u003c/th\u003e\n\u003cth\u003e\nFile format\n\u003c/th\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nGPG\n\u003c/td\u003e\n\u003ctd\u003e\nPassphrase\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nn/a\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nOpenPGP file\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nGPG\n\u003c/td\u003e\n\u003ctd\u003e\nKey file\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nno\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nOpenPGP file\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nGPG\n\u003c/td\u003e\n\u003ctd\u003e\nKey file and passphrase\n\u003c/td\u003e\n\u003ctd\u003e\nno\n\u003c/td\u003e\n\u003ctd\u003e\nn/a\n\u003c/td\u003e\n\u003ctd\u003e\nn/a\n\u003c/td\u003e\n\u003ctd\u003e\nn/a\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nEPD\n\u003c/td\u003e\n\u003ctd\u003e\nPassphrase\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nn/a\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nOpenPGP file\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nEPD\n\u003c/td\u003e\n\u003ctd\u003e\nKey file\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nno\n\u003c/td\u003e\n\u003ctd\u003e\nNested: WAD/OpenPGP\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\nEPD\n\u003c/td\u003e\n\u003ctd\u003e\nKey file and passphrase\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nyes\n\u003c/td\u003e\n\u003ctd\u003e\nno\n\u003c/td\u003e\n\u003ctd\u003e\nNested: OpenPGP/WAD/OpenPGP\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/table\u003e\n\u003cp\u003e* Key file location is persisted in the header of an encrypted file\nso the user does not need to specify it when decrypting.\u003c/p\u003e\n\u003cdiv id=\"key-file\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"what-is-an-encryptpad-key-file\"\u003eWhat is an EncryptPad key\nfile?\u003c/h2\u003e\n\u003cp\u003eIn symmetric encryption the same sequence is used to encrypt and\ndecrypt data. The user or another application usually provides this\nsequence in the form of an entered passphrase or a file. In addition to\nentered passphrases, EncryptPad generates files with random sequences\ncalled “key files”.\u003c/p\u003e\n\u003cp\u003eWhen the user creates a key file, EncryptPad generates a random\nsequence of bytes, asks the user for a passphrase, encrypts the\ngenerated sequence and saves it to a file.\u003c/p\u003e\n\u003cp\u003eThe format of the file is OpenPGP. Other OpenPGP implementations can\nalso create and open EncryptPad key files as below shell commands\ndemonstrate.\u003c/p\u003e\n\u003cp\u003eWhen EncryptPad generates a new key file, it is roughly equivalent to\nthe following \u003ccode\u003egpg2\u003c/code\u003e command.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epwmake 1024 | gpg2 -c --armor --cipher-algo AES256 \u0026gt; ~/.encryptpad/foo.key\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003e\u003ccode\u003epwmake\u003c/code\u003e generates a random sequence, which\n\u003ccode\u003egpg2\u003c/code\u003e in-turn encrypts. It will ask for the passphrase to\nencrypt the sequence.\u003c/p\u003e\n\u003cp\u003eWhen you use this key to encrypt \u003ccode\u003etest3.txt\u003c/code\u003e, the\nequivalent \u003ccode\u003egpg\u003c/code\u003e command is below:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egpg2 --decrypt ~/.encryptpad/foo.key \\\n| gpg2 --passphrase-fd 0 --batch -c --cipher-algo AES256 \\\n-o /tmp/test3.txt.gpg /tmp/test3.txt\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe first \u003ccode\u003egpg2\u003c/code\u003e process decrypts \u003ccode\u003efoo.key\u003c/code\u003e and\ndirects it to descriptor 0 of the second process through a pipe.\n\u003ccode\u003egpg2\u003c/code\u003e reads the sequence from the descriptor with\n\u003ccode\u003e--passphrase-fd 0\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWhen EncryptPad opens the encrypted file protected with\n\u003ccode\u003efoo.key\u003c/code\u003e, the equivalent \u003ccode\u003egpg\u003c/code\u003e commands are:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egpg2 --decrypt ~/.encryptpad/foo.key \\\n| gpg2 --passphrase-fd 0 --batch --decrypt \\\n-o /tmp/test4.txt /tmp/test3.txt.gpg\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eAs you see, other OpenPGP implementations can also use EncryptPad\nkeys.\u003c/p\u003e\n\u003cdiv id=\"epd-file-format\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"epd-file-format-when-encrypting-with-a-key\"\u003eEPD file format when\nencrypting with a key\u003c/h2\u003e\n\u003cp\u003eThere are three different structures a saved file can have depending\non protection mode:\u003c/p\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003ePassphrase only\u003c/strong\u003e (passphrase is used to protect a\nfile but no keys are specified). The file is an ordinary OpenPGP\nfile.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eKey only\u003c/strong\u003e (passphrase is not set but a key file\nis used for protection). The file is a WAD file. \u003ca\nhref=\"https://en.wikipedia.org/wiki/Doom_WAD\"\u003eWAD\u003c/a\u003e is a simple format\nfor combining multiple binary files in one. You can open a WAD file in\n\u003ca href=\"http://slade.mancubus.net/\"\u003eSlade\u003c/a\u003e. It contains two files\ninternally:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eOpenPGP file encrypted with the key\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e__X2_KEY\u003c/code\u003e is a plain text file containing the path to\nthe key if “Persistent key location in the encrypted file” is enabled.\nOtherwise, it has zero length.\u003c/li\u003e\n\u003c/ul\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003e\u003cstrong\u003eProtected with passphrase and key\u003c/strong\u003e. The resulting\nfile is an OpenPGP file containing a WAD file as explained in\n2.\u003c/p\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv id=\"use-curl\"\u003e\n\n\u003c/div\u003e\n\u003ch2\nid=\"use-curl-to-automatically-download-keys-from-a-remote-storage\"\u003eUse\nCURL to automatically download keys from a remote storage\u003c/h2\u003e\n\u003cp\u003eIf \u003cstrong\u003e\u003ca href=\"http://curl.haxx.se/\"\u003eCURL\u003c/a\u003e\u003c/strong\u003e URL is\nspecified in \u003cstrong\u003eKey File Path\u003c/strong\u003e field in the \u003cstrong\u003eSet\nEncryption Key\u003c/strong\u003e dialogue, EncryptPad will attempt to start a\ncurl process to download the key from a remote host. If you want to use\nthis feature, you need to set the path to the CURL executable in the\nEncryptPad settings.\u003c/p\u003e\n\u003cp\u003eConsider this use case scenario: you travel with your laptop and open\nan encrypted file on the laptop. If you protect the file with a\npassphrase and a key and your laptop is lost or stolen, the perpetrator\nwill be able to make a brute force attack on your file because the key\nis also stored on the laptop. To avoid this, EncryptPad takes the\nfollowing steps:\u003c/p\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003eEncrypts the plain text file with the key\u003c/li\u003e\n\u003cli\u003eCopies the encrypted file into a WAD file together with the\nunencrypted HTTPS or SFTP URL to the key file containing authentication\nparameters.\u003c/li\u003e\n\u003cli\u003eEncrypts the WAD file from point 2 with the passphrase.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eIf this file gets into the hands of a wrongdoer, he or she will need\nto brute force the passphrase first to be able to obtain the key URL and\nthe authentication parameters. Since a brute force attack takes a lot of\ntime, the user will be able to remove the key or change the\nauthentication so the previous parameters become obsolete.\u003c/p\u003e\n\u003cdiv id=\"known-weaknesses\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"known-weaknesses\"\u003eKnown weaknesses\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003eEncryptPad stores unencrypted text in memory. If a memory dump is\nautomatically taken after a system or application crash or some of the\nmemory is saved to a swap file, the sensitive information will be\npresent on the disk. Sometimes it is possible to configure an operating\nsystem not to use a dump and swap files. It is a good practice to close\nEncryptPad when not in use.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv id=\"command-line-interface\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"command-line-interface\"\u003eCommand line interface\u003c/h2\u003e\n\u003ch3 id=\"encryptcli\"\u003eencryptcli\u003c/h3\u003e\n\u003cdiv id=\"command-line-encryptcli\"\u003e\n\n\u003c/div\u003e\n\u003cp\u003e\u003cstrong\u003eencryptcli\u003c/strong\u003e is the executable to encrypt / decrypt\nfiles in command line. Run it without arguments to see available\nparameters. Below is an example of encrypting a file with a key:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e# generate a new key and protect it with the passphrase \u0026quot;key\u0026quot;.\n# --key-pwd-fd 0 for reading the key passphrase from descriptor 0\necho -n \u0026quot;key\u0026quot; | encryptcli --generate-key --key-pwd-fd 0 my_key.key\n\n# encrypt plain_text.txt with my_key.key created above.\n# The key passphrase is sent through file descriptor 3\ncat plain_text.txt | encryptcli -e --key-file my_key.key \\\n--key-only --key-pwd-fd 3 -o plain_text.txt.gpg 3\u0026lt; \u0026lt;(echo -n \u0026quot;key\u0026quot;)\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"encryptpad\"\u003eencryptpad\u003c/h3\u003e\n\u003cdiv id=\"command-line-encryptpad\"\u003e\n\n\u003c/div\u003e\n\u003cp\u003e\u003cstrong\u003eencryptpad\u003c/strong\u003e is the GUI executable. It has the command\nline parameters below:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e`--lang` - to enforce the language for the GUI\n\n`--log-file` - specify the log file for diagnostics\n\n`--log-severity` - log severity can be one of the following list: `none`, `fatal`, `error`, `warning`, `info`, `debug`, `verbose`\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"installing\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"installing-encryptpad\"\u003eInstalling EncryptPad\u003c/h2\u003e\n\u003cdiv id=\"portable-exe\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"portable-executable\"\u003ePortable executable\u003c/h3\u003e\n\u003cp\u003ePortable binaries are available for Windows and macOS. They can be\ncopied on a memory stick or placed on a network share.\u003c/p\u003e\n\u003cdiv id=\"install-on-arch\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"arch-linux\"\u003eArch Linux\u003c/h3\u003e\n\u003cp\u003eUse fingerprints to receive gpg keys for EncryptPad and Botan.\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003egpg --recv-key 621DAF6411E1851C4CF9A2E16211EBF1EFBADFBC\ngpg --recv-key 634BFC0CCC426C74389D89310F1CFF71A2813E85\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eInstall the AUR packages below:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca\nhref=\"https://aur.archlinux.org/packages/botan-stable/\"\u003ebotan-stable\u003c/a\u003e\u003csup\u003e\u003csmall\u003eAUR\u003c/small\u003e\u003c/sup\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"https://aur.archlinux.org/packages/encryptpad/\"\u003eencryptpad\u003c/a\u003e\u003csup\u003e\u003csmall\u003eAUR\u003c/small\u003e\u003c/sup\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003ccode\u003epacaur\u003c/code\u003e installs \u003ccode\u003ebotan-stable\u003c/code\u003e automatically\nas \u003ccode\u003eencryptpad\u003c/code\u003e dependency.\u003c/p\u003e\n\u003cdiv id=\"install-on-ubuntu\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"ubuntu-or-linux-mint-via-ppa\"\u003eUbuntu or Linux Mint via PPA\u003c/h3\u003e\n\u003cp\u003eThere are several PPAs on Launchpad built on Canonical servers from\nEncryptPad source files. Use the commands below to install the\npackages:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esudo add-apt-repository ppa:evpo/main\nsudo apt update\nsudo apt install encryptpad encryptcli\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eFor Ubuntu versions before Impish use Alin Andrei’s PPA below:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esudo add-apt-repository ppa:nilarimogard/webupd8\nsudo apt update\nsudo apt install encryptpad encryptcli\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"compile-on-windows\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"compile-encryptpad-on-windows\"\u003eCompile EncryptPad on\nWindows\u003c/h2\u003e\n\u003cdiv id=\"prerequisites\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"prerequisites\"\u003ePrerequisites\u003c/h3\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003e\u003ca href=\"http://www.qt.io/download-open-source/\"\u003e\u003cstrong\u003eQt\nframework\u003c/strong\u003e\u003c/a\u003e based on MingW 32 bit (the latest build has been\ntested with Qt 5.10.1).\u003c/li\u003e\n\u003cli\u003eMSYS: you can use one bundled with \u003ca\nhref=\"http://git-scm.com/download/win\"\u003e\u003cstrong\u003eGit For\nWindows\u003c/strong\u003e\u003c/a\u003e. You probably use Git anyway.\u003c/li\u003e\n\u003cli\u003ePython: any recent version will work.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv id=\"steps\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"steps\"\u003eSteps\u003c/h3\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003e\u003cp\u003eModify the session \u003cstrong\u003ePATH\u003c/strong\u003e environment variable to\ninclude the Qt build toolset and Python. \u003cstrong\u003emingw32-make\u003c/strong\u003e,\n\u003cstrong\u003eg++\u003c/strong\u003e, \u003cstrong\u003eqmake\u003c/strong\u003e,\n\u003cstrong\u003epython.exe\u003c/strong\u003e should be in the global search path in your\nGit Bash session. I personally modify bash.bashrc and add a line like\n\u003ccode\u003ePATH=/c/Python35-32:/c/Qt/5.10.1/mingw53_32/bin:/c/Qt/Tools/mingw530_32/bin:/c/MinGW/msys/1.0/bin:/bin\u003c/code\u003e\nnot to pollute the system wide PATH variable.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eExtract the EncryptPad source files to a directory.\u003c/p\u003e\u003c/li\u003e\n\u003cli\u003e\u003cp\u003eRun \u003cstrong\u003econfigure.py –help\u003c/strong\u003e script to see available\noptions. To build everything:\u003c/p\u003e\n\u003cp\u003e./configure.py –cpu x86 –os mingw –static make\u003c/p\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eThe \u003ccode\u003econfigure.py\u003c/code\u003e command will always work if your\nconsole is running with administrative privileges. If you don’t want to\nrun as administrator, add \u003ccode\u003e--link-method hardlink\u003c/code\u003e to the\noptions. If the build is successful, you should see the executable\n\u003cstrong\u003e./bin/release/encryptpad.exe\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003eNote that if you want EncryptPad to work as a single executable\nwithout dlls, you need to build Qt framework yourself statically. It\ntakes a few hours. There are plenty of instructions on how to do this in\nthe Internet. The most popular article recommends using a PowerShell\nscript. While it is convenient and I did it once, sometimes you don’t\nwant to upgrade your PowerShell and install heavy dependencies coming\nwith it. So the next time I had to do that, I read the script and did\neverything manually. Luckily there are not too many steps in it.\u003c/p\u003e\n\u003cdiv id=\"compile-on-macos\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"compile-encryptpad-on-macos\"\u003eCompile EncryptPad on macOS\u003c/h2\u003e\n\u003cp\u003eYou need to install Qt 5, Python and run:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eexport PATH=$HOME/Qt/5.12.11/clang_64/bin/:$PATH\n./configure.py --ldflags \u0026quot;-mmacosx-version-min=11.0\u0026quot; --cxxflags \u0026quot;-mmacosx-version-min=11.0\u0026quot;\nmake\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eChange the Qt path and replace the minimal macOS versions as needed.\nThe command will work without them, but the result will be limited to\nthe current version.\u003c/p\u003e\n\u003cdiv id=\"compile-on-linux\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"compile-encryptpad-on-linux\"\u003eCompile EncryptPad on Linux\u003c/h2\u003e\n\u003cdiv id=\"build-on-fedora\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"fedora\"\u003eFedora\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ednf install gcc make qt5-qtbase-devel qt5-qtsvg gcc-c++ python libstdc++-static glibc-static botan2-devel bzip2-devel zlib-devel\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nmake\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-ubuntu\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"ubuntu\"\u003eUbuntu\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eapt-get install qt5-default qtbase5-dev libqt5svg5-dev gcc g++ make python3 pkg-config zlib1g-dev libbotan-2-dev libbz2-dev\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nmake\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-debian\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"debian\"\u003eDebian\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eapt-get install qtbase5-dev libqt5svg5-dev gcc g++ make python3 zlib1g-dev pkg-config libbotan-2-dev libbz2-dev\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epython3 ./configure.py\nmake\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-opensuse\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"opensuse\"\u003eopenSUSE\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003ezypper install gcc gcc-c++ make python3 pkg-config zlib-devel libqt5-qtbase-devel libqt5-qtsvg-devel libbotan-devel libbz2-devel\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nmake\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-archlinux\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"archlinux\"\u003eArchlinux\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epacman -S --needed base-devel\npacman -S qt5-base qt5-svg python3 botan zlib bzip2\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nmake\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-freebsd\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"freebsd\"\u003eFreeBSD\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003epkg install python3 pkgconf botan2 qt5 qt5-svg\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nmake\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"build-on-voidlinux\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"void-linux\"\u003eVoid Linux\u003c/h3\u003e\n\u003cp\u003eInstall dependencies and tools:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003esudo xbps-install base-devel qt5-devel qt5-svg-devel python3 botan-devel bzip2-devel libzip-devel\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOpen the EncryptPad source directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e./configure.py\nsudo make install\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"portable-mode\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"portable-mode\"\u003ePortable mode\u003c/h2\u003e\n\u003cp\u003eEncryptPad checks the executable directory for a sub-directory called\n\u003ccode\u003eencryptpad_repository\u003c/code\u003e. If exists, it is used for key files\nand settings. The directory \u003ccode\u003e.encryptpad\u003c/code\u003e in the user’s\nprofile is then ignored. The EncryptPad executable and\n\u003ccode\u003eencryptpad_repository\u003c/code\u003e can both be copied to a removable\nmedia and used on multiple computers. It should be noted that keeping\nencrypted material with the key files on the same removable media is\nless secure. Separate them if possible.\u003c/p\u003e\n\u003cdiv id=\"fakevim-mode\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"fakevim-mode\"\u003eFakeVim mode\u003c/h2\u003e\n\u003cp\u003eFakeVim mode lets edit files with Vim-like interface.\u003c/p\u003e\n\u003cp\u003eTo enable the mode:\u003c/p\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003eopen Settings… / Preferences …\u003c/li\u003e\n\u003cli\u003eSet “Enable FakeVim”\u003c/li\u003e\n\u003cli\u003eRestart EncryptPad\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eTo configure FakeVim, create and edit the file at the location\nbelow:\u003c/p\u003e\n\u003cp\u003eLinux and macOS:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e~/.encryptpad/vimrc\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eOn Windows in the user profile directory:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e_encryptpad/vimrc\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eYou can find more information about the FakeVim interface on the \u003ca\nhref=\"https://github.com/hluk/FakeVim\"\u003eFakeVim library web page\u003c/a\u003e\u003c/p\u003e\n\u003cdiv id=\"fakevim-input-output\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"fakevim-input-and-output-commands\"\u003eFakeVim: input and output\ncommands\u003c/h3\u003e\n\u003cp\u003eThe ex mode supports commands to read and write files. The input and\noutput commands are integrated with the following EncryptPad\noperations:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e:r \u0026lt;file\u0026gt; - File \u0026gt; Open…\n\n:w - File \u0026gt; Save\n\n:w \u0026lt;file\u0026gt; - File \u0026gt; Save As…\n\n:q - File \u0026gt; Exit\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe combinations of the above commands are also supported:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003e:wq\n:wq \u0026lt;file\u0026gt;\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eVim’s + register integrates with the system clipboard. You can also\nadd the below line to the vimrc file to integrate the unnamed register\nwith the system clipboard:\u003c/p\u003e\n\u003cpre\u003e\u003ccode\u003eset clipboard=unnamedplus\u003c/code\u003e\u003c/pre\u003e\n\u003cdiv id=\"passphrases-in-memory\"\u003e\n\n\u003c/div\u003e\n\u003ch2\nid=\"does-encryptpad-store-passphrases-in-the-memory-to-reopen-files\"\u003eDoes\nEncryptPad store passphrases in the memory to reopen files?\u003c/h2\u003e\n\u003cp\u003eNo, it does not. After being entered, a passphrase and random salt\nare hashed with an S2K algorithm. The result is used as the encryption\nkey to encrypt or decrypt the file. A pool of these S2K results is\ngenerated every time the user enters a new passphrase. It allows to save\nand load files protected with this passphrase multiple times without\nhaving the passphrase. The size of the pool can be changed in the\nPreferences dialogue. The latest version at the moment of writing has\nthis number set to 8 by default. It means that you can save a file 8\ntimes before EncryptPad will ask you to enter the passphrase again. You\ncan increase this number but it will have an impact on the performance\nbecause S2K algorithms with many iterations are slow by design.\u003c/p\u003e\n\u003cdiv id=\"acknowledgements\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"acknowledgements\"\u003eAcknowledgements\u003c/h2\u003e\n\u003cp\u003eEncryptPad uses the following frameworks and libraries:\u003c/p\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003e\u003ca href=\"http://www.qt.io/\"\u003e\u003cstrong\u003eQt Framework\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"http://botan.randombit.net/\"\u003e\u003cstrong\u003eBotan\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"http://stlplus.sourceforge.net/\"\u003e\u003cstrong\u003eSTLplus\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"http://stlplus.sourceforge.net/makefiles/docs/\"\u003e\u003cstrong\u003eMakefiles\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://zlib.net/\"\u003e\u003cstrong\u003ezlib\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"http://code.google.com/p/googletest/\"\u003e\u003cstrong\u003egtest\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"http://www.famfamfam.com/lab/icons/silk/\"\u003e\u003cstrong\u003efamfamfam\nSilk iconset 1.3\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"https://github.com/SergiusTheBest/plog\"\u003e\u003cstrong\u003eplog\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"https://github.com/hluk/FakeVim\"\u003e\u003cstrong\u003eFakeVim\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"https://invent.kde.org/frameworks/breeze-icons\"\u003e\u003cstrong\u003eBreeze\nIcons\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca\nhref=\"https://codeplea.com/tinyexpr\"\u003e\u003cstrong\u003etinyexpr\u003c/strong\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv id=\"integrity-verification\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"encryptpad-integrity-verification\"\u003eEncryptPad integrity\nverification\u003c/h2\u003e\n\u003cdiv id=\"openpgp-signing\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"openpgp-signing-and-certification-authority\"\u003eOpenPGP signing and\ncertification authority\u003c/h3\u003e\n\u003cp\u003eAll EncryptPad related downloads are signed with the following\nOpenPGP key.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eEncryptPad (Releases) 2048R/A2813E85\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003esoftware@evpo.net\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eKey fingerprint = 634B FC0C CC42 6C74 389D  8931 0F1C FF71 A281 3E85\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003eI also have a code signing certificate issued by a certification\nauthority (CA). To establish a connection between my CA certificate and\nthe above OpenPGP key, I created an executable signed with the CA\ncertificate containing fingerprints and the OpenPGP key. You can find\n\u003ccode\u003eca_signed_pgp_signing_instructions\u003c/code\u003e in downloads.\nEffectively I created a bridge of trust between my CA certificate and\nthe OpenPGP key.\u003c/p\u003e\n\u003cp\u003eThere is a few reasons why I did not simply use the CA\ncertificate:\u003c/p\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003eEncryptPad is based on the OpenPGP standard and promotes it.\u003c/li\u003e\n\u003cli\u003eOpenPGP signing is more flexible.\u003c/li\u003e\n\u003cli\u003eThere is no yearly CA certification running cost.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv id=\"verification-process\"\u003e\n\n\u003c/div\u003e\n\u003ch3 id=\"step-by-step-verification-process\"\u003eStep by step verification\nprocess\u003c/h3\u003e\n\u003col type=\"1\"\u003e\n\u003cli\u003eDownload packages and their detached OpenPGP signatures.\u003c/li\u003e\n\u003cli\u003eImport the EncryptPad (Releases) key to your GPG keyring.\u003c/li\u003e\n\u003cli\u003eEnsure that it is the valid EncryptPad (Releases) key by checking\nits fingerprint with\n\u003ccode\u003eca_signed_pgp_signing_instructions\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eVerify signatures on the downloaded files with GPG.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv id=\"license\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"license\"\u003eLicense\u003c/h2\u003e\n\u003cp\u003eEncryptPad is free software: you can redistribute it and/or modify it\nunder the terms of the \u003ca href=\"http://www.gnu.org/licenses/\"\u003eGNU\nGeneral Public License\u003c/a\u003e as published by the Free Software Foundation,\neither version 2 of the License, or (at your option) any later\nversion.\u003c/p\u003e\n\u003cp\u003eEncryptPad is distributed in the hope that it will be useful, but\nWITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General\nPublic License for more details.\u003c/p\u003e\n\u003cdiv id=\"contact\"\u003e\n\n\u003c/div\u003e\n\u003ch2 id=\"contact-and-feedback\"\u003eContact and feedback\u003c/h2\u003e\n\u003cp\u003eIf your question is related to EncryptPad, send it to the mailing\nlist: \u003cstrong\u003eencryptpad@googlegroups.com\u003c/strong\u003e linked to \u003ca\nhref=\"https://groups.google.com/d/forum/encryptpad\"\u003ethe public\ndiscussion group\u003c/a\u003e.\u003c/p\u003e\n\u003cp\u003eBug tracker and contributions: \u003ca\nhref=\"https://github.com/evpo/EncryptPad/issues\"\u003egithub.com/evpo/EncryptPad/issues\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFor other matters, please contact Evgeny Pokhilko\n\u003cstrong\u003esoftware@evpo.net\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003ca\nhref=\"http://www.evpo.net/encryptpad\"\u003ehttp://www.evpo.net/encryptpad\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevpo%2FEncryptPad","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fevpo%2FEncryptPad","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fevpo%2FEncryptPad/lists"}