ÿØÿàJFIFÿþ ÿÛC       ÿÛC ÿÀÿÄÿÄ"#QrÿÄÿÄ&1!A"2qQaáÿÚ ?Øy,æ/3JæÝ¹È߲؋5êXw²±ÉyˆR”¾I0ó2—PI¾IÌÚiMö¯–þrìN&"KgX:Šíµ•nTJnLK„…@!‰-ý ùúmë;ºgµŒ&ó±hw’¯Õ@”Ü— 9ñ-ë.²1<yà‚¹ïQÐU„ہ?.’¦èûbß±©Ö«Âw*VŒ) `$‰bØÔŸ’ëXÖ-ËTÜíGÚ3ð«g Ÿ§¯—Jx„–’U/ÂÅv_s(Hÿ@TñJÑãõçn­‚!ÈgfbÓc­:él[ðQe 9ÀPLbÃãCµm[5¿ç'ªjglå‡Ûí_§Úõl-;"PkÞÞÁQâ¼_Ñ^¢SŸx?"¸¦ùY騐ÒOÈ q’`~~ÚtËU¹CڒêV  I1Áß_ÿÙ /Oc@sdZdZdgZddlZejddkrTejddkrTddlTndd lmZmZm Z d e fd YZ d e fd YZ dddddZde fdYZddZdS(sUPure Python implementation of the RSA-related portions of Crypto.PublicKey._fastmath.s$Id$t rsa_constructiNiii(t*(tsizetinversetGCDterrorcBseZRS((t__name__t __module__(((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyR%st_RSAKeycBsPeZdZdZdZdZdZdZdZdZ RS(cCs|t||j|jS(N(tpowtetn(tselftmtr((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_blind)scCst||j||jS(N(RR (R R R((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_unblind-scCs|jstdnt|drt|drt|drt||j|jd|j}t||j|jd|j}||}|dkr||j}n||j|j}||j|St||j|jS(NsNo private keytptqtuii( t has_privatet TypeErrorthasattrR tdRRRR (R tctm1tm2th((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_decrypt1s -##  cCst||j|jS(N(R R R (R R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_encrypt?scCs(|jstdn|j|S(NsNo private key(RRR(R R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_signCs cCs|j||kS(N(R(R R tsig((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt_verifyHscCs t|dS(NR(R(R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRKscCst|jdS(s7Return the maximum number of bits that can be encryptedi(RR (R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRNs( RRRRRRRR RR(((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyR(s       c Cst|tstt|ts*tt|ttdfsKtt|ttdfsltt|ttdfstt|ttdfstt}||_||_|dkr|S||_|dk r|dk r||_ ||_ n>||d}|}x'|ddkrLt |dd}q&Wd} d} x| r| dkr|} x| |krt | | |} | dkr| |dkrt | d|dkrt | d||_ d} Pn| d} qxW| d} q\W| stdn||j dks4tt ||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((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRRsN!!!!       4  t_DSAKeycBs,eZdZdZdZdZRS(cCst|jdS(s7Return the maximum number of bits that can be encryptedi(RR(R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRscCs t|dS(Ntx(R(R ((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRscCs|jstdnd|ko5|jknsItdnt||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((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyRs cCsd|ko|jkn s@d|ko:|jkn rDtSt||j}|||j}|||j}t|j||jt|j||j|j|j}||kS(Ni(RtFalseRR R1Rty(R R RR3twtu1tu2tv((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyR s@<(RRRRRR (((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyR/s   cCst|tstt|ts*tt|ts?tt|tsTtt|ttdfsutt}||_||_||_||_ |dk r||_ n|S(N( R!R"R#R$R%R/R5R1RRR0(R5R1RRR0R(((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyt dsa_constructs!      (t__doc__t __revision__t__all__tsyst version_infotCrypto.Util.py21compattCrypto.Util.numberRRRt ExceptionRtobjectRR%RR/R:(((sM/opt/alt/python27/lib64/python2.7/site-packages/Crypto/PublicKey/_slowmath.pyts  & *<