Source code for CryptographicFields.cryptography

from django.conf import settings
from .utils import LengthError
from Crypto.Cipher import AES
[docs]def get_key(settings)->str: """ Gets the encryption for encrypting & decrypting data. Gets value from ENCRYPTION_KEY & if not defined then from SECRET_KEY Checks the len of the key id less than 50 then raise LengthError :raises LengthError: It raises when the len of Encryption is less than 50 chars :return: Key for cryptography :rtype: str """ try: cipher_key=settings.ENCRYPTION_KEY except AttributeError: cipher_key=settings.SECRET_KEY finally: if len(cipher_key) < 50: raise LengthError(len(cipher_key)) else: return cipher_key
[docs]def type_check(string)->bytearray: """ Checks weather the inputed data is in correct format which is required for encryption & decryption. Checks weather the inputed data is in correct format which is required for encryption & decryption. Which is in this case is bytearray :param string: Data from User :type string: Any :return: bytes :rtype: bytearray """ if isinstance(string,bytearray): return string elif isinstance(string,bytes): return bytearray(string) else: return bytearray(str(string),"UTF-8")
[docs]def to_hex(string)->hex: # converts bytes to hex """ Converts bytes to hex Converts the bytes received after encryption to hex for storing it in database :param string: encrypted bytes :type string: bytes :return: hexify the bytes :rtype: hex """ return bytearray(string).hex()
[docs]def from_hex(hexstring)->bytearray: #converts hex to bytearray """ converts hex to bytearray Converts the hex string received from databse to bytes for decryption :param hexstring: hex string recieved from database :type hexstring: hex :return: bytes from hex string :rtype: bytearray """ return bytearray.fromhex(hexstring)
[docs]def encrypt(string)->hex: """ Encrypts the data Encrypts the data recieved from user using AES-256 CFB :param string: Data from User :type string: Any :return: the hex of the encrypted string :rtype: hex """ # encrypts the data & returns it return to_hex(AES.new(type_check(get_key(settings)[:32]),AES.MODE_CFB,type_check(get_key(settings)[-16:])).encrypt(type_check(string)))
[docs]def decrypt(hexstring)->bytearray: # decrypts the data & returns it """ Decrypts the data Decrypts the data recieved from database using AES-256 CFB :param hexstring: hex string recieved from database :type hexstring: hex :return: bytes of decrypted string :rtype: bytearray """ return bytearray(AES.new(type_check(get_key(settings)[:32]),AES.MODE_CFB,type_check(get_key(settings)[-16:])).decrypt(type_check(from_hex(hexstring))))