| @@ -1,6 +1,8 @@ | |||||
| # -*- coding: utf-8 -*- | # -*- coding: utf-8 -*- | ||||
| # Cryptography functions (hashing and cyphers). | |||||
| """ | |||||
| Cryptography functions (hashing and cyphers) for EarwigBot IRC. | |||||
| """ | |||||
| import hashlib | import hashlib | ||||
| @@ -19,11 +21,11 @@ class Cryptography(BaseCommand): | |||||
| elif command == "encrypt": | elif command == "encrypt": | ||||
| return ("Encrypt any string with a given key using an " + | return ("Encrypt any string with a given key using an " + | ||||
| "implementation of Blowfish, e.g. '!encrypt some_key " + | "implementation of Blowfish, e.g. '!encrypt some_key " + | ||||
| "Hello world!'.") | |||||
| "Hello!'.") | |||||
| else: | else: | ||||
| return ("Decrypt a string with a given key using a given " + | |||||
| "algorithm, e.g. '!decrypt blowfish some_key Hello " + | |||||
| "world!'.") | |||||
| return ("Decrypt any string with a given key using an " + | |||||
| "implementation of Blowfish, e.g. '!decrypt some_key " + | |||||
| "762cee8a5239548af18275d6c1184f16'.") | |||||
| def check(self, data): | def check(self, data): | ||||
| if data.is_command and data.command in ["hash", "encrypt", "decrypt"]: | if data.is_command and data.command in ["hash", "encrypt", "decrypt"]: | ||||
| @@ -53,11 +55,24 @@ class Cryptography(BaseCommand): | |||||
| else: | else: | ||||
| key = data.args[0] | key = data.args[0] | ||||
| text = ' '.join(data.args[1:]) | text = ' '.join(data.args[1:]) | ||||
| if not text: | if not text: | ||||
| self.connection.reply(data, "that's a key, yes, but what do " + | |||||
| " you want me to {0}?".format(data.command)) | |||||
| self.connection.reply(data, ("a key was provided, but text " + | |||||
| "to {0} was not.").format(data.command)) | |||||
| return | return | ||||
| if data.command == "encrypt": | |||||
| self.connection.reply(data, blowfish.encrypt(key, text)) | |||||
| try: | |||||
| if data.command == "encrypt": | |||||
| result = blowfish.encrypt(key, text) | |||||
| else: | |||||
| result = blowfish.decrypt(key, text) | |||||
| except blowfish.KeyTooShortError: | |||||
| self.connection.reply(data, "key is too short.") | |||||
| except blowfish.KeyTooLongError: | |||||
| self.connection.reply(data, "key is too long.") | |||||
| except blowfish.IncorrectKeyError: | |||||
| self.connection.reply(data, "key is incorrect!") | |||||
| except blowfish.BadCyphertextError as e: | |||||
| self.connection.reply(data, "bad cyphertext: {0}.".format(e)) | |||||
| else: | else: | ||||
| self.connection.reply(data, blowfish.decrypt(key, text)) | |||||
| self.connection.reply(data, result) | |||||