§
    3xÅjZ  ã                   ó’   — d Z ddlm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.
é    )ÚOptional)ÚInvalidSignatureÚUnsupportedAlgorithm)Údefault_backend)ÚhashesÚserialization)ÚpaddingÚrsa)ÚMessage)ÚPKey)ÚSSHExceptionc                   ó@  — e Zd ZdZdZej        ej        ej        ej        dœZ	 	 	 	 	 	 dd„Z	e
d„ ¦   «         Zed„ ¦   «         Zedeej                 fd	„¦   «         Zed
„ ¦   «         Zd„ Zd„ Zed„ ¦   «         Zd„ Zd„ Zd„ Zdd„Z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)z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 )Nússh-rsa-cert-v01@openssh.com)Ú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          ú@C:\Projects\Historical\venv\Lib\site-packages\paramiko/rsakey.pyÚ__init__zRSAKey.__init__1   sî   € ð ˆŒØˆÔØÐØ×"Ò" 8¨XÑ6Ô6Ð6ØˆFØÐØ×'Ò'¨°(Ñ;Ô;Ð;ØˆFØˆK˜dÐ.Ý˜$‘-”-ˆCØˆ?ØˆDŒHˆHˆHà×*Ò*Øð œØ8ð +ñ ô ð õ Ô+Ø—-’-‘/”/ S§]¢]¡_¤_ðñ ô çŠj�Ñ*Ô*Ñ+Ô+ð ŒHˆHˆHó    c                 óX   — t          | j                             ¦   «         ¦  «        ddgz   S )Nr   r   )ÚlistÚHASHESÚkeys)Úclss    r'   ÚidentifierszRSAKey.identifiersR   s0   € õ �C”J—O’OÑ%Ô%Ñ&Ô&ØØ*ð*
ñ 
ð 	
r)   c                 ó   — | j         j        S ©N)r   Úkey_size©r"   s    r'   ÚsizezRSAKey.size]   s   € àŒxÔ Ð r)   Úreturnc                 óR   — t          | j        t          j        ¦  «        r| j        nd S r1   ©Ú
isinstancer   r
   ÚRSAPrivateKeyr3   s    r'   Úprivate_keyzRSAKey.private_keya   s"   € å% d¤hµÔ0AÑBÔBÐLˆtŒxˆxÈÐLr)   c                 ó®   — t          | j        t          j        ¦  «        r| j                             ¦   «         j        S | j                             ¦   «         S r1   )r8   r   r
   r9   Úprivate_numbersÚpublic_numbersr3   s    r'   r=   zRSAKey.public_numberse   sD   € å�d”h¥Ô 1Ñ2Ô2ð 	-Ø”8×+Ò+Ñ-Ô-Ô<Ð<à”8×*Ò*Ñ,Ô,Ð,r)   c                 óö   — t          ¦   «         }|                     | j        ¦  «         |                     | j        j        ¦  «         |                     | j        j        ¦  «         |                     ¦   «         S r1   )r   Ú
add_stringr   Ú	add_mpintr=   r   r   Úasbytes)r"   Úms     r'   rA   zRSAKey.asbytesl   s]   € Ý‰IŒIˆØ	�Š�T”YÑÔÐØ	�Š�DÔ'Ô)Ñ*Ô*Ð*Ø	�Š�DÔ'Ô)Ñ*Ô*Ð*Ø�yŠy‰{Œ{Ðr)   c                 óT   — |                       ¦   «                              dd¬¦  «        S )NÚutf8Úignore)Úerrors)rA   Údecoder3   s    r'   Ú__str__zRSAKey.__str__s   s%   € ð �|Š|‰~Œ~×$Ò$ V°HÐ$Ñ=Ô=Ð=r)   c                 óX   — |                       ¦   «         | j        j        | j        j        fS r1   )Úget_namer=   r   r   r3   s    r'   Ú_fieldszRSAKey._fieldsy   s#   € à—’‘” Ô!4Ô!6¸Ô8KÔ8MÐNÐNr)   c                 ó   — | j         S r1   )r   r3   s    r'   rJ   zRSAKey.get_name}   ó
   € ØŒyÐr)   c                 ó   — | j         S r1   )r4   r3   s    r'   Úget_bitszRSAKey.get_bits€   rM   r)   c                 ó@   — t          | j        t          j        ¦  «        S r1   r7   r3   s    r'   Úcan_signzRSAKey.can_signƒ   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#   rS   ÚsigrB   s        r'   Úsign_ssh_datazRSAKey.sign_ssh_data†   s‘   € ØÐØœ	ˆIØŒh�mŠmØÝÔ$Ñ&Ô&ð -�d”k )Ô,Ñ.Ô.ð ñ 
