ó õùPc@s×dZdZdgZddlZejddkrTejddkrTddlTndd lmZmZm Z d e fd „ƒYZ d e fd „ƒYZ ddddd„Zde fd„ƒYZdd„ZdS(sUPure Python implementation of the RSA-related portions of Crypto.PublicKey._fastmath.s$Id$t rsa_constructiÿÿÿÿNiii(t*(tsizetinversetGCDterrorcBseZRS((t__name__t __module__(((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR%st_RSAKeycBsPeZd„Zd„Zd„Zd„Zd„Zd„Zd„Zd„Z RS(cCs|t||j|jƒS(N(tpowtetn(tselftmtr((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_blind)scCst||jƒ||jS(N(RR (R R R((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_unblind-scCsí|jƒstdƒ‚nt|dƒr×t|dƒr×t|dƒr×t||j|jd|jƒ}t||j|jd|jƒ}||}|dkr´||j}n||j|j}||j|St||j|jƒS(NsNo private keytptqtuii( t has_privatet TypeErrorthasattrR tdRRRR (R tctm1tm2th((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_decrypt1s -##  cCst||j|jƒS(N(R R R (R R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_encrypt?scCs(|jƒstdƒ‚n|j|ƒS(NsNo private key(RRR(R R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_signCs cCs|j|ƒ|kS(N(R(R R tsig((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt_verifyHscCs t|dƒS(NR(R(R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyRKscCst|jƒdS(s7Return the maximum number of bits that can be encryptedi(RR (R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyRNs( RRRRRRRR RR(((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR(s       c Cst|tƒst‚t|tƒs*t‚t|ttdƒfƒsKt‚t|ttdƒfƒslt‚t|ttdƒfƒst‚t|ttdƒfƒs®t‚tƒ}||_||_|dkrÙ|S||_|dk r|dk r||_ ||_ n>||d}|}x'|ddkrLt |dƒd}q&Wd} d} xª| r| dkr|} x€| |kr÷t | | |ƒ} | dkrê| |dkrêt | d|ƒdkrêt | d|ƒ|_ d} Pn| d} qxW| d} q\W| stdƒ‚n||j dks4t‚t ||j ƒd|_ |dk re||_nt|j |j ƒ|_|S(sConstruct an RSAKey objectiiiids2Unable to compute factors p and q from exponent d.N(t isinstancetlongtAssertionErrorttypetNoneRR R RRRtdivmodR Rt ValueErrorRR( R R RRRRtobjtktottttspottedtatktcand((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyRRsN!!!!       4  t_DSAKeycBs,eZd„Zd„Zd„Zd„ZRS(cCst|jƒdS(s7Return the maximum number of bits that can be encryptedi(RR(R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyRscCs t|dƒS(Ntx(R(R ((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR“scCs |jƒstdƒ‚nd|ko5|jknsItdƒ‚nt||jƒ}t|j||jƒ|j}|||j||j}||fS(NsNo private keylsk is not between 2 and q-1( RRRR'RR tgRR0(R R R-tinv_kRts((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR–s cCs¾d|ko|jkn s@d|ko:|jkn rDtSt||jƒ}|||j}|||j}t|j||jƒt|j||jƒ|j|j}||kS(Ni(RtFalseRR R1Rty(R R RR3twtu1tu2tv((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR ¡s@<(RRRRRR (((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyR/Žs   cCs¾t|tƒst‚t|tƒs*t‚t|tƒs?t‚t|tƒsTt‚t|ttdƒfƒsut‚tƒ}||_||_||_||_ |dk rº||_ n|S(N( R!R"R#R$R%R/R5R1RRR0(R5R1RRR0R(((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyt dsa_construct«s!      (t__doc__t __revision__t__all__tsyst version_infotCrypto.Util.py21compattCrypto.Util.numberRRRt ExceptionRtobjectRR%RR/R:(((s5..\python\site-packages\Crypto\PublicKey\_slowmath.pyts  & *<