Skip to content

Instantly share code, notes, and snippets.

@aaronyoo
Created November 22, 2018 02:10
Show Gist options
  • Save aaronyoo/19bca10ca31dbbdd7d4f0d9536ccfa8d to your computer and use it in GitHub Desktop.
Save aaronyoo/19bca10ca31dbbdd7d4f0d9536ccfa8d to your computer and use it in GitHub Desktop.
Solution script to SquareCTF flipping-bits challenge
import binascii
import gmpy2
e1 = 13
e2 = 15
ct1 = 13981765388145083997703333682243956434148306954774120760845671024723583618341148528952063316653588928138430524040717841543528568326674293677228449651281422762216853098529425814740156575513620513245005576508982103360592761380293006244528169193632346512170599896471850340765607466109228426538780591853882736654
ct2 = 79459949016924442856959059325390894723232586275925931898929445938338123216278271333902062872565058205136627757713051954083968874644581902371182266588247653857616029881453100387797111559677392017415298580136496204898016797180386402171968931958365160589774450964944023720256848731202333789801071962338635072065
n = 103109065902334620226101162008793963504256027939117020091876799039690801944735604259018655534860183205031069083254290258577291605287053538752280231959857465853228851714786887294961873006234153079187216285516823832102424110934062954272346111907571393964363630079343598511602013316604641904852018969178919051627
def xgcd(a,b):
"""Extended GCD:
Returns (gcd, x, y) where gcd is the greatest common divisor of a and b
with the sign of b if b is nonzero, and with the sign of a if b is 0.
The numbers x,y are such that gcd = ax+by."""
prevx, x = 1, 0; prevy, y = 0, 1
while b:
q, r = divmod(a,b)
x, prevx = prevx - q*x, x
y, prevy = prevy - q*y, y
a, b = b, r
return a, prevx, prevy
_, u, v = xgcd(e1, e2)
ct2 = gmpy2.invert(ct2, n)
m = (pow(ct1, u, n) * pow(ct2, -v, n)) % n
print(binascii.unhexlify('%x' % m))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment