
    7gz                         d Z ddlmZmZ ddlmZ ddlmZmZ ddl	m
Z
mZ ddlmZ ddlmZ ddlmZ  G d	 d
e          ZdS )z
RSA keys.
    )InvalidSignatureUnsupportedAlgorithm)default_backend)hashesserialization)rsapadding)Message)PKey)SSHExceptionc                   6   e Zd ZdZdZej        ej        ej        ej        ej        ej        dZ		 	 	 	 	 	 ddZ
ed             Zed             Zed             Zd	 Zd
 Zed             Zd Zd Zd ZddZd ZddZddZedd            Zd Zd Zd ZdS )RSAKeyzZ
    Representation of an RSA key which can be used to sign and verify SSH2
    data.
    ssh-rsa)r   ssh-rsa-cert-v01@openssh.comzrsa-sha2-256z!rsa-sha2-256-cert-v01@openssh.comzrsa-sha2-512z!rsa-sha2-512-cert-v01@openssh.comNc                    d | _         d | _        ||                     ||           d S ||                     ||           d S ||t	          |          }|	|| _         d S |                     || j        d           t          j        |	                                |	                                          
                    t                                | _         d S )Nr   )msgkey_type	cert_typeen)keypublic_blob_from_private_key_from_private_key_filer
   _check_type_and_load_certnamer   RSAPublicNumbers	get_mpint
public_keyr   )selfr   datafilenamepasswordr   file_objs          I/var/www/html/syslog/venv/lib/python3.11/site-packages/paramiko/rsakey.py__init__zRSAKey.__init__1   s     ""8X666F''(;;;FKd.$--C?DHHH** 8 +    +--//S]]__  j**++ HHH    c                 N    t          | j                                                  S N)listHASHESkeys)clss    r&   identifierszRSAKey.identifiersR   s    CJOO%%&&&r(   c                     | j         j        S r*   )r   key_sizer!   s    r&   sizezRSAKey.sizeV   s    x  r(   c                     t          | j        t          j                  r| j                                        j        S | j                                        S r*   )
isinstancer   r   RSAPrivateKeyprivate_numberspublic_numbersr2   s    r&   r8   zRSAKey.public_numbersZ   sD    dh 122 	-8++--<<8**,,,r(   c                     t                      }|                    | j                   |                    | j        j                   |                    | j        j                   |                                S r*   )r
   
add_stringr   	add_mpintr8   r   r   asbytes)r!   ms     r&   r<   zRSAKey.asbytesa   s]    II	TY	D')***	D')***yy{{r(   c                 T    |                                                      dd          S )Nutf8ignore)errors)r<   decoder2   s    r&   __str__zRSAKey.__str__h   s%     ||~~$$VH$===r(   c                 X    |                                  | j        j        | j        j        fS r*   )get_namer8   r   r   r2   s    r&   _fieldszRSAKey._fieldsm   s#    !4!68K8MNNr(   c                     | j         S r*   )r   r2   s    r&   rE   zRSAKey.get_nameq   
    yr(   c                     | j         S r*   )r3   r2   s    r&   get_bitszRSAKey.get_bitst   rH   r(   c                 @    t          | j        t          j                  S r*   )r5   r   r   r6   r2   s    r&   can_signzRSAKey.can_signw   s    $(C$5666r(   c                 2   || j         }| j                            |t          j                     | j        |                               }t                      }|                    |                    dd                     |                    |           |S )N)r	   	algorithmz-cert-v01@openssh.com )	r   r   signr	   PKCS1v15r,   r
   r:   replace)r!   r"   rN   sigr=   s        r&   sign_ssh_datazRSAKey.sign_ssh_dataz   s    	Ihmm$&& -dk),..  
 
 II	Y&&'>CCDDD	Sr(   c                    |                                 }|| j        vrdS | j        }t          |t          j                  r|                                }|                                }|j        t          |          dz  z
  }|dk    rd|dz   dz  z  |z   }	 |
                    ||t          j                     | j        |                                dS # t          $ r Y dS w xY w)NF   r          T)get_textr,   r   r5   r   r6   r    
