ó Ñwec@sLddlmZddlmZmZmZmZdefd„ƒYZdS(i(t IntegerBaseiÿÿÿÿ(t long_to_bytest bytes_to_longtinversetGCDt IntegerNativecBsëeZdZd„Zd„Zd„Zd„Zd„Zd„Zddd „Z e dd „ƒZ d „Z d „Z d „Zd„Zd„Zd„Zd„ZeZd„Zd„Zd„Zd„Zd„Zd„Zd4d„Zd4d„Zd„Zd4d„Zd„Zd„Z d„Z!d„Z"d „Z#d!„Z$d"„Z%d#„Z&d$„Z'd%„Z(d&„Z)d'„Z*d(„Z+d)„Z,d*„Z-d+„Z.d,„Z/d-„Z0d.„Z1d/„Z2d0„Z3d1„Z4d2„Z5e6d3„ƒZ7RS(5s3A class to model a natural integer (including zero)cCsOt|tƒrtdƒ‚ny|j|_Wntk rJ||_nXdS(Ns-A floating point type is not a natural number(t isinstancetfloatt ValueErrort_valuetAttributeError(tselftvalue((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__init__'s  cCs|jS(N(R (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__int__0scCstt|ƒƒS(N(tstrtint(R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__str__3scCsdt|ƒS(Ns Integer(%s)(R(R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__repr__6scCs t|jƒS(N(thexR (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__hex__:scCs t|jƒS(N(RR (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __index__>sitbigcCs±|jdkrtdƒ‚nt|j|ƒ}t|ƒ|koMdknratdƒ‚n|dkrpn=|dkr¡t|ƒ}|jƒt|ƒ}n tdƒ‚|S(Nis.Conversion only valid for non-negative numberssValue too large to encodeRtlittlesIncorrect byteorder(R RRtlent bytearraytreversetbytes(R t block_sizet byteordertresult((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytto_bytesAs"     cCsP|dkrn1|dkr4t|ƒ}|jƒn tdƒ‚|t|ƒƒS(NRRsIncorrect byteorder(RRRR(tclst byte_stringR((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt from_bytesQs     cCs#|dkrtS|jt|ƒkS(N(tNonetFalseR R(R tterm((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__eq__]s cCs|j|ƒ S(N(R&(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__ne__bscCs|jt|ƒkS(N(R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__lt__escCs|j|ƒp|j|ƒS(N(R(R&(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__le__hscCs|j|ƒ S(N(R)(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__gt__kscCs|j|ƒ S(N(R((R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__ge__nscCs |jdkS(Ni(R (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __nonzero__qscCs |jdkS(Ni(R (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt is_negativeuscCs@y|j|jt|ƒƒSWntttfk r;tSXdS(N(t __class__R RRR t TypeErrortNotImplemented(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__add__yscCs@y|j|jt|ƒƒSWntttfk r;tSXdS(N(R.R RRR R/R0(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__sub__scCs@y|j|jt|ƒƒSWntttfk r;tSXdS(N(R.R RRR R/R0(R tfactor((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__mul__…scCs|j|jt|ƒƒS(N(R.R R(R tdivisor((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __floordiv__‹scCs;t|ƒ}|dkr'tdƒ‚n|j|j|ƒS(NisModulus must be positive(RRR.R (R R5t divisor_value((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__mod__Žs  cCsšt|ƒ}|dkr'tdƒ‚n|dk rxt|ƒ}|dkrZtdƒ‚n|dkr~tdƒ‚q~nd}t|j||ƒ|_|S(NisExponent must not be negativesModulus must be positivesModulus cannot be zero(RRR#tZeroDivisionErrortpowR (R texponenttmodulust exp_valuet mod_value((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt inplace_pow”s      cCs|j|ƒ}|j||ƒS(N(R.R?(R R;R<R((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__pow__¤scCs t|jƒS(N(tabsR (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__abs__¨scCs¶|j}|dkrx|dkr0tdƒ‚n|}|dd}x(||krn|}|||d}qGW|}n1|dkr“tdƒ‚n|j|||ƒ}|j|ƒS(NisSquare root of negative valueiisModulus must be positive(R R#Rt_tonelli_shanksR.(R R<R txtyR((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytsqrt«s     cCs|jt|ƒ7_|S(N(R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__iadd__ÀscCs|jt|ƒ8_|S(N(R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__isub__ÄscCs|jt|ƒ9_|S(N(R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__imul__ÈscCsUt|ƒ}|dkr'tdƒ‚n|dkrBtdƒ‚n|j|;_|S(NisDivision by zerosModulus must be positive(RR9RR (R R%R<((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__imod__Ìs   cCs|j|jt|ƒ@ƒS(N(R.R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__and__ÖscCs|j|jt|ƒBƒS(N(R.R R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt__or__ÙscCsMy|j|jt|ƒ?ƒSWn(tk rH|jdkrAdSdSnXdS(Niiÿÿÿÿ(R.R Rt OverflowError(R tpos((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __rshift__Üs  cCsHy|jt|ƒL_Wn(tk rC|jdkr<dSdSnX|S(Niiÿÿÿÿ(R RRM(R RN((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __irshift__ås cCsBy|j|jt|ƒ>ƒSWntk r=tdƒ‚nXdS(NsIncorrect shift count(R.R RRMR(R RN((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __lshift__ïs cCs=y|jt|ƒK_Wntk r8tdƒ‚nX|S(NsIncorrect shift count(R RRMR(R RN((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt __ilshift__õs  cCs¶|jdkrtdƒ‚nyzy6|j|j?d@}|jdkrVtdƒ‚nWn=tk r–|j|?d@}|dkr—tdƒ‚q—nXWntk r±d}nX|S(Nis)no bit representation for negative valuesisnegative bit count(R RR RM(R tnR((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytget_bitüs    cCs|jd@dkS(Ni(R (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytis_odd scCs|jd@dkS(Nii(R (R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytis_evenscCs>|jdkrtdƒ‚n|jdkr1dS|jjƒS(Nis.Conversion only valid for non-negative numbersi(R Rt bit_length(R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt size_in_bitss cCs|jƒdddS(Nii(RX(R ((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyt size_in_bytesscCsƒ|jdkrtS|jdkr&tS|jd}|d}x2||jkrq||jd|}|d}q@W|j|dkS(Niii(ii(R R$tTrue(R RDtsquare_x((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytis_perfect_square s  cCs,|jt|ƒdkr(tdƒ‚ndS(NisValue is composite(R RR(R t small_prime((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytfail_if_divisible_by/scCs#|jt|ƒt|ƒ7_|S(N(R R(R tatb((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytmultiply_accumulate3scCst|ƒ|_dS(N(RR (R tsource((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytset7scCst|jt|ƒƒ|_|S(N(RR R(R R<((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytinplace_inverse:scCs |j|ƒ}|j|ƒ|S(N(R.Rd(R R<R((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyR>s cCs+|jtt|jƒtt|ƒƒƒƒS(N(R.RRAR R(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytgcdCscCs^t|ƒ}|jdks'|dkr4|jdƒS|jt|j||j|ƒjƒƒS(Ni(RR R.RARe(R R%((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pytlcmFs  cCs?t|ƒ}t|ƒ}|dkr3tdƒ‚n|d@dkrRtdƒ‚n||}|dkst|dkrxdS|dkrˆdSd}|}x(|d@dkr¾|dL}|d7}q—W|d@dkrØd}n|dd krñd}nd}|dd kr!|dd kr!| }n||}|tj||ƒS( Nisn must be a positive integeris#n must be odd for the Jacobi symboliiiÿÿÿÿii(ii(RRRt jacobi_symbol(R_RSteta1tstn1((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyRgLs2           N(8t__name__t __module__t__doc__R RRRRRRt classmethodR"R&R'R(R)R*R+R,t__bool__R-R1R2R4R6R8R#R?R@RBRFRGRHRIRJRKRLRORPRQRRRTRURVRXRYR\R^RaRcRdRReRft staticmethodRg(((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyR$sh                                         N(t _IntegerBaseRtCrypto.Util.numberRRRRR(((s@/usr/lib64/python2.7/site-packages/Crypto/Math/_IntegerNative.pyts"