def test_aes_on_char(self): key = convert.base642bytearray(u'nm5/wK20R45AUtetHJwHTdOigvGTxP7NcH/41YE8AZo=') encrypted = aes_crypto.encrypt("kyle", key, salt=convert.base642bytearray("AehqWt1OdEgPJhCx6uylyg==")) self.assertEqual( json2value(encrypted.decode('utf8')), json2value(u'{"type": "AES256", "length": 4, "salt": "AehqWt1OdEgPJhCx6uylyg==", "data": "FXUGxdb9E+4UCKwsIT9ugQ=="}') )
def decrypt(data, _key): """ ACCEPT JSON OF ENCRYPTED DATA {"salt":s, "length":l, "data":d} """ from pyLibrary.queries import jx # Key and iv have not been generated or provided, bail out if _key is None: Log.error("Expecting a key") _input = convert.json2value(data) # Initialize encryption using key and iv key_expander_256 = key_expander.KeyExpander(256) expanded_key = key_expander_256.expand(_key) aes_cipher_256 = aes_cipher.AESCipher(expanded_key) aes_cbc_256 = cbc_mode.CBCMode(aes_cipher_256, 16) aes_cbc_256.set_iv(convert.base642bytearray(_input.salt)) raw = convert.base642bytearray(_input.data) out_data = bytearray() for _, e in jx.groupby(raw, size=16): out_data.extend(aes_cbc_256.decrypt_block(e)) return str(out_data[:_input.length:]).decode("utf8")
def test_aes_nothing(self): key = convert.base642bytearray(u'nm5/wK20R45AUtetHJwHTdOigvGTxP7NcH/41YE8AZo=') encrypted = aes_crypto.encrypt("", key, salt=convert.base642bytearray("AehqWt1OdEgPJhCx6uylyg==")) self.assertEqual( json2value(encrypted.decode('utf8')), json2value(u'{"type": "AES256", "length": 0, "salt": "AehqWt1OdEgPJhCx6uylyg=="}') )
def __init__(self, filename, buffering=2 ** 14, suffix=None): """ YOU MAY SET filename TO {"path":p, "key":k} FOR CRYPTO FILES """ if filename == None: from pyLibrary.debugs.logs import Log Log.error("File must be given a filename") elif isinstance(filename, basestring): self.key = None if filename.startswith("~"): home_path = os.path.expanduser("~") if os.sep == "\\": home_path = home_path.replace(os.sep, "/") if home_path.endswith("/"): home_path = home_path[:-1] filename = home_path + filename[1::] self._filename = filename.replace(os.sep, "/") # USE UNIX STANDARD else: self.key = convert.base642bytearray(filename.key) self._filename = "/".join(filename.path.split(os.sep)) # USE UNIX STANDARD while self._filename.find(".../") >= 0: # LET ... REFER TO GRANDPARENT, .... REFER TO GREAT-GRAND-PARENT, etc... self._filename = self._filename.replace(".../", "../../") self.buffering = buffering if suffix: self._filename = File.add_suffix(self._filename, suffix)
def __init__(self, filename, buffering=2**14, suffix=None): """ YOU MAY SET filename TO {"path":p, "key":k} FOR CRYPTO FILES """ if filename == None: from pyLibrary.debugs.logs import Log Log.error("File must be given a filename") elif isinstance(filename, basestring): self.key = None if filename.startswith("~"): home_path = os.path.expanduser("~") if os.sep == "\\": home_path = home_path.replace(os.sep, "/") if home_path.endswith("/"): home_path = home_path[:-1] filename = home_path + filename[1::] self._filename = filename.replace(os.sep, "/") # USE UNIX STANDARD else: self.key = convert.base642bytearray(filename.key) self._filename = "/".join(filename.path.split( os.sep)) # USE UNIX STANDARD while self._filename.find(".../") >= 0: # LET ... REFER TO GRANDPARENT, .... REFER TO GREAT-GRAND-PARENT, etc... self._filename = self._filename.replace(".../", "../../") self.buffering = buffering if suffix: self._filename = File.add_suffix(self._filename, suffix)
def test_aes_on_char(self): key = convert.base642bytearray(u'nm5/wK20R45AUtetHJwHTdOigvGTxP7NcH/41YE8AZo=') encrypted = crypto.encrypt("kyle", key, salt=convert.base642bytearray("AehqWt1OdEgPJhCx6uylyg==")) self.assertEqual(encrypted, u'{"type": "AES256", "length": 4, "salt": "AehqWt1OdEgPJhCx6uylyg==", "data": "FXUGxdb9E+4UCKwsIT9ugQ=="}')
def test_aes_nothing(self): key = convert.base642bytearray(u'nm5/wK20R45AUtetHJwHTdOigvGTxP7NcH/41YE8AZo=') encrypted = crypto.encrypt("", key, salt=convert.base642bytearray("AehqWt1OdEgPJhCx6uylyg==")) self.assertEqual(encrypted, u'{"type": "AES256", "length": 0, "salt": "AehqWt1OdEgPJhCx6uylyg=="}')