͍>c:@s`dZeZyddklZWnej o d?ZnXdZdZdZ dZ dZ dZ d d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>g6Z dd?kZd@dAZdBZdd?kZd@dCZdDZd?S(Es9$Id: number.py,v 1.13 2003/04/04 18:21:07 akuchling Exp $i(t _fastmathcCs9d\}}x&||jo|d7}|d>}qW|S(sEsize(N:long) : int Returns the size of the number N in bits. ili(il((tNtbitstpower((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytsize"s    cCs||d}|d}|djo.t|dd|?}t||}nt|}|d|dO}t||jpt|S(sQgetRandomNumber(N:int, randfunc:callable):long Return an N-bit random number.iiil(tordtchrt bytes_to_longRtAssertionError(RtrandfunctStodd_bitstchartvalue((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytgetRandomNumber,s   cCsBt|}t|}x#|djo|||}}qW|S(s=GCD(x:long, y:long): long Return the GCD of x and y. i(tabs(txty((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytGCD:s   cCst|t|}}d\}}xF|djo8||}||||}}||||}}q(Wx|djo||}qqW|S(sDinverse(u:long, u:long):long Return the inverse of u mod v. lli(ll(tlong(tutvtu3tv3tu1tv1tq((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytinverseCs    cCs6t||dB}xt|p|d}qW|S(sTgetPrime(N:int, randfunc:callable):long Return a random N-bit prime number. ii(RtisPrime(RR tnumber((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytgetPrimeTs  c CsX|djodS|tjodSx$tD]}||djodSq+Wtdj oti|S|d}d}x||jo|d>}qyW|d?}xtd D]}t|}d}|}xs|ok|||}|djo|djo||jodS||@o|||}n|}|d?}qW|djodSqWdS(s8isPrime(N:long):bool Return true if N is prime. iiliN(tsieveRtNoneRR( RtitN1tntctatdttR((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pyR^sB         '   iiiii i iiiiii%i)i+i/i5i;i=iCiGiIiOiSiYiaieigikimiqiiiiiiiiiiiiiiiiiiiiiiiiNicCsd}t|}ti}x3|djo%|d|d@|}|d?}qWx<tt|D]}||djoPqdqdWd}d}||}|djo1t||o |t||d|}n|S(slong_to_bytes(n:long, blocksize:int) : string Convert a long integer to a byte string. If optional blocksize is given and greater than zero, pad the front of the byte string with binary zeros so that the length is a multiple of blocksize. tis>Ili t(Rtstructtpacktrangetlen(R#t blocksizetsR+R!((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pyt long_to_bytess"       cCsd}ti}t|}|do*d|d}d||}||}nx@td|dD],}|d>|d|||d!d}qcW|S(sbytes_to_long(string) : long Convert a byte string to a long integer. This is (essentially) the inverse of long_to_bytes(). liR)ii s>I(R*tunpackR-R,(R/taccR1tlengthtextraR!((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pyRs   *cCstidt||S(Ns/long2str() has been replaced by long_to_bytes()(twarningstwarnR0(R#R.((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytlong2strs cCstidt|S(Ns/str2long() has been replaced by bytes_to_long()(R5R6R(R/((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pytstr2longs (t __revision__RtbignumtCrypto.PublicKeyRt ImportErrorR RRRRRRRR*R0RR5R7R8(((s8/usr/lib64/python2.6/site-packages/Crypto/Util/number.pyt s*    +3*'$