"""! @brief Defines the encryption class.""" ## # @file Vermasseln.py # # @brief Defines the Vermasseln class. # # @section description_vermasseln Description # Defines the base class for the program encryption mechansim. # - Vermasseln (base class) # # @section libraries_configloader Libraries/Modules # - platform Python standard library # - Access to underlying platform’s identifying data. # - base64 Python standard library # - Provides functions for encoding binary data to printable ASCII characters and decoding such encodings back to binary data. # - random Python module # - Implements pseudo-random number generators for various distributions. # - string Python standard library # - Common string operations. # - Crypto Python package # - Provides cryptographic functionalities. # # @section notes_vermasseln Notes # - None. # # @section todo_vermasseln TODO # - None. # # @section author_vermasseln Author(s) # - Created by Linuxero on 03/14/2025. # - Modified by Linuxero on 03/14/2025. # # Copyright (c) 2025 Schnaxero. All rights reserved. from Crypto.Cipher import AES from base64 import b64encode, b64decode import platform from Crypto.Hash import SHA256, SHA3_512 # from Crypto.Protocol.KDF import PBKDF2 # from Crypto.Random import get_random_bytes import random import string class Vermasseln: """! The Vermasseln class. Defines the class utilized by different parts of the program. Handles the encryption/decryption of the whole program. """ def oscarVermasseln(self, data, local= True): """! Encrypts data. @param data The data to encrypt. @param local Is the encryption local to the host or not? @return encrypted data. """ b_data = data.encode("utf-8") cipher = self.__vermasslungsKobold(local) ciphertext, tag = cipher.encrypt_and_digest(b_data) decoded_data = [b64encode(x).decode("utf-8") for x in (ciphertext, tag)] storable_data = ".".join(decoded_data) return storable_data def entschluesseln(self, data, local = True): """! Decrypts data. @param data The data to decrypt. @param local Is the encryption local to the host or not? @return decrypted data on success, None on failure. """ try: data_list = data.split(".") encoded_data = [b64decode(x) for x in data_list] cipher = self.__vermasslungsKobold(local) decrypted_data = cipher.decrypt_and_verify(encoded_data[0], encoded_data[1]) decrypted_data = decrypted_data.decode("utf-8") except (ValueError, IndexError) as e: print(f"Configuration corrupted: {str(e)}") decrypted_data = None except Exception as e: print(str(e)) decrypted_data = None return decrypted_data def __vermasslungsKobold(self, local = True): """! Prepares the encryption key. @param local Is the encryption local to the host or not? @return encryption key. """ key = platform.processor().encode("utf-8") if local else b"(==daniishtverhaftetwegensexy#)" key = key[0:31] hash_key = SHA256.new(key) hashed = hash_key.digest() nonce = platform.machine().encode("utf-8") if local else b"(==Uskarishtverhaftetwegensexy#)" cipher = AES.new(hashed, AES.MODE_SIV, nonce = nonce) return cipher @classmethod def userPasswordHash(self, password, salt = None): """! Hashes data. @param password The data to hash. @param salt The salt to use if available. @return hashed data. """ if not salt: salt = "".join(random.choice(string.ascii_letters + string.digits) for i in range (32)) hash_pw = (salt + password).encode("utf-8") h_obj = SHA3_512.new(hash_pw) password = salt + "$" + h_obj.hexdigest() return password