For this challenge, you are given a single Python AST/CST file.
The first task is to convert it to Python code. Luckily, the file is a [LibCST](https://libcst.readthedocs.io/), not an [AST](https://docs.python.org/3/library/ast.html), so we can convert it byte for byte into code.
We get this code:```import binascii
plaintext = "REDACTED"
def exor(a, b):    temp = ""    for i in range(n):        if (a[i] == b[i]):            temp += "0"        else:            temp += "1"    return temp
def BinaryToDecimal(binary):    string = int(binary, 2)    return string
# encryptionPT_Ascii = [ord(x) for x in plaintext]
PT_Bin = [format(y, '08b') for y in PT_Ascii]PT_Bin = "".join(PT_Bin)
n = 26936K1 = ... # length n string of 0s and 1sK2 = ... # length n string of 0s and 1s
L1 = PT_Bin[0:n]R1 = PT_Bin[n::]
f1 = exor(R1, K1)R2 = exor(f1, L1)L2 = R1
f2 = exor(R2, K2)R3 = exor(f2, L2)L3 = R2
R3 = ... # length n string of 0s and 1sL3 = ... # length n string of 0s and 1s
cipher = L3+R3
# decryption (redacted)plaintext = L6+R6plaintext = int(plaintext, 2)plaintext = binascii.unhexlify('%x' % plaintext)print(plaintext)```
We are given K1, K2, L3, and R3, and we have to find L1 and R1. Then, we can concatenate L1 and R1, convert it to ASCII, and retrieve the flag.
`exor` is the classical XOR operation, so we can use the fact that `(a ^ b) ^ c == a ^ (b ^ c)`, to figure out f1, f2, L2, R2.
For example, ```R3 = f2 ^ L2R3 = R2 ^ K2 ^ L2R3 = R2 ^ K2 ^ R1R3 = L3 ^ K2 ^ R1R1 = L3 ^ K2 ^ R3```
We can use a similar method to reverse L1.
**Flag:** `3k{almost_done_shizzle_up_my_nizzle}`