get_binaryr1   lenverifyr	   rQ   r   )r!   r"   r   sig_algorithmr   rP   diffs          r&   verify_ssh_sigzRSAKey.verify_ssh_sig   s    ++5hc3,-- 	#..""C ~~|c$ii!m+!88taxAo.5D	JJdG,..0JM0J0L0L   4   	 	 	55	s   <C 
C$#C$c                 `    |                      || j        t          j        j        |           d S N)r$   )_write_private_key_filer   r   PrivateFormatTraditionalOpenSSL)r!   r#   r$   s      r&   write_private_key_filezRSAKey.write_private_key_file   s=    $$H':	 	% 	
 	
 	
 	
 	
r(   c                 `    |                      || j        t          j        j        |           d S ra   )_write_private_keyr   r   rc   rd   )r!   r%   r$   s      r&   write_private_keyzRSAKey.write_private_key   s=    H':	 	  	
 	
 	
 	
 	
r(   c                 h    t          j        d| t                                }t          |          S )a$  
        Generate a new private RSA key.  This factory function can be used to
        generate a new host key or authentication key.

        :param int bits: number of bits the generated key should be.
        :param progress_func: Unused
        :return: new `.RSAKey` private key
        i  )public_exponentr1   backend)r   )r   generate_private_keyr   r   )bitsprogress_funcr   s      r&   generatezRSAKey.generate   s8     &!D/:K:K
 
 
 #r(   c                 ^    |                      d||          }|                     |           d S NRSA)_read_private_key_file_decode_key)r!   r#   r$   r"   s       r&   r   zRSAKey._from_private_key_file   s3    **5(HEEr(   c                 ^    |                      d||          }|                     |           d S rq   )_read_private_keyrt   )r!   r%   r$   r"   s       r&   r   zRSAKey._from_private_key   s3    %%eXx@@r(   c           	      `   |\  }}|| j         k    r`	 t          j        |d t                                }n# t          t
          t          f$ r!}t          t          |                    d }~ww xY w|| j	        k    rz| 
                    |d          \  }}}}}}	t          j        ||          }
t          j        ||	|||dz
  z  ||	dz
  z  ||
                              t                                }n|                     |           t!          |t          j                  sJ || _        d S )N)r$   rk   iiiiiir      )pqddmp1dmq1iqmpr8   )_PRIVATE_KEY_FORMAT_ORIGINALr   load_der_private_keyr   
ValueError	TypeErrorr   r   str_PRIVATE_KEY_FORMAT_OPENSSH_uint32_cstruct_unpackr   r   RSAPrivateNumbersprivate_key_got_bad_key_format_idr5   r6   r   )r!   r"   pkformatr   r   r   r|   r   rz   r{   r8   s              r&   rt   zRSAKey._decode_key   sV   $t888+#841B1B   	+?@ + + +"3q66***+999"&"="=dH"M"MAq!T1a 1A;;;N'!a%[!a%[-   k/++,, C ''111#s011111s   #6 A.A))A.)NNNNNNr*   )__name__
__module____qualname____doc__r   r   SHA1SHA256SHA512r,   r'   classmethodr/   propertyr3   r8   r<   rC   rF   rE   rJ   rL   rT   r_   re   rh   staticmethodro   r   r   rt    r(   r&   r   r   !   s        
 D;(.-3]-3] F , , , ,B ' ' [' ! ! X! - - X-  > > >
 O O XO    7 7 7      0
 
 
 

 
 
 
    \         r(   r   N)r   cryptography.exceptionsr   r   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r	   paramiko.messager
   paramiko.pkeyr   paramiko.ssh_exceptionr   r   r   r(   r&   <module>r      s   &  K J J J J J J J 8 8 8 8 8 8 @ @ @ @ @ @ @ @ B B B B B B B B $ $ $ $ $ $       / / / / / /B B B B BT B B B B Br(   