
    7g                     V    d Z ddlZddlmZ ddlmZ ddlmZ d Z G d d          Z	dS )	z,
Utility functions for dealing with primes.
    N)util)	byte_mask)SSHExceptionc                 "   t          j        | dz
            }|dz   dz  }t          d|dz            dz
  }	 t          j        |          }|dk    r!t          |d         |          |dd         z   }t          j        |d          }|| k     rnX|S )z returns a random # from 0 to N-1            Tr   N)r   
bit_lengthpowosurandomr   inflate_long)nbits
byte_count
hbyte_maskxnums         I/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/primes.py_roll_randomr      s    ?1q5!!D(qJQq!!A%JJz"">>!A$
++ae3A1%%77 J    c                   *    e Zd ZdZd Zd Zd Zd ZdS )ModulusPackzx
    convenience object for holding the contents of the /etc/ssh/moduli file,
    on systems that have such a file.
    c                 "    i | _         g | _        d S )N)pack	discarded)selfs    r   __init__zModulusPack.__init__:   s    	r   c                    |                                 \  }}}}}}}t          |          }t          |          }t          |          }t          |          }t          |          }t          |d          }|dk     s|dk     s|dz  r*|dk     r$|dk     r| j                            |df           d S |dk    rd}t	          j        |          }	|	|k    r:|	|dz   k    r1| j                            |d	                    |          f           d S |	| j        vr
g | j        |	<   | j        |	                             ||f           d S )
N   r
      r	   d   z does not meet basic requirementsr   r   z"incorrectly reported bit length {})splitintr   appendr   r   formatr   )
r   line	timestampmod_typeteststriessize	generatormodulusbls
             r   _parse_moduluszModulusPack._parse_modulus?   ss    JJLL	
x==E

E

4yy	NN	gr"" qLLqyy	 #aiiECKKN!!<=   F>>I
 _W%%$JJR4!8^^N!!>EEdKKL   FTYDIbM	"i122222r   c                    i | _         t          |d          5 }|D ]S}|                                }t          |          dk    s|d         dk    r6	 |                     |           M#  Y QxY w	 ddd           dS # 1 swxY w Y   dS )zM
        :raises IOError: passed from any file operations that fail.
        rr   #N)r   openstriplenr1   )r   filenamefr(   s       r   	read_filezModulusPack.read_filem   s     	(C   	A  zz||IINNQ3''----H	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s)   9A=A('A=(A,*A==BBc                    t          | j                                                  }t          |          dk    rt	          d          d}|D ]}||k    r||k    r||k     s|dk    r|}|dk    r|D ]}||k    r||k    r||k    r|}|dk    r|d         }||k    r|d         }t          t          | j        |                             }| j        |         |         S )Nr   zno moduli available)sortedr   keysr7   r   r   )r   minprefermaxbitsizesgoodbr   s           r   get_moduluszModulusPack.get_modulus|   s    $)..**++x==A4555 	 	AV!s((TTRZZ2::  HH188!d((D2::
 A;DTzz|TYt_--..yq!!r   N)__name__
__module____qualname____doc__r   r1   r:   rE    r   r   r   r   4   s[         
  
,3 ,3 ,3\  " " " " "r   r   )
rI   r   paramikor   paramiko.commonr   paramiko.ssh_exceptionr   r   r   rJ   r   r   <module>rN      s   &  
			       % % % % % % / / / / / /  ,`" `" `" `" `" `" `" `" `" `"r   