Module lib.tools.encryption

Encryption utility functions

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
""" Encryption utility functions """
import binascii
import hashlib
import tools.strings

aes_ = None
def aes(key, mode):
        """ AES object loaded on demand """
        global aes_
        if aes_ is None:
                import cryptolib
                aes_ = cryptolib.aes
        if len(key) % 16 != 0:
                key = (key*16)[:16]
        return  aes_(tools.strings.tobytes(key), mode)

def encrypt(buffer, key):
        """ AES encryption of buffer """
        data = binascii.b2a_base64(buffer)
        data = data.rstrip()
        if len(data) % 16 != 0:
                data = data + b"="*(16-len(data)%16)
        return aes(key,1).encrypt(tools.strings.tobytes(data))

def decrypt(buffer, key):
        """ AES decryption of buffer """
        data = aes(key, 1).decrypt(buffer)
        data = binascii.a2b_base64(tools.strings.tobytes(data))
        return data

def gethash(password):
        """ Get the hash associated to the password """
        hash_ = hashlib.sha256()
        hash_.update(password)
        return binascii.hexlify(hash_.digest())

Functions

def aes(key, mode)

AES object loaded on demand

Expand source code
def aes(key, mode):
        """ AES object loaded on demand """
        global aes_
        if aes_ is None:
                import cryptolib
                aes_ = cryptolib.aes
        if len(key) % 16 != 0:
                key = (key*16)[:16]
        return  aes_(tools.strings.tobytes(key), mode)
def decrypt(buffer, key)

AES decryption of buffer

Expand source code
def decrypt(buffer, key):
        """ AES decryption of buffer """
        data = aes(key, 1).decrypt(buffer)
        data = binascii.a2b_base64(tools.strings.tobytes(data))
        return data
def encrypt(buffer, key)

AES encryption of buffer

Expand source code
def encrypt(buffer, key):
        """ AES encryption of buffer """
        data = binascii.b2a_base64(buffer)
        data = data.rstrip()
        if len(data) % 16 != 0:
                data = data + b"="*(16-len(data)%16)
        return aes(key,1).encrypt(tools.strings.tobytes(data))
def gethash(password)

Get the hash associated to the password

Expand source code
def gethash(password):
        """ Get the hash associated to the password """
        hash_ = hashlib.sha256()
        hash_.update(password)
        return binascii.hexlify(hash_.digest())