# Path: python3-src/steem/aes.py
# class AESCipher(object):
#     """
#     A classical AES Cipher. Can use any size of data and any size of password thanks to padding.
#     Also ensure the coherence and the type of the data with a unicode to byte converter.
#     """
#     def __init__(self, key):
#         self.bs = 32
#         self.key = hashlib.sha256(AESCipher.str_to_bytes(key)).digest()
# 
#     @staticmethod
#     def str_to_bytes(data):
#         u_type = type(b''.decode('utf8'))
#         if isinstance(data, u_type):
#             return data.encode('utf8')
#         return data
# 
#     def _pad(self, s):
#         return s + (self.bs - len(s) % self.bs) * AESCipher.str_to_bytes(chr(self.bs - len(s) % self.bs))
# 
#     @staticmethod
#     def _unpad(s):
#         return s[:-ord(s[len(s) - 1:])]
# 
#     def encrypt(self, raw):
#         raw = self._pad(AESCipher.str_to_bytes(raw))
#         iv = Random.new().read(AES.block_size)
#         cipher = AES.new(self.key, AES.MODE_CBC, iv)
#         return base64.b64encode(iv + cipher.encrypt(raw)).decode('utf-8')
# 
#     def decrypt(self, enc):
#         enc = base64.b64decode(enc)
#         iv = enc[:AES.block_size]
#         cipher = AES.new(self.key, AES.MODE_CBC, iv)
#         return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')


import argparse
import shutil
import time
import os
import sqlite3
import logging
import random
import hashlib
from .aes import AESCipher
from appdirs import user_data_dir
from datetime import datetime
from binascii import hexlify
    password = ""
    decrypted_master = ""

    #: This key identifies the encrypted master password stored in the confiration
    config_key = "encrypted_master_password"

    def __init__(self, password):
        """ The encrypted private keys in `keys` are encrypted with a
            random encrypted masterpassword that is stored in the
            configuration.

            The password is used to encrypt this masterpassword. To
            decrypt the keys stored in the keys database, one must use
            BIP38, decrypt the masterpassword from the configuration
            store with the user password, and use the decrypted
            masterpassword to decrypt the BIP38 encrypted private keys
            from the keys storage!

            :param str password: Password to use for en-/de-cryption
        """
        self.password = password
        if self.config_key not in configStorage:
            self.newMaster()
            self.saveEncrytpedMaster()
        else:
            self.decryptEncryptedMaster()

    def decryptEncryptedMaster(self):
        """ Decrypt the encrypted masterpassword
        """

# Path: python3-src/steem/aes.py
# class AESCipher(object):
#     """
#     A classical AES Cipher. Can use any size of data and any size of password thanks to padding.
#     Also ensure the coherence and the type of the data with a unicode to byte converter.
#     """
#     def __init__(self, key):
#         self.bs = 32
#         self.key = hashlib.sha256(AESCipher.str_to_bytes(key)).digest()
# 
#     @staticmethod
#     def str_to_bytes(data):
#         u_type = type(b''.decode('utf8'))
#         if isinstance(data, u_type):
#             return data.encode('utf8')
#         return data
# 
#     def _pad(self, s):
#         return s + (self.bs - len(s) % self.bs) * AESCipher.str_to_bytes(chr(self.bs - len(s) % self.bs))
# 
#     @staticmethod
#     def _unpad(s):
#         return s[:-ord(s[len(s) - 1:])]
# 
#     def encrypt(self, raw):
#         raw = self._pad(AESCipher.str_to_bytes(raw))
#         iv = Random.new().read(AES.block_size)
#         cipher = AES.new(self.key, AES.MODE_CBC, iv)
#         return base64.b64encode(iv + cipher.encrypt(raw)).decode('utf-8')
# 
#     def decrypt(self, enc):
#         enc = base64.b64decode(enc)
#         iv = enc[:AES.block_size]
#         cipher = AES.new(self.key, AES.MODE_CBC, iv)
#         return self._unpad(cipher.decrypt(enc[AES.block_size:])).decode('utf-8')


# Path: python3-src/steem/storage.py
import argparse
import shutil
import time
import os
import sqlite3
import logging
import random
import hashlib
from .aes import AESCipher
from appdirs import user_data_dir
from datetime import datetime
from binascii import hexlify

    password = ""
    decrypted_master = ""

    #: This key identifies the encrypted master password stored in the confiration
    config_key = "encrypted_master_password"

    def __init__(self, password):
        """ The encrypted private keys in `keys` are encrypted with a
            random encrypted masterpassword that is stored in the
            configuration.

            The password is used to encrypt this masterpassword. To
            decrypt the keys stored in the keys database, one must use
            BIP38, decrypt the masterpassword from the configuration
            store with the user password, and use the decrypted
            masterpassword to decrypt the BIP38 encrypted private keys
            from the keys storage!

            :param str password: Password to use for en-/de-cryption
        """
        self.password = password
        if self.config_key not in configStorage:
            self.newMaster()
            self.saveEncrytpedMaster()
        else:
            self.decryptEncryptedMaster()

    def decryptEncryptedMaster(self):
        """ Decrypt the encrypted masterpassword
        """

        aes = AESCipher(self.password)