diff --git a/kaitaistruct.py b/kaitaistruct.py index ba23713..8290c86 100644 --- a/kaitaistruct.py +++ b/kaitaistruct.py @@ -217,23 +217,11 @@ def read_strz(self, encoding, term, include_term, consume_term, eos_error): @staticmethod def process_xor_one(data, key): - r = bytearray(data) - for i in range(len(r)): - r[i] ^= key - return bytes(r) + return bytes(bytearray(v ^ key for v in bytearray(data))) @staticmethod def process_xor_many(data, key): - r = bytearray(data) - k = bytearray(key) - ki = 0 - kl = len(k) - for i in range(len(r)): - r[i] ^= k[ki] - ki += 1 - if ki >= kl: - ki = 0 - return bytes(r) + return bytes(bytearray(a ^ b for a, b in map(bytearray, zip(data, key)))) @staticmethod def process_rotate_left(data, amount, group_size):