InCTF 2021 | Eazy Xchange

#inctf2021

import os, hashlib, pickle
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

key = os.urandom(4)
FLAG = open('flag.txt', 'rb').read()
p = 0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF
a = p - 3
b = 0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B

def gen_key(G, pvkey):
    G = sum([i*G for i in pvkey])
    return G

def encrypt(msg, key):
    key = hashlib.sha256(str(key).encode()).digest()[:16]
    cipher = AES.new(key, AES.MODE_CBC, os.urandom(16))
    return {'cip': cipher.encrypt(pad(msg, 16)).hex(), 'iv': cipher.IV.hex()}

def gen_bob_key(EC, G):
    bkey = os.urandom(4)
    B = gen_key(G, bkey)
    return B, bkey

def main():
    EC = EllipticCurve(GF(p), [a, b])
    G = EC.gens()[0]
    Bx = int(input("Enter Bob X value: "))
    By = int(input("Enter Bob Y value: "))
    B = EC(Bx, By)
    P = gen_key(G, key)
    SS = gen_key(B, key)
    cip = encrypt(FLAG, SS.xy()[0])
    cip['G'] = str(G)
    return cip

if __name__ == '__main__':
    cip = main()
    pickle.dump(cip, open('enc.pickle', 'wb'))