from Crypto.Util.number import * # type: ignore from secret import flag
p = 64408890408990977312449920805352688472706861581336743385477748208693864804529 a = 111430905433526442875199303277188510507615671079377406541731212384727808735043 b = 89198454229925288228295769729512965517404638795380570071386449796440992672131 E = EllipticCurve(GF(p),[a,b]) m = E.random_point() G = E.random_point() k = 86388708736702446338970388622357740462258632504448854088010402300997950626097 K = k * G r = getPrime(256) c1 = m + r * K c2 = r * G c_left =bytes_to_long(flag[:len(flag)//2]) * m[0] c_right = bytes_to_long(flag[len(flag)//2:]) * m[1]
from Crypto.Util.number import * """ # sage p = 64408890408990977312449920805352688472706861581336743385477748208693864804529 a = 111430905433526442875199303277188510507615671079377406541731212384727808735043 b = 89198454229925288228295769729512965517404638795380570071386449796440992672131 k = 86388708736702446338970388622357740462258632504448854088010402300997950626097 E = EllipticCurve(GF(p),[a,b])
if is_pkcs7_padded(plaintext): return unpad(plaintext, 16).decode('ascii') else: return plaintext.decode('ascii')
shared_secret = ? iv = ? ciphertext = ?
print(decrypt_flag(shared_secret, iv, ciphertext))
""" a = 497 b = 1768 p = 9739 Q_x = 4726 nB = 6534 iv = 'cd9da9f1c60925922377ea952afc212c' encrypted_flag = 'febcbe3a3414a730b125931dccf912d2239f3e969c4334d95ed0ec86f6449ad8' p ≡ 3 mod 4 (which will help you find y from y^2) """
if is_pkcs7_padded(plaintext): return unpad(plaintext, 16).decode('ascii') else: return plaintext.decode('ascii')
a = 497 b = 1768 p = 9739 Q_x = 4726 nB = 6534 iv = 'cd9da9f1c60925922377ea952afc212c' encrypted_flag = 'febcbe3a3414a730b125931dccf912d2239f3e969c4334d95ed0ec86f6449ad8'
y1, y2 = sqrt((pow(Q_x, 3) + a * Q_x + b) % p, p) print(y1,y2)
""" # sage a = 497 b = 1768 p = 9739 E = EllipticCurve(GF(p), [a, b]) Q1 = E([4726, 3452]) Q2 = E([4726, 6287]) secret1 = nB * Q1 # secret1 = (1791 : 7558 : 1) secret2 = nB * Q2 # secret2 = (1791 : 2181 : 1) """
secret1 = (1791,7558) secret2 = (1791,2181)
if Q1[1] % 4 ==3: flag = decrypt_flag(secret1[0], iv, encrypted_flag) print(flag) else: flag = decrypt_flag(secret2[0], iv, encrypted_flag) print(flag)