utage: encryption/decryption tool

This commit is contained in:
louis 2018-05-28 01:02:14 +09:00
parent 9a8bb4f89e
commit 71e8c9d257
4 changed files with 242 additions and 0 deletions

46
utage/utage.py Normal file
View file

@ -0,0 +1,46 @@
import glob
import io
import traceback
from functools import partial
from multiprocessing.pool import Pool
from os import path
from . import crypt
def crypt_dir(dir_in, key, encrypt=False, no_compress=False):
if not encrypt:
files = glob.glob(path.join(dir_in, "**/*.utage"), recursive=True)
else:
files = glob.glob(path.join(dir_in, "**/*.tsv"), recursive=True)
if len(files) == 0:
raise FileNotFoundError("No valid files found in directory: " + dir_in)
pcrypt = partial(crypt_file, key=key, encrypt=encrypt, no_compress=no_compress)
with Pool() as p:
p.map(pcrypt, files)
def crypt_file(file_in, key, encrypt=False, no_compress=False):
with open(file_in, "rb") as inf:
in_data = inf.read()
try:
if encrypt:
if not file_in.endswith(".png") and not file_in.endswith(".tsv"):
raise ValueError("Invalid File Type for {}".format(file_in))
if not file_in.endswith(".png") and not no_compress:
enc_data = crypt.compress(in_data)
enc_data = crypt.xor_crypt(enc_data, key)
with io.open(file_in + ".utage", "wb") as output:
output.write(enc_data)
else:
if not file_in.endswith(".utage"):
raise ValueError("Invalid File Type for {}".format(file_in))
dec_data = crypt.xor_crypt(in_data, key)
if not file_in.endswith(".png.utage") and not no_compress:
dec_data = crypt.decompress(dec_data)
with io.open(file_in.replace(".utage", ""), "wb") as output:
output.write(dec_data)
except Exception as e:
traceback.print_exc()
print("Error processing file: " + file_in)