ô 
ˆõ ‰IŒIˆà	�Š�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   r8   r
   r9   r!   Ú
get_binaryr2   ÚlenÚverifyr	   rV   r   )r"   r#   r   Úsig_algorithmr   rU   Údiffs          r'   Úverify_ssh_sigzRSAKey.verify_ssh_sig–   sû   € ØŸš™œˆØ ¤Ð+Ð+Ø�5ØŒhˆÝ�c�3Ô,Ñ-Ô-ð 	#Ø—.’.Ñ"Ô"ˆCð �~Š~ÑÔˆØŒ|�c $™iœi¨!™mÑ+ˆØ�!Š8ˆ8Ø˜t a™x¨A™oÑ.°Ñ5ˆDð	Ø�JŠJØ�d�GÔ,Ñ.Ô.Ð0J°´¸MÔ0JÑ0LÔ0Lñô ð ð �4øõ  ð 	ð 	ð 	Ø�5�5ð	øøøs   Â<C Ã
C$Ã#C$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_exponentr2   Ú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 rm   )Ú_read_private_keyrp   )r"   r&   r%   r#   s       r'   r   zRSAKey._from_private_keyÃ   s3   € Ø×%Ò% e¨X°xÑ@Ô@ˆØ×Ò˜ÑÔÐÐÐ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%   rg   Úiiiiiir   é   )ÚpÚqÚdÚdmp1Údmq1Úiqmpr=   )Ú_PRIVATE_KEY_FORMAT_ORIGINALr   Úload_der_private_keyr   Ú
ValueErrorÚ	TypeErrorr   r   ÚstrÚ_PRIVATE_KEY_FORMAT_OPENSSHÚ_uint32_cstruct_unpackr
   r   ÚRSAPrivateNumbersr:   Ú_got_bad_key_format_idr8   r9   r   )r"   r#   Úpkformatr   r   r   rx   r{   rv   rw   r=   s              r'   rp   zRSAKey._decode_keyÇ   sV  € Ø‰ˆ�$Ø�tÔ8Ò8Ð8ð+Ý#Ô8Ø 4µÑ1BÔ1Bðñ ô ��øõ ¥	Õ+?Ð@ð +ð +ð +Ý"¥3 q¡6¤6Ñ*Ô*Ð*øøøøð+øøøà˜Ô9Ò9Ð9Ø"&×"=Ò"=¸dÀHÑ"MÔ"MÑˆAˆq�!�T˜1˜aÝ Ô1°A¸Ð;Ñ;Ô;ˆNÝÔ'ØØØØ˜!˜a™%‘[Ø˜!˜a™%‘[ØØ-ðñ ô ÷ Šk�/Ñ+Ô+Ñ,Ô,ð ˆCð ×'Ò'¨Ñ1Ô1Ð1Ý˜#�sÔ0Ñ1Ô1Ð1Ð1Ð1ØˆŒˆˆs   ’#6 ¶A.ÁA)Á)A.)NNNNNNr1   ) Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   ÚSHA256ÚSHA512r,   r(   Úclassmethodr/   Úpropertyr4   r   r
   r9   r:   r=   rA   rH   rK   rJ   rO   rQ   rY   rd   Ústaticmethodrk   r   r   rp   © r)   r'   r   r   #   sÌ  € € € € € ðð ð
 €DàœØ-3¬]ØœØ-3¬]ð	ð €Fð ØØØØØð,ð ,ð ,ð ,ðB ð
ð 
ñ „[ð
ð ð!ð !ñ „Xð!ð ðM˜X cÔ&7Ô8ð Mð Mð Mñ „XðMð ð-ð -ñ „Xð-ðð ð ð>ð >ð >ð ðOð Oñ „XðOðð ð ðð ð ð7ð 7ð 7ðð ð ð ð ð ð ð0 ðð ð ñ „\ðð ð ð ðð ð ðð ð ð ð r)   r   N)r‰   Útypingr   Ú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ñ   ðð&ð ð Ð Ð Ð Ð Ð à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø /Ð /Ð /Ð /Ð /Ð /ð|ð |ð |ð |ð |ˆTñ |ô |ð |ð |ð |r)   