Files
ctfkit/lib/__pycache__/crypto_utils.cpython-312.pyc
T

43 lines
5.7 KiB
Plaintext
Raw Normal View History

Ë
Þ½�jÌ
ãóR—dZddlZddlmZmZd„Zd„Zd„Zd„Zd„Zd „Zd d
„Z d „Z
y)
uz
lib/crypto_utils.py — common CTF crypto helpers (RSA / lattice / misc).
Patterns distilled from p4-team/ctf writeups.
éN)ÚgcdÚisqrtcóX—|dk(r|ddfSt|||z«\}}}|||||z|zz
fS)Nré)Úegcd)ÚaÚbÚgÚxÚys úlib/crypto_utils.pyrr
sD€ØˆA‚vØ�1�aˆyÐÜ�1�a˜!‘e‹n�G€A€qˆ!Ø
ˆq�!�q˜A‘v ‘lÑ"Ð #Ð#ócóR—t||z|«\}}}|dk7r td«‚||zS)Nrzmodinv: no inverse)rÚ
ValueError)rÚmr
r Ú_s r
Úmodinvrs3€Ü�1�q‘5˜!‹n�G€A€qˆ!؈A‚vÜÐ-Ó.Ð.Ø ˆq‰5€Lrcó,—tj|«S©N)Úmathr)Úns r
rrs€Ü �:‰:�a‹=ÐrcóH—tdd«D]}||zdk(sŒ |||zfcSy)z)Tiny factor finder for small/weak moduli.éirN)Úrange)rÚps r
Úfactor_trivialrs6€ä
�1�gÓ
òˆØ ˆq‰5�A‹:Ø�a˜1‘f�9Ò ðð rcó�‡— ddlŠˆfd„}ˆfd„}|||«D]}||||«}|sŒ|cSy#t$r td«‚wxYw)z¢
From p4 'lost_modulus': we know e, d, ipmq=modinv(p,q), iqmp=modinv(q,p)
but NOT n. Recover n via quadratic equation on phi. Returns (p, q) or None.
rNz&gmpy2 required for recover_n_from_keysc3ó¬•K—||zdz
}|t|«dzz} ||z} ‰j||«}||k(r|–—|dz
}Œ'#t$rYŒwxYw­w)Nré)ÚintÚinvertÚ Exception)ÚeÚdÚkfiÚkÚfiÚd0Úgmpy2s €r
Úfind_phiz%recover_n_from_keys.<locals>.find_phi0svøèø€Ø�!‰e�a‰iˆØ ”C˜“F˜Q‘JÑ ˆØØ˜‘ˆBð
Ø—\‘\ ! RÓ(�ؘ’7Ø’Hð
�‰FˆAðøô ò
Ùð
üs'ƒ A¤A¿AÁ AÁAÁAÁAcó6•—|dz
}||zdz
|z
}||z|z
}||zd|z|zz
}|dkDrm‰ j|d«\}}|rV| |z
d|zz| |zd|zzfD];} ‰ j| dz«sŒ| dz}
|| zdz} t| «t|
«fcSy)Nrrér)ÚirootÚis_primer )
ÚipmqÚiqmpÚ possible_phirr ÚcÚdeltaÚrÚcorrectr Úqrr)s
€r
Úsolvez"recover_n_from_keys.<locals>.solve=sÒø€Ø �1‰HˆØ �4‰K˜!‰O˜lÑ *ˆØ �<Ñ  ,Ñ .ˆØ�A‘˜˜A™ ™ Ñ!ˆØ �1Š9ØŸ™ U¨AÓ.‰JˆAˆwÙØ˜2 ™6 q¨1¡uÑ-°°°Q±¸AÀ¹EÑ/BÐCò.�AØ—~‘~ a¨!¡eÕ,Ø ™E˜Ø(¨AÑ-°Ñ1˜Ü" 1›v¤s¨1£v˜~Ò-ð .ð
r)r)r"Ú
SystemExit) r#r$r/r0r*r7ÚphiÚresr)s @r