{"id":20313073,"url":"https://github.com/ceiridge/simplediscordcrypt-extended","last_synced_at":"2025-04-11T16:51:47.061Z","repository":{"id":47959065,"uuid":"337184290","full_name":"Ceiridge/SimpleDiscordCrypt-Extended","owner":"Ceiridge","description":"Extended Discord message end-to-end encryption plugin, supporting auto key exchange and encrypted file transfers","archived":false,"fork":false,"pushed_at":"2023-01-07T20:35:24.000Z","size":694,"stargazers_count":17,"open_issues_count":5,"forks_count":6,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T12:53:36.798Z","etag":null,"topics":["discord","e2e","encrypted","encryption","end-to-end-encryption","messenger","rsa"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ceiridge.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":null,"support":null}},"created_at":"2021-02-08T19:20:28.000Z","updated_at":"2025-01-04T07:28:58.000Z","dependencies_parsed_at":"2023-02-08T01:01:35.000Z","dependency_job_id":null,"html_url":"https://github.com/Ceiridge/SimpleDiscordCrypt-Extended","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ceiridge%2FSimpleDiscordCrypt-Extended","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ceiridge%2FSimpleDiscordCrypt-Extended/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ceiridge%2FSimpleDiscordCrypt-Extended/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ceiridge%2FSimpleDiscordCrypt-Extended/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ceiridge","download_url":"https://codeload.github.com/Ceiridge/SimpleDiscordCrypt-Extended/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248443085,"owners_count":21104334,"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":["discord","e2e","encrypted","encryption","end-to-end-encryption","messenger","rsa"],"created_at":"2024-11-14T18:09:09.921Z","updated_at":"2025-04-11T16:51:47.036Z","avatar_url":"https://github.com/Ceiridge.png","language":"JavaScript","readme":"\u003ch1 align=\"center\"\u003e\n    \u003cimg src=\"https://github.com/Ceiridge/SimpleDiscordCrypt-Extended/raw/master/logo.png\" height=\"50\" width=\"50\"\u003e\n    SimpleDiscordCrypt Extended\n\u003c/h1\u003e\n\nDiscord message end-to-end client side encryption plugin with automatic key exchange. Also runs without BetterDiscord.\u003cbr\u003e\n\u003cbr\u003e\nIf you have `Discord installed`, use the [installer](https://github.com/Ceiridge/SimpleDiscordCrypt-Extended/raw/master/SimpleDiscordCryptInstaller.ps1) (*Alt+Click* the link to download)\u003cbr\u003e\nFor `mobile` you should try the Kiwi Browser, it's Chromium based and supports extensions, such as Tampermonkey, with which you can install the userscript (see below).\u003cbr\u003e\n`Firefox` is kind of supported but there is incompatibility because of https://bugzilla.mozilla.org/show_bug.cgi?id=1048931\u003cbr\u003e\nTo install it as a [userscript](https://github.com/Ceiridge/SimpleDiscordCrypt-Extended/raw/master/SimpleDiscordCrypt.user.js) (with [Tampermonkey](https://chrome.google.com/webstore/detail/tampermonkey/dhdgffkkebhmkfjojejmpbldmpobfkfo)) or include the js file somehow else\u003cbr\u003e\n\u003cbr\u003e\nPlease do not download this plugin from untrusted sources, for example there is one in Chrome web store with the same name.\u003cbr\u003e\n\u003cbr\u003e\nThis is a fork of the original *SimpleDiscordCrypt* repository that aims to fix bugs and issues faster and to add more features. The original project by An0 can be found [here](https://gitlab.com/An0/SimpleDiscordCrypt).\n### Improvements over the original version\n- Manual updates =\u003e no trust required\n- Bugfixes\n- Less dependent on random image CDNs when loading icons\n- More embeds (e.g. Tenor)\n\n# Tips and Tricks\n**Right click on the lock icon** to open the menu\u003cbr\u003e\n\u003cbr\u003e\nIf you would like to `download an encrypted image`, **middle click on the image**\u003cbr\u003e\n\u003cbr\u003e\nYou can **toggle the encryption** with the `lock icon`. You can also use the `:ENC:`, `ENC` or `NOENC` prefix at the start of your message, but prefixes are deprecated since Discord starts uploads before you even send your message.\u003cbr\u003e\n\u003cbr\u003e\nIf you want to **change** from one installation to another, `export and import` your database\u003cbr\u003e\nIf you would like to use the plugin on **multiple devices**; choose a main one, export the database from that and click on `secondary` when **importing to others**, after new key exchanges you'll have to repeat these steps\u003cbr\u003e\n\u003cbr\u003e\n`ECDH P-521` is used for the key exchange and `AES256-CBC` for the messages offering the equivalent security of 256-bits\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\nHere is a link to the original [DiscordCrypt](https://gitlab.com/leogx9r/DiscordCrypt) for BetterDiscord users\u003cbr\u003e\n\u003csup\u003eIt has been discontinued. The two versions are not compatible! SimpleDiscordCrypt also works with BetterDiscord installed.\u003c/sup\u003e\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n# Database\nThe `database password` is optional but the database isn't! **The database stores stuff like your keys and channel settings.**\u003cbr\u003e\nYou should only have one database as having multiple will mess things up. In order to manage this, you should **keep backups** by `exporting` your database.\u003cbr\u003e\nIf you are using **multiple devices** with the same account, **select one as the main** and **import** its database as `secondary` to the other(s).\u003cbr\u003e\nIf you import the database as secondary you can still export it and import it normally again. The difference is that a client with the secondary setting will ignore key exchanges, which means you have to update your secondary devices with the new database.\u003cbr\u003e\n##### Cleaning the database \u003csub\u003eYou can paste these into the `Ctrl+Shift+I` console\u003c/sub\u003e\n\u003cdetails\u003e\u003csummary\u003eSdcClearChannels(filterFunc)\u003c/summary\u003e\n\n```js\ndeleteBefore = (now = new Date()).setMonth(now.getMonth() - 6);\nSdcClearChannels((channel) =\u003e (\n    //Number(channel.lastseen) ms precision unix timestamp\n    //String(channel.descriptor) descriptor from the channel manager\n    //Boolean(channel.encrypted) is the encryption toggled on\n\n    channel.lastseen \u003c deleteBefore \u0026\u0026 //not seen in 6 months\n    /^DM with \\d{17,20}$/.test(channel.descriptor) //name resolution failed\n\n    //'true' return value deletes the record\n));\n```\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003eSdcClearKeys(filterFunc)\u003c/summary\u003e\n\n```js\ndeleteBefore = (now = new Date()).setMonth(now.getMonth() - 6);\nSdcClearKeys((key) =\u003e (\n    //Number(key.lastseen) ms precision unix timestamp\n    //String(key.descriptor) descriptor from the key manager\n    //Boolean(key.hidden) is the key hidden\n    //String(key.type) one of ['GROUP', 'CONVERSATION'/*DM*/, 'PERSONAL']\n    //Number(key.registered) when the key was added to the database\n\n    key.lastseen \u003c deleteBefore \u0026\u0026 //not seen in 6 months\n    /^(?:DM key with \\d{17,20}|\\d{17,20}'s personal key)$/.test(key.descriptor)\n    //name resolution failed if the id is used as name\n\n    //'true' return value deletes the record\n));\n```\n\u003c/details\u003e\n\u003cbr\u003e\n\n# Keys\nThe things you use to **encrypt messages** (plus there is the `database key` for encrypting the plugin's local database)\u003cbr\u003e\nYou can `select` which key to use for the channel at the top, besides the lock icon.\u003cbr\u003e\n### Key Types\n**Personal key:** Everyone has this (and it's different for everyone), you can use it to encrypt messages in channels **where there are no other options**.\u003cbr\u003e\nIt is shared with everyone you key-exchange with, so the security of it varies.\u003cbr\u003e\n**Group key:** You can `make` these from the plugin's menu if you are in a guild channel.\u003cbr\u003e\nIt is advised that you **change the name** of the key right away to spot if someone accidentally generated a different key for your channel. You can do this in the `Key Manager`.\u003cbr\u003e\nAfter **generating the group key**, you can use it in other channels too.\u003cbr\u003e\nIf you set a group key as `hidden` in the `Key Manager` it will **no longer show up in your key selector** and it **won't be automatically shared** with your friends.\u003cbr\u003e\nIf you really want to know if the other is using the same key as you, compare the first few characters (up to 16) of the encrypted message.\u003cbr\u003e\n**DM key:** These keys are generated by a Diffie-Hellman key exchange **between two users**, it provides a `secure connection over unsafe medium`.\u003cbr\u003e\n# Key Exchanges\nIf the plugin comes across a message with a key that you don't have it will **attempt to get that key by a key exchange** with the message's sender.\u003cbr\u003e\nYou need to be able to `DM` the other user for the key exchange.\u003cbr\u003e\nIf a group key **isn't** set as `hidden` it will **automatically** be shared with a **friend** if they ask for it.\u003cbr\u003e\nIn order to share a key you need to establish a secure connection with an `initial key exchange`, it is usually **automatic** but you can start it manually from the menu by clicking on `Start Key Exchange` from the DM channel.\u003cbr\u003e\nYou can manually share keys by using the `Share Keys` menu option.\u003cbr\u003e\nDuring a `key share`, the sharing party will **suggest you channels** to use so it's advised to **not** set anything for the channel (or toggle encryption) **before you have the key** for it.\u003cbr\u003e\n# Key Rotation and Trusted Keys\nUse the `SdcSetKeyRotation(7)` **console command** to **start a key rotation** on the key of the current channel. This will **periodically generate** a new key and switch to it in all the channels that use the `rotated key`.\u003cbr\u003e\nIn the example above, it's every 7 days (by default this is aligned to arbitrary points so if you use the same command on your other primary devices within a day, it will do the same).\u003cbr\u003e\nIf the key is set to `hidden`, the new key will be hidden too.\u003cbr\u003e\n`Trusted Keys` can be enabled in the `Key Visualizer` (in DM), this feature can be used to do **automatic key exchange** for `hidden keys` and/or `rotated keys`.\u003cbr\u003e\nKeys shared with `trusted keys` can swap keys for channels automatically, which is **useful for rotated keys**.\u003cbr\u003e\n# Extras\nYou can click on an already enlarged **image** to **further enlarge** it, you can also `drag` the enlarged image if it doesn't fit the screen.\u003cbr\u003e\nUse the `arrow keys` to **navigate** like a gallery when zoomed in.\u003cbr\u003e\nYou can use **any emote** (animated too) in `encrypted messages`.\u003cbr\u003e\nMessages above 1600 characters will be compressed, but this feature might have incompatibilities with future versions. This also means that the messages can be 2000 character long if they are mostly made of normal characters.\u003cbr\u003e\nFor `large audio and video files`, you can use **Mega**, it automatically **embeds**.\u003cbr\u003e\nThe **encryption** is completely secure unless someone at Discord replaces your messages right when you secure your DMs, to **make sure** you have the right keys, you can use the `Key Visualizer` and **compare** your result with the other party.\u003c/br\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\u003csummary\u003e\u003cb\u003eGetting notifications on custom phrases\u003c/b\u003e\u003c/summary\u003e\nThis feature should be a good compensation for no searches and role mentions\u003cbr\u003e\nUse the \u003ccode\u003eSdcSetPingOn(regexStr)\u003c/code\u003e console command to set the match string or \u003cb\u003eregex\u003c/b\u003e for the extra \u003cb\u003epings\u003c/b\u003e\u003cbr\u003e\nFor example SdcSetPingOn(\u003ccode\u003e'An0'\u003c/code\u003e) will only ping if the message contains that \u003cb\u003eexact word\u003c/b\u003e, SdcSetPingOn(\u003ccode\u003e/\\bAn[0o]\\b/i\u003c/code\u003e) will match \u003ci\u003eevery form of it\u003c/i\u003e\u003cbr\u003e\n\u003cb\u003eSample regex for role mentions:\u003c/b\u003e \u003ccode\u003e/\u003c@\u0026(?:473998238156849152|474006463749160992)\u003e/\u003c/code\u003e you can get the role ids with \u003ccode\u003e\\@Role\u003c/code\u003e \u003cb\u003ein the chat\u003c/b\u003e\u003cbr\u003e\n\u003c/details\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\nTo uninstall, just delete it from %localappdata% and make new shortcuts.\u003cbr\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\n𝘚𝘪𝘮𝘱𝘭𝘦𝘋𝘪𝘴𝘤𝘰𝘳𝘥𝘊𝘳𝘺𝘱𝘵\u003cbr\u003e\nOr according to google: simple discord crypt\n\n# Trademarks\nSimpleDiscordCrypt-Extended is released into the public domain according to the LGPL 3.0 license by the copyright holders.\n\nDisclaimer: This repository and the used names \"Discord\", \"Hammer \u0026 Chisel\" in this project are not affiliated with or endorsed by Discord Inc., Hammer \u0026 Chisel Inc. or other third parties. This repository and the used name \"Discord\" are also not affiliated with any existing trademarks.\n\nThis repository does not infringe any copyright of proprietary software, as it only adds features to Discord on the end user's computer, without having any copyright-protected code or text included in this repository.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fceiridge%2Fsimplediscordcrypt-extended","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fceiridge%2Fsimplediscordcrypt-extended","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fceiridge%2Fsimplediscordcrypt-extended/lists"}