Bit of code cleanup and commenting

This commit is contained in:
ChaoticByte 2024-06-24 18:38:55 +02:00
parent 8b0766b719
commit 1c6ce76c11
No known key found for this signature in database

View file

@ -3,39 +3,37 @@
from multiprocessing import Pool from multiprocessing import Pool
CHUNKSIZE = 1024 * 4 CHUNKSIZE = 1024 * 4
def _obf(args) -> bytearray: def _obf(args) -> bytearray:
data_chunk, key, decrypt, iterations = args data_chunk, key, decrypt, iterations = args
len_data = len(data_chunk) l_data = len(data_chunk)
len_key = len(key) l_key = len(key)
for _ in range(iterations): for _ in range(iterations):
# shift (encrypt) # shift (encrypt)
if not decrypt: if not decrypt:
for i in range(len_data): for i in range(l_data):
n = key[i % len_key] n = key[i % l_key]
data_chunk[i] = (data_chunk[i] + n) % 256 data_chunk[i] = (data_chunk[i] + n) % 256
# transpose # transpose
# list of tuples that stores transposition data (from, to): # list of tuples that stores transposition data (from, to):
swap_indices = [] # (this is extremely memory inefficient lol) tp = [] # (this is extremely memory inefficient for large chunksizes)
k = 0 k = 0
for i in range(len_data): for i in range(l_data):
k += i + key[i % len_key] # we add to k k += i + key[i % l_key] # we add to k
j = k % len_data # and use it to make cryptanalysis harder (I think?) j = k % l_data # and use k here (more obfuscation)
swap_indices.append((i, j)) # store transposition data tp.append((i, j)) # store transposition data
if decrypt: if decrypt:
swap_indices.reverse() tp.reverse()
for a, b in swap_indices: for a, b in tp:
# swap values # swap values
a_ = data_chunk[a] data_chunk[a], data_chunk[b] = data_chunk[b], data_chunk[a]
b_ = data_chunk[b]
data_chunk[a] = b_
data_chunk[b] = a_
# unshift (decrypt) # unshift (decrypt)
if decrypt: if decrypt:
for i in range(len_data): for i in range(l_data):
n = key[i % len_key] n = key[i % l_key]
b = data_chunk[i] - n b = data_chunk[i] - n
while b < 0: while b < 0:
b = 256 + b b = 256 + b
@ -51,21 +49,20 @@ def obf(data: bytes, key: bytes, decrypt: bool = False, iterations: int = 8, pro
assert type(processes) == int assert type(processes) == int
data = bytearray(data) data = bytearray(data)
key = bytearray(key) key = bytearray(key)
len_data_complete = len(data) # split into chunks
chunks = [] chunks = []
p = 0 p = 0
while p < len_data_complete: while p < len(data):
p_new = p + CHUNKSIZE p_new = p + CHUNKSIZE
chunk = data[p:p_new] chunk = data[p:p_new]
chunks.append((chunk, key, decrypt, iterations)) chunks.append((chunk, key, decrypt, iterations))
p = p_new p = p_new
# don't need that anymore
del data del data
# create mp pool and process
pool = Pool(processes=4) pool = Pool(processes=4)
results = pool.map(_obf, chunks) results = pool.map(_obf, chunks)
# don't need that anymore
del chunks del chunks
# done
return bytes(b''.join(results)) return bytes(b''.join(results))