diff --git a/__pycache__/xorCorrelator.cpython-38.pyc b/__pycache__/xorCorrelator.cpython-38.pyc new file mode 100644 index 0000000..20f9312 Binary files /dev/null and b/__pycache__/xorCorrelator.cpython-38.pyc differ diff --git a/xorCorrelator.py b/xorCorrelator.py new file mode 100644 index 0000000..0270bed --- /dev/null +++ b/xorCorrelator.py @@ -0,0 +1,41 @@ +import secrets + +def xor(a: bytes, b: bytes): + if len(a)!=len(b): + raise Exception("Bad Length") + return bytes([a[i]^b[i] for i in range(len(a))]) + +def cbcXor(blocks, key: bytes, iv: bytes = None, BS=16): + if len(key)!=BS: + raise Exception("Bad key len") + if not iv: + iv = secrets.token_bytes(16) + lastBlock = iv + res = [] + for block in blocks: + if len(block)!=BS: + raise Exception("Bad block length") + mid = xor(block, lastBlock) + enc = xor(mid, key) + lastBlock = enc + res.append(enc) + return res + +def decCbcXor(blocks, key: bytes, iv: bytes = None, BS=16): + if len(key)!=BS: + raise Exception("Bad key len") + if not iv: + iv = secrets.token_bytes(16) + lastBlock = iv + res = [] + for block in blocks: + if len(block)!=BS: + raise Exception("Bad block length") + mid = xor(block, key) + enc = xor(mid, lastBlock) + lastBlock = block + res.append(enc) + return res + +def randBlocks(num: int = 64): + return [secrets.token_bytes(16) for i in range(num)]