
    ohz                     ~    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y)z
RSA keys.
    )InvalidSignatureUnsupportedAlgorithm)default_backend)hashesserialization)rsapadding)Message)PKey)SSHExceptionc                   R   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y)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 | _        || j                  ||       y || j                  ||       y ||t	        |      }||| _         y | j                  || j                  d       t        j                  |j                         |j                               j                  t                     | _         y )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          a/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/paramiko/rsakey.py__init__zRSAKey.__init__1   s     ""8X6''(;Kd.$-C?DH** 8 +  ++--/S]]_j*+ H    c                 H    t        | j                  j                               S N)listHASHESkeys)clss    r&   identifierszRSAKey.identifiersR   s    CJJOO%&&r(   c                 .    | j                   j                  S r*   )r   key_sizer!   s    r&   sizezRSAKey.sizeV   s    xx   r(   c                     t        | j                  t        j                        r$| j                  j	                         j
                  S | j                  j                         S r*   )
isinstancer   r   RSAPrivateKeyprivate_numberspublic_numbersr2   s    r&   r8   zRSAKey.public_numbersZ   sB    dhh 1 1288++-<<<88**,,r(   c                     t               }|j                  | j                         |j                  | j                  j
                         |j                  | j                  j                         |j                         S r*   )r
   
add_stringr   	add_mpintr8   r   r   asbytes)r!   ms     r&   r<   zRSAKey.asbytesa   sU    I	TYY	D''))*	D''))*yy{r(   c                 D    | j                         j                  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                  j                  fS r*   )get_namer8   r   r   r2   s    r&   _fieldszRSAKey._fieldsm   s-    !4!4!6!68K8K8M8MNNr(   c                     | j                   S r*   )r   r2   s    r&   rE   zRSAKey.get_nameq       yyr(   c                     | j                   S r*   )r3   r2   s    r&   get_bitszRSAKey.get_bitst   rH   r(   c                 J    t        | j                  t        j                        S r*   )r5   r   r   r6   r2   s    r&   can_signzRSAKey.can_signw   s    $((C$5$566r(   c                    || j                   }| j                  j                  |t        j                          | j
                  |                }t               }|j                  |j                  dd             |j                  |       |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hhmm$$& -dkk),.  
 I	Y&&'>CD	Sr(   c                    |j                         }|| j                  vry| j                  }t        |t        j
                        r|j                         }|j                         }|j                  t        |      dz  z
  }|dkD  rd|dz   dz  z  |z   }	 |j                  ||t        j                          | j                  |                 y# t        $ r Y y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    +hhc3,,-.."C ~~||c$i!m+!8taxAo.5D	JJdG,,.0JM0J0L    		s   8C 	CCc                 r    | j                  || j                  t        j                  j                  |       y N)r$   )_write_private_key_filer   r   PrivateFormatTraditionalOpenSSL)r!   r#   r$   s      r&   write_private_key_filezRSAKey.write_private_key_file   s1    $$HH''::	 	% 	
r(   c                 r    | j                  || j                  t        j                  j                  |       y ra   )_write_private_keyr   r   rc   rd   )r!   r%   r$   s      r&   write_private_keyzRSAKey.write_private_key   s1    HH''::	 	  	
r(   c                 Z    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   s*     &&!D/:K
 #r(   c                 L    | j                  d||      }| j                  |       y NRSA)_read_private_key_file_decode_key)r!   r#   r$   r"   s       r&   r   zRSAKey._from_private_key_file   s$    **5(HEr(   c                 L    | j                  d||      }| j                  |       y rq   )_read_private_keyrt   )r!   r%   r$   r"   s       r&   r   zRSAKey._from_private_key   s$    %%eXx@r(   c           	      6   |\  }}|| j                   k(  r"	 t        j                  |d t                     }n|| j                  k(  rp| j                  |d      \  }}}}}}	t        j                  ||      }
t        j                  ||	|||dz
  z  ||	dz
  z  ||
      j                  t                     }n| j                  |       t!        t        j"                        sJ || _        y # t        t
        t        f$ r}t        t        |            d }~ww xY w)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   s   $t888+#8841B
 999"&"="=dH"MAq!T1a 11A;N''!a%[!a%[- k/+,  ''1#s00111# 	+?@ +"3q6**+s    C+ +D?DD)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 ' ' ! ! - ->
 O O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      s0   & K 8 @ B $  /BT Br(   