
    Ii                     N    S r SSKrSSKJr  SSKJr  SSKJr  S r " S S5      r	g)	z,
Utility functions for dealing with primes.
    N)util)	byte_mask)SSHExceptionc                    [         R                  " U S-
  5      nUS-   S-  n[        SUS-  5      S-
  n [        R                  " U5      nUS:  a  [        US   U5      USS -   n[         R                  " US5      nXP:  a   U$ MR  )z returns a random # from 0 to N-1            r   N)r   
bit_lengthpowosurandomr   inflate_long)nbits
byte_count
hbyte_maskxnums         5/venv/lib/python3.13/site-packages/paramiko/primes.py_roll_randomr      s    ??1q5!D(qJQq!A%J JJz">!A$
+ae3A1%7J     c                   0    \ rS rSrSrS rS rS rS rSr	g)	ModulusPack4   zl
convenience object for holding the contents of the /etc/ssh/moduli file,
on systems that have such a file.
c                      0 U l         / U l        g )N)pack	discarded)selfs    r   __init__ModulusPack.__init__:   s    	r   c                 d   UR                  5       u  nnnnnnn[        U5      n[        U5      n[        U5      n[        U5      n[        U5      n[        US5      nUS:  d  US:  d  US-  (       a*  US:  a$  US:  a  U R                  R                  US45        g US:X  a  Sn[        R
                  " U5      n	X:w  a5  XS-   :w  a-  U R                  R                  US	R                  U5      45        g XR                  ;  a  / U R                  U	'   U R                  U	   R                  Xx45        g )
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_modulusModulusPack._parse_modulus?   s'    JJL	
x=E
E
4y	N	gr" qLqy	eaiECKNN!!<= >I
 __W%JR!8^NN!!>EEdKL YYDIIbM		"i12r   c                     0 U l         [        US5       nU H?  nUR                  5       n[        U5      S:X  d	  US   S:X  a  M-   U R	                  U5        MA     SSS5        g!    MQ  = f! , (       d  f       g= f)z=
:raises IOError: passed from any file operations that fail.
rr   #N)r   openstriplenr3   )r   filenamefr*   s       r   	read_fileModulusPack.read_filem   sr     	(C Azz|INQ3''-  !  ! s#   0A+A#A+#A(%A++
A9c                    [        U R                  R                  5       5      n[        U5      S:X  a  [	        S5      eSnU H   nXb:  d  M
  Xc::  d  M  Xe:  d  US:X  d  M  UnM"     US:X  a   U H  nXa:  d  M
  Xc::  d  M  Xe:  d  M  UnM     US:X  a  US   nX:  a  US   n[        [        U R                  U   5      5      nU R                  U   U   $ )Nr   zno moduli available)sortedr   keysr:   r   r   )r   minprefermaxbitsizesgoodbr   s           r   get_modulusModulusPack.get_modulus|   s    $))..*+x=A455A!(TRZ  2:H18!(D  2:
 A;Dz|TYYt_-.yyq!!r   )r   r   N)
__name__
__module____qualname____firstlineno____doc__r    r3   r=   rI   __static_attributes__ r   r   r   r   4   s    

,3\"r   r   )
rO   r   paramikor   paramiko.commonr   paramiko.ssh_exceptionr   r   r   rQ   r   r   <module>rU      s)   & 
  % /,`" `"r   