ó
    &ÝNjZ  ã                   óŠ   • S r SSKJr  SSKJrJr  SSKJr  SSKJ	r	J
r
  SSKJrJr  SSKJr  SSKJr  SS	KJr   " S
 S\5      rg)z
RSA keys.
é    )ÚOptional)ÚInvalidSignatureÚUnsupportedAlgorithm)Údefault_backend)ÚhashesÚserialization)ÚpaddingÚrsa)ÚMessage)ÚPKey)ÚSSHExceptionc                   óV  • \ rS rSrSrSr\R                  \R                  \R                  \R                  S.r	      SS jr
\S 5       r\S 5       r\S	\\R"                     4S
 j5       r\S 5       rS rS r\S 5       rS rS rS rSS jrS r\SS j5       rS rS rS r Sr!g)ÚRSAKeyé#   zN
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                 óz  • S U l         S U l        Ub  U R                  Xd5        g Ub  U R                  X45        g Uc  Ub  [	        U5      nUb  XPl         g U R                  UU R                  SS9  [        R                  " UR                  5       UR                  5       S9R                  [        5       5      U l         g )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          ÚL/home/mande/repo/quber/.venv/lib/python3.13/site-packages/paramiko/rsakey.pyÚ__init__ÚRSAKey.__init__1   sµ   € ð ˆŒØˆÔØÑØ×"Ñ" 8Ô6ØØÑØ×'Ñ'¨Ô;ØØ‰K˜dÑ.Ü˜$“-ˆCØ‰?Ø�Hà×*Ñ*Øð Ÿ™Ø8ð +ñ ô ×+Ò+Ø—-‘-“/ S§]¡]£_ñç‰jœÓ*Ó+ð �Hó    c                 óR   • [        U R                  R                  5       5      SS/-   $ )Nr   r   )ÚlistÚHASHESÚkeys)Úclss    r(   ÚidentifiersÚRSAKey.identifiersR   s,   € ô �C—J‘J—O‘OÓ%Ó&ØØ*ð*
ñ 
ð 	
r+   c                 ó.   • U R                   R                  $ ©N)r   Úkey_size©r#   s    r(   ÚsizeÚRSAKey.size]   s   € à�x‰x× Ñ Ð r+   Úreturnc                 óp   • [        U R                  [        R                  5      (       a  U R                  $ S $ r4   ©Ú
isinstancer   r
   ÚRSAPrivateKeyr6   s    r(   Úprivate_keyÚRSAKey.private_keya   s'   € ä% d§h¡h´×0AÑ0A×BÑBˆt�x‰xÐLÈÐLr+   c                 óÐ   • [        U R                  [        R                  5      (       a$  U R                  R	                  5       R
                  $ U R                  R                  5       $ r4   )r<   r   r
   r=   Úprivate_numbersÚpublic_numbersr6   s    r(   rB   ÚRSAKey.public_numberse   sE   € ä�d—h‘h¤× 1Ñ 1×2Ñ2Ø—8‘8×+Ñ+Ó-×<Ñ<Ð<à—8‘8×*Ñ*Ó,Ð,r+   c                 ó   • [        5       nUR                  U R                  5        UR                  U R                  R
                  5        UR                  U R                  R                  5        UR                  5       $ r4   )r   Ú
add_stringr   Ú	add_mpintrB   r   r   Úasbytes)r#   Úms     r(   rG   ÚRSAKey.asbytesl   sU   € Ü‹IˆØ	�‰�T—Y‘YÔØ	�‰�D×'Ñ'×)Ñ)Ô*Ø	�‰�D×'Ñ'×)Ñ)Ô*Ø�y‰y‹{Ðr+   c                 ó>   • U R                  5       R                  SSS9$ )NÚutf8Úignore)Úerrors)rG   Údecoder6   s    r(   Ú__str__ÚRSAKey.__str__s   s    € ð �|‰|‹~×$Ñ$ V°HÐ$Ð=Ð=r+   c                 óx   • U R                  5       U R                  R                  U R                  R                  4$ r4   )Úget_namerB   r   r   r6   s    r(   Ú_fieldsÚRSAKey._fieldsy   s-   € à—‘“ ×!4Ñ!4×!6Ñ!6¸×8KÑ8K×8MÑ8MÐNÐNr+   c                 ó   • U R                   $ r4   )r   r6   s    r(   rR   ÚRSAKey.get_name}   ó   € Ø�y‰yÐr+   c                 ó   • U R                   $ r4   )r7   r6   s    r(   Úget_bitsÚRSAKey.get_bits€   rW   r+   c                 óJ   • [        U R                  [        R                  5      $ r4   r;   r6   s    r(   Úcan_signÚRSAKey.can_signƒ   s   € Ü˜$Ÿ(™(¤C×$5Ñ$5Ó6Ð6r+   c                 ó  • Uc  U R                   nU R                  R                  U[        R                  " 5       U R
                  U   " 5       S9n[        5       nUR                  UR                  SS5      5        UR                  U5        U$ )N)r	   Ú	algorithmz-cert-v01@openssh.comÚ )	r   r   Úsignr	   ÚPKCS1v15r.   r   rE   Úreplace)r#   r$   r_   ÚsigrH   s        r(   Úsign_ssh_dataÚRSAKey.sign_ssh_data†   s|   € ØÑØŸ	™	ˆIØ�h‰h�m‰mØÜ×$Ò$Ó&ð —k‘k )Ò,Ó.ð ð 
ˆô ‹Iˆà	�‰�Y×&Ñ&Ð'>ÀÓCÔDØ	�‰�SÔØˆr+   c                 óÊ  • UR                  5       nX0R                  ;  a  gU R                  n[        U[        R
                  5      (       a  UR                  5       nUR                  5       nUR                  [        U5      S-  -
  nUS:”  a  SUS-   S-  -  U-   n UR                  XQ[        R                  " 5       U R                  U   " 5       5        g! [         a     gf = f)NFé   r   ó    é   T)Úget_textr.   r   r<   r
   r=   r"   Ú
get_binaryr5   ÚlenÚverifyr	   rb   r   )r#   r$   r   Úsig_algorithmr   ra   Údiffs          r(   Úverify_ssh_sigÚRSAKey.verify_ssh_sig–   sÊ   € ØŸ™›ˆØ§¡Ó+ØØ�h‰hˆÜ�cœ3×,Ñ,×-Ñ-Ø—.‘.Ó"ˆCð �~‰~ÓˆØ�|‰|œc $›i¨!™mÑ+ˆØ�!‹8Ø˜t a™x¨A™oÑ.°Ñ5ˆDð	Ø�J‰JØœG×,Ò,Ó.°·±¸MÒ0JÓ0Lôð øô  ó 	Ùð	ús   Â8C Ã
C"Ã!C"c                 óP   • [         R                  " SU [        5       S9n[        US9$ )zô
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_exponentr5   Úbackend)r   )r
   Úgenerate_private_keyr   r   )ÚbitsÚprogress_funcr   s      r(   ÚgenerateÚRSAKey.generate®   s*   € ô ×&Ò&Ø!¨D¼/Ó:Kñ
ˆô ˜#‰Ðr+   c                 óJ   • U R                  SX5      nU R                  U5        g ©NÚRSA)Ú_read_private_key_fileÚ_decode_key)r#   r%   r&   r$   s       r(   r   ÚRSAKey._from_private_key_file¿   s"   € Ø×*Ñ*¨5°(ÓEˆØ×Ñ˜Õr+   c                 óJ   • U R                  SX5      nU R                  U5        g r|   )Ú_read_private_keyr   )r#   r'   r&   r$   s       r(   r   ÚRSAKey._from_private_keyÃ   s"   € Ø×%Ñ% e¨XÓ@ˆØ×Ñ˜Õr+   c           
      ó&  • Uu  p!X R                   :X  a    [        R                  " US [        5       S9nO†X R                  :X  af  U R                  US5      u  pTpgp‰[        R                  " XES9n
[        R                  " UU	UXhS-
  -  XiS-
  -  UU
S9R                  [        5       5      nOU R                  U5        [!        W[        R"                  5      (       d   eX0l        g ! [        [
        [        4 a  n[        [        U5      5      eS nAff = f)N)r&   ru   Úiiiiiir   é   )ÚpÚqÚdÚdmp1Údmq1ÚiqmprB   )Ú_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_idr<   r=   r   )r#   r$   Úpkformatr   r   r   r‰   rŒ   r‡   rˆ   rB   s              r(   r   ÚRSAKey._decode_keyÇ   s  € Ø‰ˆØ×8Ñ8Ó8ð+Ü#×8Ò8Ø 4´Ó1Bñ‘ð
 ×9Ñ9Ó9Ø"&×"=Ñ"=¸dÀHÓ"MÑˆA�!˜1Ü ×1Ò1°AÑ;ˆNÜ×'Ò'ØØØØ˜a™%‘[Ø˜a™%‘[ØØ-ñ÷ ‰kœ/Ó+Ó,ñ ð ×'Ñ'¨Ô1Ü˜#œs×0Ñ0×1Ñ1Ð1Ð1Ø�øô# ¤	Ô+?Ð@ó +Ü"¤3 q£6Ó*Ð*ûð+ús   •C" Ã"DÃ7DÄD)r   r   )NNNNNNr4   )"Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   ÚSHA256ÚSHA512r.   r)   Úclassmethodr1   Úpropertyr7   r   r
   r=   r>   rB   rG   rO   rS   rR   rY   r\   re   rq   Ústaticmethodry   r   r   r   Ú__static_attributes__© r+   r(   r   r   #   s  † ñð
 €DàŸ™Ø-3¯]©]ØŸ™Ø-3¯]©]ñ	€Fð ØØØØØô,ðB ñ
ó ð
ð ñ!ó ð!ð ðM˜X c×&7Ñ&7Ñ8ó Mó ðMð ñ-ó ð-òò>ð ñOó ðOòòò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¬      s2   ðñ&õ ç JÝ 8ß @ß Bå $Ý Ý /ô|ˆTõ |r+   