3 L]@sPdZddlZddlmZddlmZmZddlmZddZ Gdd d e Z dS) z, Utility functions for dealing with primes. N)util) byte_masklong) SSHExceptioncCsxtj|d}|dd}td|dd}xFtj|}|dkrZt|d||dd}tj|d}||kr.Pq.W|S)z returns a random # from 0 to N-1rN)r bit_lengthpowosurandomrZ inflate_long)nbitsZ byte_countZ hbyte_maskxnumr5/tmp/pip-install-wfra5znf/paramiko/paramiko/primes.py _roll_randoms   rc@s0eZdZdZddZddZddZdd Zd S) ModulusPackzx convenience object for holding the contents of the /etc/ssh/moduli file, on systems that have such a file. cCsi|_g|_dS)N)pack discarded)selfrrr__init__:szModulusPack.__init__c Cs|j\}}}}}}}t|}t|}t|}t|}t|}t|d}|dksp|dksp|d@r|dkr|dkr|jj|dfdS|dkrd}tj|} | |kr| |dkr|jj|d j|fdS| |jkrg|j| <|j| j||fdS) Nr rdz does not meet basic requirementsrrz"incorrectly reported bit length {}) splitintrrappendrr formatr) rline timestampmod_typeteststriessize generatormodulusblrrr_parse_modulus?s.      zModulusPack._parse_moduluscCsni|_t|dT}xL|D]D}|j}t|dks|ddkr>qy|j|WqwYqXqWWdQRXdS)zM :raises IOError: passed from any file operations that fail. rr#N)ropenstriplenr*)rfilenamefr!rrr read_filems  zModulusPack.read_filecCst|jj}t|dkr"tdd}x0|D](}||kr,||kr,||ksP|dkr,|}q,W|dkrx(|D] }||krf||krf||krf|}qfW|dkr|d}||kr|d}tt|j|}|j||S) Nrzno moduli availablerr3r3r3r3)sortedrkeysr/rr)rminZprefermaxZbitsizesZgoodbrrrr get_modulus|s"    zModulusPack.get_modulusN)__name__ __module__ __qualname____doc__rr*r2r9rrrrr4s .r) r=r ZparamikorZparamiko.py3compatrrZparamiko.ssh_exceptionrrobjectrrrrrs