=OXc@sudZddlZddlmZddlmZmZddlmZddl TdZ de fd YZ dS( s, Utility functions for dealing with primes. iN(tutil(t byte_masktlong(t SSHException(t*cCstj|d}|dd}td|dd}xetrtj|}|dkrzt|d||d}ntj|d}||kr;Pq;q;W|S(s returns a random # from 0 to N-1iiiii(Rt bit_lengthtpowtTruetosturandomRt inflate_long(tntbitst byte_countt hbyte_masktxtnum((s3/usr/lib/python2.7/site-packages/paramiko/primes.pyt _roll_randoms   t ModulusPackcBs2eZdZdZdZdZdZRS(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 discarded(tself((s3/usr/lib/python2.7/site-packages/paramiko/primes.pyt__init__;s c Cs[|j\}}}}}}}t|}t|}t|}t|}t|}t|d}|dks|dks|d@r|dkr|dkr|jj|dfdS|dkrd}ntj|} | |kr| |dkr|jj|d |fdS| |jkr=g|j| |D]3}||kr||kr||kr|}qqWn|dkr|d}||kr|d}qntt|j|}|j||S(Nisno moduli availablei(tsortedRtkeysR(RR(RtmintprefertmaxtbitsizestgoodtbR ((s3/usr/lib/python2.7/site-packages/paramiko/primes.pyt get_modulusms" 0   $   (t__name__t __module__t__doc__RR#R+R4(((s3/usr/lib/python2.7/site-packages/paramiko/primes.pyR5s    ( R7RtparamikoRtparamiko.py3compatRRtparamiko.ssh_exceptionRtparamiko.commonRtobjectR(((s3/usr/lib/python2.7/site-packages/paramiko/primes.pyts