from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Hash import SHA256

class Encryptor:

    def __init__(self,key):
        self.key = key

    @staticmethod
    def derive_key(password):
        return SHA256(password).digest()

    def encrypt(self,data):
        encryptor = AES.new(self.key, AES.MODE_GCM)
        (ciphertext, tag) = encryptor.encrypt_and_digest(data)
        nonce = encryptor.nonce
        return (ciphertext,tag)

    def decrypt(self,data):
        encryptor = AES.new(self.key, AES.MODE_CBC)
        return encryptor.decrypt(data)



if __name__ == "__main__":
    enc = Encryptor(Encryptor.derive_key("abc123"))
    ciphertext = enc.encrypt("Hello world")
    print enc.decrypt(ciphertext) == "Hello world"