├── .gitignore ├── package.json ├── originalSymbols.json ├── echelon.json ├── profanity.json ├── encrypt.js ├── sign.js ├── README.md ├── verify.js ├── decrypt.js └── your_keys.js /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | node_modules 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "profanity-pgp", 3 | "version": "0.0.2", 4 | "description": "PGP encryption and message-signing with a twist", 5 | "repository": { 6 | "type": "git", 7 | "url": "git://github.com/mapmeld/profanity-pgp" 8 | }, 9 | "author": "Nick Mapmeld ", 10 | "license": "GPLv3+", 11 | "bin": { 12 | "profanity-sign": "sign.js", 13 | "profanity-encrypt": "encrypt.js", 14 | "profanity-verify": "verify.js", 15 | "profanity-decrypt": "decrypt.js" 16 | }, 17 | "dependencies": { 18 | "openpgp": "4.10.7" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /originalSymbols.json: -------------------------------------------------------------------------------- 1 | [ 2 | "a", 3 | "b", 4 | "c", 5 | "d", 6 | "e", 7 | "f", 8 | "g", 9 | "h", 10 | "i", 11 | "j", 12 | "k", 13 | "l", 14 | "m", 15 | "n", 16 | "o", 17 | "p", 18 | "q", 19 | "r", 20 | "s", 21 | "t", 22 | "u", 23 | "v", 24 | "w", 25 | "x", 26 | "y", 27 | "z", 28 | "A", 29 | "B", 30 | "C", 31 | "D", 32 | "E", 33 | "F", 34 | "G", 35 | "H", 36 | "I", 37 | "J", 38 | "K", 39 | "L", 40 | "M", 41 | "N", 42 | "O", 43 | "P", 44 | "Q", 45 | "R", 46 | "S", 47 | "T", 48 | "U", 49 | "V", 50 | "W", 51 | "X", 52 | "Y", 53 | "Z", 54 | "0", 55 | "1", 56 | "2", 57 | "3", 58 | "4", 59 | "5", 60 | "6", 61 | "7", 62 | "8", 63 | "9", 64 | "/", 65 | "+", 66 | "=" 67 | ] 68 | -------------------------------------------------------------------------------- /echelon.json: -------------------------------------------------------------------------------- 1 | ["2600", 2 | "ALF", 3 | "Al-Shabaab", 4 | "Anthrax", 5 | "AQAP", 6 | "AQIM", 7 | "Assange", 8 | "Attack", 9 | "Basque", 10 | "Biological", 11 | "Botnet", 12 | "Burn", 13 | "Chemical", 14 | "Cloud", 15 | "Collapse", 16 | "Cyber", 17 | "DDOS", 18 | "EarthFirst", 19 | "ELF", 20 | "Epidemic", 21 | "Exposure", 22 | "Extremism", 23 | "FARC", 24 | "FBI", 25 | "Grid", 26 | "Hacker", 27 | "Hamas", 28 | "Hazardous", 29 | "Hazmat", 30 | "Hezbollah", 31 | "IED", 32 | "IRA", 33 | "Iran", 34 | "ISIS", 35 | "Jihad", 36 | "Keylogger", 37 | "Keystone", 38 | "Leak", 39 | "MI6", 40 | "Mysqli", 41 | "NBIC", 42 | "Nuclear", 43 | "OpSec", 44 | "Pakistan", 45 | "patriot", 46 | "Phishing", 47 | "Phreaking", 48 | "PirateBay", 49 | "PLO", 50 | "Radiation", 51 | "Radioactive", 52 | "Ricin", 53 | "Rootkit", 54 | "Sarin", 55 | "Silkroad", 56 | "Smart", 57 | "Snowden", 58 | "Somalia", 59 | "Subway", 60 | "Target", 61 | "Terrorism", 62 | "Toxic", 63 | "Trojan", 64 | "TSA", 65 | "Yemen"] 66 | -------------------------------------------------------------------------------- /profanity.json: -------------------------------------------------------------------------------- 1 | ["anal", 2 | "ass", 3 | "asshat", 4 | "asshole", 5 | "balls", 6 | "bastard", 7 | "bitch", 8 | "bitchy", 9 | "bollocks", 10 | "bullshit", 11 | "cock", 12 | "crap", 13 | "crappy", 14 | "cunt", 15 | "cuntpunter", 16 | "damn", 17 | "darn", 18 | "dick", 19 | "dickbag", 20 | "dickhead", 21 | "dickish", 22 | "dildo", 23 | "dipshit", 24 | "dongle", 25 | "douche", 26 | "douchebag", 27 | "dumbass", 28 | "dumbfuck", 29 | "fanny", 30 | "frak", 31 | "fuck", 32 | "fucker", 33 | "fucking", 34 | "fuckwad", 35 | "git", 36 | "goddamn", 37 | "hellish", 38 | "hippie", 39 | "hipster", 40 | "horseshit", 41 | "jackass", 42 | "motherfucker", 43 | "motherfucking", 44 | "nsa-hugging", 45 | "piss", 46 | "pissant", 47 | "poppycock", 48 | "pussy", 49 | "santorum", 50 | "schmuck", 51 | "shit", 52 | "shitfaced", 53 | "shitstain", 54 | "shitstorm", 55 | "shitter", 56 | "shitty", 57 | "skank", 58 | "slut", 59 | "tit", 60 | "turd", 61 | "twat", 62 | "voldemort", 63 | "wanker", 64 | "whore", 65 | "whoring"] 66 | -------------------------------------------------------------------------------- /encrypt.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var openpgp = require('openpgp'); 5 | 6 | var profanity = require('./profanity.json'); 7 | var originalSymbols = require('./originalSymbols.json'); 8 | 9 | var ur_public_key = require('./your_keys.js').ur_public_key; 10 | 11 | var pubKey = openpgp.key.readArmored(ur_public_key).keys[0]; 12 | 13 | if (process.argv.length > 2) { 14 | var fileName = process.argv[2]; 15 | fs.readFile(fileName, {encoding: 'utf-8'}, function(err, data) { 16 | if (err) { 17 | throw err; 18 | } else { 19 | doEncrypt(data); 20 | } 21 | }); 22 | } else { 23 | var plaintext = 'hello world\nthis is a test\nwhat happens next?'; 24 | doEncrypt(plaintext); 25 | } 26 | 27 | function doEncrypt(plaintext) { 28 | openpgp.encryptMessage(pubKey, plaintext).then(function(pgpMessage) { 29 | pgpMessage = pgpMessage.replace('OpenPGP.js', 'Profanity-PGP'); 30 | pgpMessage = pgpMessage.replace('http://openpgpjs.org', 'https://github.com/mapmeld/profanity-pgp'); 31 | var msg = pgpMessage.split('\n'); 32 | for(var l = 4; l < msg.length - 2; l++) { 33 | var original_line = msg[l]; 34 | var new_line = []; 35 | for(var sym = 0; sym < original_line.length; sym++) { 36 | var symbol_index = originalSymbols.indexOf(original_line[sym]); 37 | new_line.push(profanity[symbol_index]); 38 | } 39 | msg[l] = new_line.join(' '); 40 | } 41 | console.log(msg.join('\n')); 42 | }).catch(function(err) { 43 | throw err; 44 | }); 45 | } 46 | -------------------------------------------------------------------------------- /sign.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var openpgp = require('openpgp'); 5 | 6 | var profanity = require('./profanity.json'); 7 | var originalSymbols = require('./originalSymbols.json'); 8 | 9 | var ur_private_key = require('./your_keys.js').ur_private_key; 10 | var ur_private_key_pass = require('./your_keys.js').ur_private_key_pass; 11 | 12 | var privKey = openpgp.key.readArmored(ur_private_key).keys[0]; 13 | privKey.getSigningKeyPacket().decrypt(ur_private_key_pass); 14 | 15 | if (process.argv.length > 2) { 16 | var fileName = process.argv[2]; 17 | fs.readFile(fileName, {encoding: 'utf-8'}, function(err, data) { 18 | if (err) { 19 | throw err; 20 | } else { 21 | doSign(data); 22 | } 23 | }); 24 | } else { 25 | var plaintext = 'hello world\nthis is a test\nwhat happens next?'; 26 | doSign(plaintext); 27 | } 28 | 29 | function doSign(plaintext) { 30 | openpgp.signClearMessage(privKey, plaintext).then(function(pgpMessage) { 31 | var original = pgpMessage.split('-----BEGIN PGP SIGNATURE-----')[0]; 32 | var sig = pgpMessage.split('-----BEGIN PGP SIGNATURE-----')[1]; 33 | sig = sig.replace('OpenPGP.js', 'Profanity-PGP'); 34 | sig = sig.replace('http://openpgpjs.org', 'https://github.com/mapmeld/profanity-pgp'); 35 | var littlesig = sig.split('\n'); 36 | for(var l = 3; l < littlesig.length - 2; l++) { 37 | var original_line = littlesig[l]; 38 | var new_line = []; 39 | for(var sym = 0; sym < original_line.length; sym++) { 40 | var symbol_index = originalSymbols.indexOf(original_line[sym]); 41 | if(symbol_index >= profanity.length) { 42 | new_line.push(profanity[symbol_index - profanity.length].toUpperCase()); 43 | } else { 44 | new_line.push(profanity[symbol_index]); 45 | } 46 | } 47 | littlesig[l] = new_line.join(' '); 48 | } 49 | sig = littlesig.join('\n'); 50 | console.log(original + '-----BEGIN PGP SIGNATURE-----' + sig); 51 | 52 | }).catch(function(err) { 53 | throw err; 54 | }); 55 | } 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Profanity-PGP 2 | 3 | Anyone can use PGP to make their e-mail more secure. Using a pair of public and private keys, you either encrypt the entire 4 | message for a user, or add a signature to your e-mail for others to verify that it is your original content. 5 | 6 | Unfortunately, PGP signatures usually look kinda boring: 7 | 8 | ``` 9 | -----BEGIN PGP SIGNATURE----- 10 | Version: GnuPG v1.4.15 (Darwin) 11 | Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/ 12 | 13 | iQEcBAEBAgAGBQJTHnwVAAoJEDWbjndSKzRJFeUH/RtAHtZsUhHpxMxvekLhCEYP 14 | oZn1E7wq1F0I5/4yaQlma3I/v+NdyMiorFQpv3x2YjoleZtnmHN7CR11ZIE66YWT 15 | uyZnFSTuYh6K5SJkfFQs2SKchI0D9MPPoaUYF/m0l2XAwIxs2EdBuxbRryzR8VBj 16 | QmDEeb/fGTnRArJlWlM6KO2rFtUWNdL30zbVZfmxNsr3s7i+/f6ku4duVgtBWXFt 17 | bq114qAFCD4YWM/Ho+T7OfgTUIgxgPjKWeYKovR81nomDxsiyAGHVCe5MR0TL2P9 18 | S3kJEerIdpDNubW7ta4v9X1L1ZzuPJHLvlgRjHMy2N/31sQTrfaPnA9hjTOcyFw= 19 | =rXOK 20 | -----END PGP SIGNATURE----- 21 | ``` 22 | 23 | Let's make them more interesting! 24 | 25 | ## Concept 26 | 27 | profanity.json includes a list of swears which map to valid PGP characters, a-z, A-Z, 0-9, +, /, and = 28 | 29 | Using OpenPGP.js, messages are encrypted or signed using the same globally-trusted GPG client. Then Profanity-PGP 30 | replaces the message's characters with a much more profane system: 31 | 32 | ``` 33 | -----BEGIN PGP SIGNATURE----- 34 | Version: Profanity-PGP VERSION 35 | Comment: https://github.com/mapmeld/profanity-pgp 36 | 37 | dipshit damn dipshit fuck dumbass motherfucking fuck git dumbass dumbfuck dumbass fucker dumbass crap nsa-hugging cunt shit crap dipshit goddamn fuck fuck damn bullshit shit pissant damn horseshit ass cock fanny poppycock dumbass dumbass fanny cunt cuntpunter bitch motherfucker whore motherfucker damn bitch skank turd fuck dongle shitter nsa-hugging darn asshole asshole hellish twat anal nsa-hugging fucking bollocks turd whore 38 | git dumbfuck fuckwad cunt piss dick tit douche nsa-hugging hellish voldemort twat shitstorm anal asshat bullshit whore goddamn bullshit shitstain twat piss whore fuck git ass ass horseshit pissant turd wanker shitstain cock dongle fucking slut crappy turd bullshit bitchy motherfucker bastard dumbfuck horseshit damn dumbfuck horseshit piss piss cunt whore hellish tit poppycock asshat dildo fanny tit asshole fuck 39 | shitfaced dumbfuck poppycock asshole fanny schmuck ass bitchy twat bollocks hellish dickhead bastard bitch turd cunt dickish shit bastard motherfucker skank turd dickhead git darn balls dongle wanker shitstain fuckwad damn jackass bullshit asshat schmuck poppycock asshat frak asshat bastard jackass bollocks balls shit jackass shitstorm git dumbfuck dumbfuck crap git tit dildo crappy hellish hellish turd bitch hippie schmuck 40 | hippie whore skank dongle schmuck fucking darn hipster cunt douchebag shitstain tit wanker motherfucking fucking motherfucking nsa-hugging crap cock hipster fanny fanny frak goddamn dickish crap douche frak pussy dongle asshat whoring 41 | whoring dildo santorum crappy fucker 42 | -----END PGP SIGNATURE----- 43 | ``` 44 | 45 | ## Test Install (insecure) 46 | 47 | ``` 48 | npm install -g profanity-pgp 49 | 50 | profanity-encrypt SnowdenDocs.txt > GreenwaldMail.txt 51 | profanity-decrypt KryptosSculpture.txt > LizardPeopleConstitution.txt 52 | 53 | profanity-sign HackThePlanet.txt > Hackers.txt 54 | profanity-verify SketchyEmail.txt 55 | ``` 56 | 57 | ## Install for real 58 | 59 | Create keys in GPG 60 | ``` 61 | gpg --gen-key 62 | gpg --export --armor emailYouUsed@example.com > public_key.asc 63 | gpg --export-secret-key --armor emailYouUsed@example.com > private_key.asc 64 | ``` 65 | 66 | Install the software 67 | ``` 68 | git clone https://github.com/mapmeld/profanity-pgp.git 69 | cd profanity-pgp 70 | npm install 71 | ``` 72 | 73 | Edit ```your_keys.js``` to have your public key, private key, and passphrase. 74 | 75 | ``` 76 | npm install . -g 77 | ``` 78 | 79 | You can now use ```profanity-encrypt``` and other command line functions with 80 | your own key. 81 | 82 | **Never commit your private key - the one in this repo is used as an example and never for authorized messages.** 83 | 84 | ## NSA-hugging Option! 85 | 86 | CC your friends at the NSA by encrypting with terms used by the ECHELON program: 87 | 88 | ``` 89 | cp echelon.json profanity.json 90 | ``` 91 | 92 | ## License 93 | 94 | GPLv3+ -- based on OpenPGP.js which is LGPL 95 | -------------------------------------------------------------------------------- /verify.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var openpgp = require('openpgp'); 5 | 6 | var profanity = require('./profanity.json'); 7 | var originalSymbols = require('./originalSymbols.json'); 8 | 9 | var ur_public_key = require('./your_keys.js').ur_public_key; 10 | 11 | var pubKey = openpgp.key.readArmored(ur_public_key).keys[0]; 12 | 13 | if (process.argv.length > 2) { 14 | var fileName = process.argv[2]; 15 | fs.readFile(fileName, {encoding: 'utf-8'}, function(err, data) { 16 | if (err) { 17 | throw err; 18 | } else { 19 | doVerify(data); 20 | } 21 | }); 22 | } else { 23 | var message = [ 24 | "-----BEGIN PGP SIGNED MESSAGE-----", 25 | "Hash: SHA256", 26 | "", 27 | "hello world", 28 | "this is a test", 29 | "what happens next?", 30 | "-----BEGIN PGP SIGNATURE-----", 31 | "Version: Profanity-PGP VERSION", 32 | "Comment: https://github.com/mapmeld/profanity-pgp", 33 | "", 34 | "dipshit dickbag dumbfuck asshat dumbfuck dumbass fuck dumbfuck fanny dumbass dumbass motherfucking dumbfuck motherfucking goddamn poppycock shitfaced turd fuck git fanny nsa-hugging dumbass ass fuckwad hipster dumbfuck dumbfuck nsa-hugging motherfucker hellish fuckwad pissant dipshit dumbass dumbass shitstorm hippie shitstain fuckwad wanker nsa-hugging ass git whore anal pissant douchebag crap cunt pissant fuck jackass dick dick crappy bullshit douchebag shitty bitch", 35 | "voldemort hippie dipshit piss shit hipster hellish hellish bitch fuck slut jackass douche dickhead hellish dickbag frak cock shitter dumbfuck frak asshat motherfucking bullshit frak shitter douche motherfucking ass douchebag piss hipster motherfucking voldemort piss poppycock anal crap dumbfuck asshat ass crap fucker fuck douchebag hippie shitty hipster shitfaced shitstain schmuck tit shitstain slut hipster dongle motherfucker hellish hellish santorum", 36 | "hippie shitter darn dumbfuck anal poppycock bullshit asshat dickbag pussy bitch horseshit damn fucker shitfaced hippie bollocks fanny voldemort piss dick pissant fanny cuntpunter shitfaced crap hippie shitter cunt hippie dumbass nsa-hugging hippie dick schmuck fanny goddamn piss fucker twat balls fanny voldemort pussy douche piss crappy fucking tit schmuck dipshit bitch fanny anal fuckwad shitter wanker darn tit shitty", 37 | "tit hellish shitstorm shitter wanker dickish shit motherfucker fucker fuck dildo fuckwad balls git hippie crappy asshat shitstain ass santorum bitchy fucking shitfaced cuntpunter wanker hellish motherfucker motherfucking douchebag bullshit crap frak bastard crap pussy skank damn wanker motherfucking skank santorum dildo douche git pussy fuckwad asshat twat motherfucker goddamn dongle dickish whore darn darn dipshit asshole fucking motherfucking horseshit", 38 | "bitchy bollocks nsa-hugging nsa-hugging dumbfuck cock crappy shit schmuck twat darn fucking voldemort git frak hellish hippie skank goddamn bollocks ass ass turd bitch voldemort fanny goddamn shitfaced santorum turd shitty balls damn crap fanny santorum dipshit shitter hippie douche fucking douche fuckwad dumbfuck frak asshole fanny motherfucker shitstorm turd slut bitch bitchy jackass frak asshat pussy bollocks pussy dickish", 39 | "goddamn dongle shitstorm fucker pussy fucker anal bitch wanker dick skank ass shitstorm bitchy hipster dumbfuck bollocks douche fuck bullshit damn whore tit shitstain bollocks bullshit asshole shitter cunt shitty slut motherfucker asshat hippie motherfucker jackass slut wanker pissant cock goddamn twat shitfaced fuckwad hellish dickish horseshit shitter cuntpunter voldemort shitstain fuck twat bullshit shitter anal wanker skank bullshit motherfucker", 40 | "dildo goddamn horseshit hellish frak asshole crappy damn pussy motherfucker shitty bollocks shitfaced dickbag fanny horseshit voldemort ass poppycock skank bastard fanny hipster whoring", 41 | "whoring goddamn cunt shit douche", 42 | "-----END PGP SIGNATURE-----" 43 | ].join("\n"); 44 | doVerify(message); 45 | } 46 | 47 | function doVerify(message) { 48 | var original = message.split('-----BEGIN PGP SIGNATURE-----')[0]; 49 | var sig = message.split('-----BEGIN PGP SIGNATURE-----')[1]; 50 | var littlesig = sig.split('\n'); 51 | var originalSymbols = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789/+='; 52 | 53 | for(var l = 4; l < littlesig.length - 1; l++) { 54 | var original_line = littlesig[l].split(' '); 55 | var new_line = ""; 56 | for(var sym = 0; sym < original_line.length; sym++) { 57 | var symbol_index = profanity.indexOf(original_line[sym]); 58 | new_line += originalSymbols[symbol_index]; 59 | } 60 | littlesig[l] = new_line; 61 | } 62 | sig = littlesig.join('\n'); 63 | 64 | message = original + '-----BEGIN PGP SIGNATURE-----' + sig; 65 | 66 | var clearMessage = openpgp.cleartext.readArmored(message); 67 | 68 | openpgp.verifyClearSignedMessage(pubKey, clearMessage).then(function(sigCheck) { 69 | if (sigCheck.signatures[0].valid) { 70 | console.log('looks fucking legit!'); 71 | } else { 72 | console.log("that's a fake signature! holy fucking shit!"); 73 | } 74 | }); 75 | } 76 | -------------------------------------------------------------------------------- /decrypt.js: -------------------------------------------------------------------------------- 1 | #! /usr/bin/env node 2 | 3 | var fs = require('fs'); 4 | var openpgp = require('openpgp'); 5 | 6 | var profanity = require('./profanity.json'); 7 | var originalSymbols = require('./originalSymbols.json'); 8 | 9 | var ur_private_key = require('./your_keys.js').ur_private_key; 10 | var ur_private_key_pass = require('./your_keys.js').ur_private_key_pass; 11 | 12 | var privKey = openpgp.key.readArmored(ur_private_key).keys[0]; 13 | 14 | if (process.argv.length > 2) { 15 | var fileName = process.argv[2]; 16 | fs.readFile(fileName, {encoding: 'utf-8'}, function(err, data) { 17 | if (err) { 18 | throw err; 19 | } else { 20 | doDecrypt(data); 21 | } 22 | }); 23 | } else { 24 | var encrypted = ["-----BEGIN PGP MESSAGE-----", 25 | "Version: Profanity-PGP VERSION", 26 | "Comment: https://github.com/mapmeld/profanity-pgp", 27 | "", 28 | "dipshit asshat dumbfuck hipster dumbass tit douchebag damn asshole schmuck horseshit bastard ass douchebag shitfaced dickhead dumbass motherfucking bitch dumbass damn ass dickhead fuckwad frak fucker twat damn dumbfuck bitch dildo poppycock dickhead shitstorm pissant douche cunt cunt piss piss slut wanker dumbfuck balls twat bitchy bastard fuckwad nsa-hugging tit douchebag fuck shitty motherfucker dickhead jackass shitter slut skank shitstorm", 29 | "fuck fuck asshole santorum balls dick dumbfuck dickish whore motherfucking bitchy whore asshole dickbag horseshit voldemort fuck wanker fucker darn frak shitstain fucking asshat anal bitchy ass git asshole dongle dumbfuck dickhead motherfucking dickish bitch fuckwad douche horseshit bitch fanny dick santorum balls fuckwad hippie ass dick bitch turd asshat fucking shitfaced darn dickbag douchebag ass whore asshat fucking bastard", 30 | "wanker fucker bullshit dongle whore dildo shit shitty fuck dumbass bitch pissant crap slut bitchy damn slut shitter shit schmuck motherfucker santorum balls fucker asshat crap wanker bitch hipster bitch hippie pussy balls pussy cunt dipshit crappy pissant shit pussy asshole jackass motherfucker ass dildo skank shitstain shitty bullshit pussy nsa-hugging pussy goddamn shit dickhead voldemort tit goddamn frak damn", 31 | "dickish dongle git darn bullshit dick shitstain shitfaced dildo hipster fucker schmuck motherfucking tit balls jackass crappy hipster twat motherfucker horseshit piss dumbfuck fuck anal motherfucking fanny dildo douche dumbass horseshit pissant bollocks tit hellish crap dongle shitter dickhead horseshit dongle asshat voldemort skank cuntpunter goddamn santorum turd motherfucking shitter twat anal anal jackass poppycock voldemort shitstorm crap hippie motherfucker", 32 | "whore voldemort cuntpunter asshole dipshit bitch balls douchebag bullshit fanny dumbass nsa-hugging asshole damn santorum bitch cuntpunter bastard crappy anal cuntpunter darn dickhead anal piss pissant shitter turd hippie jackass shitstain schmuck shitfaced asshat nsa-hugging dumbass hipster crappy cunt pissant hippie santorum bullshit asshat asshole bitchy jackass bitch fucker douche shitstain skank wanker shitstain douchebag bastard shitter pussy voldemort slut", 33 | "asshole dongle schmuck hellish cunt frak hipster ass dickish fucking balls dumbfuck bullshit shitty dickish hippie crap dipshit turd git hippie schmuck dumbass cuntpunter poppycock shitstorm cunt fuck dickbag turd jackass cock fuck twat nsa-hugging shit bitch cunt douchebag crap damn asshole douchebag dickhead asshat bullshit slut asshole nsa-hugging wanker hellish fuckwad tit dickhead schmuck motherfucking darn darn dickhead shitstorm", 34 | "crappy dickhead goddamn cunt dumbass santorum shit shitstorm shitstain fuck anal shitty dildo shitty turd pussy bitchy shitstorm bollocks motherfucking bullshit darn shitty bastard fucker asshat git dickish dickish schmuck goddamn jackass fucking hippie dick schmuck bastard wanker turd ass fanny cock goddamn pussy slut shitstorm turd fuck hipster motherfucker dickhead schmuck dipshit schmuck dumbfuck douchebag damn shitstorm dickbag twat", 35 | "asshole twat dumbfuck dickbag fucker poppycock frak fuck wanker frak hippie turd schmuck shitty whore dipshit dipshit dickish dick bullshit skank damn shit cunt ass skank bullshit schmuck pussy git git dongle shit schmuck fucker shitstain crap bitchy dumbass piss piss dickhead fuckwad tit nsa-hugging whore pussy dickbag turd balls asshat crap wanker dumbfuck hipster wanker bullshit bastard cunt bitch", 36 | "shitty ass twat cunt cuntpunter bitchy shit damn pissant dongle twat dick bastard douchebag hippie fuck frak hipster douchebag bitchy douchebag bitch whoring whoring", 37 | "whoring hipster dickish crappy pissant", 38 | "-----END PGP MESSAGE-----"].join("\n"); 39 | doDecrypt(encrypted); 40 | } 41 | 42 | function doDecrypt(encrypted) { 43 | var deprofaned = encrypted.split("\n"); 44 | for(var l = 4; l < deprofaned.length - 1; l++) { 45 | var original_line = deprofaned[l].split(' '); 46 | var new_line = ""; 47 | for(var sym = 0; sym < original_line.length; sym++) { 48 | var symbol_index = profanity.indexOf(original_line[sym]); 49 | new_line += originalSymbols[symbol_index]; 50 | } 51 | deprofaned[l] = new_line; 52 | } 53 | deprofaned = deprofaned.join('\n'); 54 | 55 | var message = openpgp.message.readArmored(deprofaned); 56 | var keyids = message.getEncryptionKeyIds(); 57 | privKey.decryptKeyPacket(keyids, ur_private_key_pass); 58 | 59 | openpgp.decryptMessage(privKey, message).then(function(pgpMessage) { 60 | console.log(pgpMessage); 61 | }).catch(function(err) { 62 | throw err; 63 | }); 64 | } 65 | -------------------------------------------------------------------------------- /your_keys.js: -------------------------------------------------------------------------------- 1 | exports.ur_private_key = [ 2 | '-----BEGIN PGP PRIVATE KEY BLOCK-----', 3 | 'Version: GnuPG v1', 4 | '', 5 | 'lQO+BFRnrwgBCACukxtBb7sUqi9TV2CoOwaJs7z9MVacUS3540/reM8tcawFl2pX', 6 | '3mCi/LXeqfbm4UVM5ij4VUzoG9iDAwTk31tGuEW2I+tdB+dRVGUosqgOz2PsnUR5', 7 | '2gHrXaXxDu26+zHVBtIJWj89i4KmjTE3zBdCH4p9WEf2XF2hAJU+DSJcEMyuV84P', 8 | '0ILkicIKW5jatbRrQWRnTPMnnRWoHNsuhm4/d/cys4nwZsXnS1rswQJd7uTIyhba', 9 | 'znLnINpHQIaXNsOld5GFpjN8Iz5GeKABjN39ikyICHIYfTtdoBbLhO/bPbN8NTBx', 10 | 'O4SbjNmutzI7JOlofcwWUOacb4//1++hg735ABEBAAH+AwMCtY69pBq7uQpgPRMZ', 11 | 'kNo7I3SP6IzzJ3YMasOVHYhLWzhPRiCONgN9xIH69xQmTUKGnjWWN5WRim+W0CTT', 12 | 'kG/pjRESjqLrtDHnozCskh1S23jFR2WazibRJrGa0vUwJ5qSkMWjzL2thUauB2hU', 13 | 'irX9jK0JMqmgh1cAjJPmZ7WSfBt3+ekqNgI4yfOi+SSTvnC8GynEAIbSaWBaAYI/', 14 | 'kqy12Z9jGu+P1mG2R4c976wKMtLF+DnbG1c9fezMfX2ZWXV1PbL5tXa5QJAqEiRR', 15 | '3ex2XwmwrTHoOOr0ZmcCxkFZ63OV447Hi30IiOoBumYX/SP41XAZjGGE/xw0Th6y', 16 | 'HZ9qRpT8WtQz0Tl/fy5FvxYXaBmiO6pErYWwnOhAelJ5s9dAmawns5k/i3wAChEP', 17 | 'drO7zc61xgXDDt3+faql8ojCQTDCfXWfmklIjjeS0QVxb/kY3UJldAEFoWEWGf2W', 18 | 'rG8/WW+WnkqOyKB57Obp5mIcykdB9fVLHQGsaMLZsXnhXVbJ3g3clNBTvmQwaYod', 19 | 'tD6hR+6gRO1XGNGmwmTlt8OzLQWt/gv8vX1MVQ7IfkqKbu2TeiF/Sj+fDlKHrGsu', 20 | 'Sn0T5xf3XtSipGIucdWpH6G+PuCEMqABNZPKpvPemAR6U6oSNWk0iEisN++xp1ML', 21 | 'Uo+aFGYhybpOtfQ+CStOD70wCybg4T1/hhz6T8SqVuFECs0Wq086RQYw9FdepcCL', 22 | 'cIB25boaZEANopT4dk9SnOOOci88Z1bMZk9M287CVL/pcFfitSyEdsPVBMuo5XNo', 23 | 'IMI051ne+6AG9S8I85demrlJAtv+jqQ9wPLVEgC9ZYvz/zb/j+adMdZhvexh1Zfu', 24 | 'r83jEpwIZs5PGPxJPRyk4YV0ZdZWnLxez3ffFntgI4/mZuPEqOeA94LWRtFddhIB', 25 | 'r7QtTmljayBNYXBtZWxkIChIZWxsbyB3b3JsZCkgPG5pY2tAbWFwbWVsZC5jb20+', 26 | 'iQE4BBMBAgAiBQJUZ68IAhsDBgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAb', 27 | 'HMBBRPKHT2+CB/4j6CJ64M/6/bKAaBtsjuxR7ByPbkL3GJmTvY4ybm8ro6QNxHjK', 28 | 'IHQjxMkM/hvui8/eWjjUh6eOC0Guq/UNbEq+cE6yo4TeSDavLu8DFQk9uk9h2Gt+', 29 | 'fgMj6j/C0/EXRerxhLA4wOyp11xdGb5d7HEDMuOGzYcsPqqdhS3KxvKdN6HpGwoO', 30 | 'gGbKE8JA4v7g8wqqsTQKanTI2CzvTaQK70Dgisd06Ny0FsEFNV6rLEu/o9fYDuqI', 31 | 'JDa+32zR5hVJnBpDUm+pw366tOCAraMVMgsdgli3FLi1qLm0U59DaN6LYaN4ATM8', 32 | 'cJdiyQhkWc++biPMqQpSz37Un0Z6EiDuWMiUnQO+BFRnrwgBCADNAmUvWCaOEv7C', 33 | 'fOUd6zXIBgm5Q4YGUX+Jb9o0a5BBKXS4w74q5m16jWgzLZRvsPahRxEyL0i6XJhh', 34 | 'Qqq/OMybLNrGSE7MjDipRrsgkleT6D1+jQaDIJ50PtH4zT/I0C2c2MVC9gGm7VTC', 35 | 'Tvw2iIm1I8dugeBztSQ8JDyzsb9+lhoNw4iINA/036SlWOF7JschBnIvX2IiVkX+', 36 | 'kIbMSHGttBDki1tSGbT8ys9d78QdJlQvWsWRcZp0x6YjGI4+nTcrL0OZTDCuP0Sn', 37 | 'fAJGscdFDfdDzf142VcV8Cy+md3xxmBFBCQRKSLigk40klSU7dMA1vVroqBRqcIQ', 38 | 'R61w5juNABEBAAH+AwMCtY69pBq7uQpguIu35YcDFGs4YA1XwkRo/499Rb8e73ri', 39 | 'wEIlW434KDccQE/REMQUTxf4Tn50hc4SkejbWzIy6epVhQIMvmUliuD0VVRgDXbG', 40 | '0Uxc+HFFjAiAiPr2c6B3Z3Y9VvqzX/+vY1AgXZ0YdZ9h3cxcw3t79kDyixPxtlop', 41 | 'SVxRrBMu/LtvDefDt4TIk7bcCsl6+KVknTOVLZhdc0WeBVlibWQuuHRryDFhWZWx', 42 | '2Q6cTmesKST1iEbA/dFwoNjRZHjsOmKSPchamYr9VcWEuaKFIxbJ61QPScIo/Jmp', 43 | 'sFhRV+GQz1Uln+VZ9nBpaXlVbs/NIlGbxVITArg+R3VHezwWbHvNzlY29TUrg3+C', 44 | 'cCso4YDzb5/8rRKuUVqB144ocAZ6q2nBI3TgrA9q58kXUYOh9GPmof+j5CTW7JhL', 45 | 'Cc0eY2SqO4skllsFhBz77ZUbBvruslqusEqTFG1jma6C9QLz6HRfYGDsPWsJWotV', 46 | 'sOMxRM1urKL8MMmMp1sp6m0seKEiBrJ8dEYdsflPyHI5rkeUmR6prs425aJ4L643', 47 | 'W1THBvwDGyQ9yuGYY3R8yDebrccj1bRsAVDgoqsaf0KEId22pIjkVox3USAqM4Zj', 48 | 'HeO+IuC8Uazjd0LWQxmer9YcGiTv9hGeQm1/L17OuXlWbOAUn3NUZ5Xz/KcbVmz3', 49 | 'QhW/tD4Xdiz1e8gryjvFsi9OzXYRG37nmehQHovL1mmfsNOG2HW4ZtIZv+55/4Z+', 50 | 'zgwClHe1XYjGc5LDVm9ldgNWc5E6tkUtxSiU5CGuQUWL/AX7iQmY/s1fV/g/wJwp', 51 | 'F4IxORbZWt6mtFs4f83Jf1pSc+XkLhPlUGHwDq5mi1f6BpIVvBPtN29oS8L8h07x', 52 | 'Xi6TYMogt4LbiWmsuu4MSrQHBci6RxiDXRPsr4kBHwQYAQIACQUCVGevCAIbDAAK', 53 | 'CRAbHMBBRPKHTzY1B/9B5ncSQCREhNfSQO4DVEk81bCGLmMrBYFAbmD0RtZSd6+h', 54 | 'RsLmjFeoScBaXQsJfrQCT/kx0rZihxQmKVca+SA01SNAcYlWCiPjGaaOSxm2Me35', 55 | 'QQkIwsKrObNNyCDkNRyV0oxAnXzqy7dPZ/Uo/Wco/lU3GhN5nbC5WpkqC55KvanQ', 56 | 'Tb+0aDFL2jDyAiQHWk9lpYAKN/hxe76faqIC1S4lXXff0P8yf6031iVLHF6K7knU', 57 | 'Yq+N4wfZEW3h5+SfTrFmv5ULnyEWw5H6ZFdmMR/7tKutydH/mdWQJd8wsXHzBVSO', 58 | 'QQJOHvuKwzlyUnzVid5Wm/uAiZ8/X2o9q0Ur+q8x', 59 | '=uoH3', 60 | '-----END PGP PRIVATE KEY BLOCK-----' 61 | ].join('\n'); 62 | 63 | exports.ur_private_key_pass = 'Wednesday'; 64 | 65 | exports.ur_public_key = [ '-----BEGIN PGP PUBLIC KEY BLOCK-----', 66 | 'Version: GnuPG v1', 67 | '', 68 | 'mQENBFRnrwgBCACukxtBb7sUqi9TV2CoOwaJs7z9MVacUS3540/reM8tcawFl2pX', 69 | '3mCi/LXeqfbm4UVM5ij4VUzoG9iDAwTk31tGuEW2I+tdB+dRVGUosqgOz2PsnUR5', 70 | '2gHrXaXxDu26+zHVBtIJWj89i4KmjTE3zBdCH4p9WEf2XF2hAJU+DSJcEMyuV84P', 71 | '0ILkicIKW5jatbRrQWRnTPMnnRWoHNsuhm4/d/cys4nwZsXnS1rswQJd7uTIyhba', 72 | 'znLnINpHQIaXNsOld5GFpjN8Iz5GeKABjN39ikyICHIYfTtdoBbLhO/bPbN8NTBx', 73 | 'O4SbjNmutzI7JOlofcwWUOacb4//1++hg735ABEBAAG0LU5pY2sgTWFwbWVsZCAo', 74 | 'SGVsbG8gd29ybGQpIDxuaWNrQG1hcG1lbGQuY29tPokBOAQTAQIAIgUCVGevCAIb', 75 | 'AwYLCQgHAwIGFQgCCQoLBBYCAwECHgECF4AACgkQGxzAQUTyh09vggf+I+gieuDP', 76 | '+v2ygGgbbI7sUewcj25C9xiZk72OMm5vK6OkDcR4yiB0I8TJDP4b7ovP3lo41Ien', 77 | 'jgtBrqv1DWxKvnBOsqOE3kg2ry7vAxUJPbpPYdhrfn4DI+o/wtPxF0Xq8YSwOMDs', 78 | 'qddcXRm+XexxAzLjhs2HLD6qnYUtysbynTeh6RsKDoBmyhPCQOL+4PMKqrE0Cmp0', 79 | 'yNgs702kCu9A4IrHdOjctBbBBTVeqyxLv6PX2A7qiCQ2vt9s0eYVSZwaQ1JvqcN+', 80 | 'urTggK2jFTILHYJYtxS4tai5tFOfQ2jei2GjeAEzPHCXYskIZFnPvm4jzKkKUs9+', 81 | '1J9GehIg7ljIlLkBDQRUZ68IAQgAzQJlL1gmjhL+wnzlHes1yAYJuUOGBlF/iW/a', 82 | 'NGuQQSl0uMO+KuZteo1oMy2Ub7D2oUcRMi9IulyYYUKqvzjMmyzaxkhOzIw4qUa7', 83 | 'IJJXk+g9fo0GgyCedD7R+M0/yNAtnNjFQvYBpu1Uwk78NoiJtSPHboHgc7UkPCQ8', 84 | 's7G/fpYaDcOIiDQP9N+kpVjheybHIQZyL19iIlZF/pCGzEhxrbQQ5ItbUhm0/MrP', 85 | 'Xe/EHSZUL1rFkXGadMemIxiOPp03Ky9DmUwwrj9Ep3wCRrHHRQ33Q839eNlXFfAs', 86 | 'vpnd8cZgRQQkESki4oJONJJUlO3TANb1a6KgUanCEEetcOY7jQARAQABiQEfBBgB', 87 | 'AgAJBQJUZ68IAhsMAAoJEBscwEFE8odPNjUH/0HmdxJAJESE19JA7gNUSTzVsIYu', 88 | 'YysFgUBuYPRG1lJ3r6FGwuaMV6hJwFpdCwl+tAJP+THStmKHFCYpVxr5IDTVI0Bx', 89 | 'iVYKI+MZpo5LGbYx7flBCQjCwqs5s03IIOQ1HJXSjECdfOrLt09n9Sj9Zyj+VTca', 90 | 'E3mdsLlamSoLnkq9qdBNv7RoMUvaMPICJAdaT2WlgAo3+HF7vp9qogLVLiVdd9/Q', 91 | '/zJ/rTfWJUscXoruSdRir43jB9kRbeHn5J9OsWa/lQufIRbDkfpkV2YxH/u0q63J', 92 | '0f+Z1ZAl3zCxcfMFVI5BAk4e+4rDOXJSfNWJ3lab+4CJnz9faj2rRSv6rzE=', 93 | '=up2w', 94 | '-----END PGP PUBLIC KEY BLOCK-----' 95 | ].join("\n"); 96 | --------------------------------------------------------------------------------