from gmpy2 import* from libnum import* N = 539403894871945779827202174061302970341082455928364137444962844359039924160163196863639732747261316352083923762760392277536591121706270680734175544093484423564223679628430671167864783270170316881238613070741410367403388936640139281272357761773388084534717028640788227350254140821128908338938211038299089224967666902522698905762169859839320277939509727532793553875254243396522340305880944219886874086251872580220405893975158782585205038779055706441633392356197489 d = 58169755386408729394668831947856757060407423126014928705447058468355548861569452522734305188388017764321018770435192767746145932739423507387500606563617116764196418533748380893094448060562081543927295828007016873588530479985728135015510171217414380395169021607415979109815455365309760152218352878885075237009 c = 82363935080688828403687816407414245190197520763274791336321809938555352729292372511750720874636733170318783864904860402219217916275532026726988967173244517058861515301795651235356589935260088896862597321759820481288634232602161279508285376396160040216717452399727353343286840178630019331762024227868572613111538565515895048015318352044475799556833174329418774012639769680007774968870455333386419199820213165698948819857171366903857477182306178673924861370469175
pq = gcd(pow(2,d*N,N)-2,N)
m = pow(c,d,pq) print(n2s(m)) #b'D0g3xGC{W1sh_Y0u_Go0d_L@ucK-111}'
E = EllipticCurve(GF(p), [a, b]) order = E.order() eG = E(edwards_to_ECC(eG[0],eG[1])) t = inverse(e,order) G = t*eG G = ECC_to_edwards(G[0],G[1]) print(long_to_bytes(int(G[0]))) #b'D0g3xGC{SOlvE_The_Edcurv3}'
from Crypto.Util.number import * from gmpy2 import * from hashlib import* import random,os
flag = b'D0g3xGA{***************}' msg = b'e = ?'
defsign(pub, pri, k): (p,q,g,y) = pub x = pri r = int(powmod(g, k, p) % q) H = bytes_to_long(sha1(os.urandom(20)).digest()) s = int((H + r * x) * invert(k, q) % q) return (H,r,s)
k1 = getPrime(64) k2 = k1 ** 2 pri = bytes_to_long(msg) a = 149328490045436942604988875802116489621328828898285420947715311349436861817490291824444921097051302371708542907256342876547658101870212721747647670430302669064864905380294108258544172347364992433926644937979367545128905469215614628012983692577094048505556341118385280805187867314256525730071844236934151633203 b = 829396411171540475587755762866203184101195238207 g = 87036604306839610565326489540582721363203007549199721259441400754982765368067012246281187432501490614633302696667034188357108387643921907247964850741525797183732941221335215366182266284004953589251764575162228404140768536534167491117433689878845912406615227673100755350290475167413701005196853054828541680397 y = 97644672217092534422903769459190836176879315123054001151977789291649564201120414036287557280431608390741595834467632108397663276781265601024889217654490419259208919898180195586714790127650244788782155032615116944102113736041131315531765220891253274685646444667344472175149252120261958868249193192444916098238
pub = (a, b, g, y)
H1, r1, s1 = sign(pub, pri, k1)
H2, r2, s2 = sign(pub, pri, k2)
p = getPrime(128) q = getPrime(128) n = p * q c = powmod(bytes_to_long(flag), e, n)
p = 149328490045436942604988875802116489621328828898285420947715311349436861817490291824444921097051302371708542907256342876547658101870212721747647670430302669064864905380294108258544172347364992433926644937979367545128905469215614628012983692577094048505556341118385280805187867314256525730071844236934151633203 q = 829396411171540475587755762866203184101195238207 g = 87036604306839610565326489540582721363203007549199721259441400754982765368067012246281187432501490614633302696667034188357108387643921907247964850741525797183732941221335215366182266284004953589251764575162228404140768536534167491117433689878845912406615227673100755350290475167413701005196853054828541680397
print(long_to_bytes(int(((s1*k-H1)*inverse(r1,q))%q))) #b'e = 44519' c = 18947793008364154366082991046877977562448549186943043756326365751169362247521 C = 179093209181929149953346613617854206675976823277412565868079070299728290913658