ó õùPc@sbdZddlmZddlmZddlmZd„Zd„Zde fd„ƒYZ d S( s, Utility functions for dealing with primes. iÿÿÿÿ(tnumber(tutil(t SSHExceptioncCs×td|dƒd}x¹trÒ|j|ddƒ}|dkrhtt|dƒ|@ƒ|d}ntj|dƒ}|dO}|d|d>O}xtj|ƒsµ|d7}q™Wtj |ƒ|krPqqW|S(s$primtive attempt at prime generationiiiii( tpowtTruetreadtchrtordRt inflate_longRtisPrimet bit_length(tbitstrngt hbyte_masktxtn((s*..\python\site-packages\paramiko\primes.pyt_generate_primes  % cCs«tj|dƒ}|dd}td|dƒd}xltr¦|j|ƒ}|dkrtt|dƒ|@ƒ|d}ntj|dƒ}||kr;Pq;q;W|S(s returns a random # from 0 to N-1iiiii(RR RRRRRR(R RR tbytesR Rtnum((s*..\python\site-packages\paramiko\primes.pyt _roll_random.s  % t ModulusPackcBs2eZdZd„Zd„Zd„Zd„ZRS(sx convenience object for holding the contents of the /etc/ssh/moduli file, on systems that have such a file. cCsi|_g|_||_dS(N(tpackt discardedR (tselftrpool((s*..\python\site-packages\paramiko\primes.pyt__init__Js  c Cs[|jƒ\}}}}}}}t|ƒ}t|ƒ}t|ƒ}t|ƒ}t|ƒ}t|dƒ}|dks¦|dks¦|d@rÀ|dkrÀ|dkrÀ|jj|dfƒdS|dkrÕd}ntj|ƒ} | |kr| |dkr|jj|d |fƒdS| |jkr=g|j| |D]3}||kr||kr||kr|}qqWn|dkr |d}||kr |d}q nt|jt|j|ƒƒ}|j||S(Nisno moduli availableiÿÿÿÿ(RtkeystsortR,RRR (RtmintprefertmaxtbitsizestgoodtbR((s*..\python\site-packages\paramiko\primes.pyt get_modulus~s$  0   $   (t__name__t __module__t__doc__RR'R0R9(((s*..\python\site-packages\paramiko\primes.pyRDs    N( R<t Crypto.UtilRtparamikoRtparamiko.ssh_exceptionRRRtobjectR(((s*..\python\site-packages\paramiko\primes.pyts