§
    3xÅj  ã                   ó’   — d dl mZ d dlZd dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZmZmZ d dlmZmZ d dlmZ  G d	„ d
e¦  «        ZdS )é    )ÚUnionN)Údefault_backend)ÚCipher)ÚMessage)ÚOPENSSH_AUTH_MAGICÚPKeyÚ_unpad_openssh)ÚPasswordRequiredExceptionÚSSHException)Úbc                   ó¨   — e Zd ZdZdZ	 dd„Zd„ Zd„ Zed„ ¦   «         Z	d„ Z
d	„ Zd
„ Zd„ Zedeej        j        df         fd„¦   «         Zdd„Zd„ ZdS )Ú
Ed25519Keya  
    Representation of an `Ed25519 <https://ed25519.cr.yp.to/>`_ key.

    .. note::
        Ed25519 key support was added to OpenSSH in version 6.5.

    .. versionadded:: 2.2
    .. versionchanged:: 2.3
        Added a ``file_obj`` parameter to match other key classes.
    zssh-ed25519Nc                 ó>  — d | _         d\  | _        | _        |€|�t          |¦  «        }|�T|                      || j        d¬¦  «         t          j                             | 	                    ¦   «         ¦  «        | _        n_|�Bt          |d¦  «        5 }|                      d|¦  «        \  }}d d d ¦  «         n# 1 swxY w Y   n|�|                      d|¦  «        \  }}|s|r|                      ||¦  «        | _        | j        €| j        €t          d¦  «        ‚d S d S )N)NNz ssh-ed25519-cert-v01@openssh.com)ÚmsgÚkey_typeÚ	cert_typeÚrÚOPENSSHz
need a key)Úpublic_blobÚ_verifying_keyÚ_signing_keyr   Ú_check_type_and_load_certÚnameÚnaclÚsigningÚ	VerifyKeyÚ
get_binaryÚopenÚ_read_private_keyÚ_parse_signing_key_dataÚ
ValueError)Úselfr   ÚdataÚfilenameÚpasswordÚfile_objÚfÚpkformats           úDC:\Projects\Historical\venv\Lib\site-packages\paramiko/ed25519key.pyÚ__init__zEd25519Key.__init__,   sŒ  € ð  ˆÔØ1;Ñ.ˆÔ˜TÔ.Øˆ;˜4Ð+Ý˜$‘-”-ˆCØˆ?Ø×*Ò*ØØœØ<ð +ñ ô ð õ
 #'¤,×"8Ò"8¸¿ºÑ9IÔ9IÑ"JÔ"JˆDÔÐØÐ!Ý�h Ñ$Ô$ð F¨Ø!%×!7Ò!7¸	À1Ñ!EÔ!E‘�˜$ðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð FøàÐ!Ø!×3Ò3°I¸xÑHÔH‰NˆH�dàð 	M�xð 	MØ $× <Ò <¸TÀ8Ñ LÔ LˆDÔàÔÐ$¨Ô)<Ð)DÝ˜\Ñ*Ô*Ð*ð %Ð$Ð)DÐ)Ds   ÂB8Â8B<Â?B<c                 ó\  — ddl m} t          |¦  «        }|                     t	          t
          ¦  «        ¦  «        t
          k    rt          d¦  «        ‚|                     ¦   «         }|                     ¦   «         }|                     ¦   «         }| 	                    ¦   «         }|dk    r|s|dk    rt          d¦  «        ‚n^|dk    rI|st          d¦  «        ‚t          |¦  «        }	|	                     ¦   «         }
|	 	                    ¦   «         }nt          d¦  «        ‚|dk    r||j        vrt          d¦  «        ‚g }t          |¦  «        D ]v}t          |                     ¦   «         ¦  «        }|                     ¦   «         | j        k    rt          d¦  «        ‚|                     |                     ¦   «         ¦  «         Œw|                     ¦   «         }|dk    r|}nÖ|j        |         }t          j        t#          |¦  «        |
|d         |d         z   |d	¬
¦  «        }t%           |d         |d |d         …         ¦  «         |d         ||d         d …         ¦  «        t'          ¦   «         ¬¦  «                             ¦   «         }|                     |¦  «        |                     ¦   «         z   }t          t/          |¦  «        ¦  «        }| 	                    ¦   «         | 	                    ¦   «         k    rt          d¦  «        ‚g }t          |¦  «        D ]ã}|                     ¦   «         | j        k    rt          d¦  «        ‚|                     ¦   «         }|                     ¦   «         }t0          j                             |d d…         ¦  «        }|j                             ¦   «         |cxk    r||         cxk    r|dd …         k    sn J ‚|                     |¦  «         |                     ¦   «          Œät	          |¦  «        dk    rt          d¦  «        ‚|d         S )Nr   )Ú	TransportzInvalid keyÚnoneÚbcryptzPrivate key file is encryptedzkey-sizez
block-sizeT)r%   ÚsaltÚdesired_key_bytesÚroundsÚignore_few_roundsÚclassÚmode)Úbackendé    é   )Úparamiko.transportr,   r   Ú	get_bytesÚlenr   r   Úget_textr   Úget_intr
   Ú_cipher_infoÚranger   Úappendr.   Úkdfr   r   r   Ú	decryptorÚupdateÚfinalizer	   r   r   Ú
SigningKeyÚ
verify_keyÚencode)r"   r#   r%   r,   ÚmessageÚ
ciphernameÚkdfnameÚ
kdfoptionsÚnum_keysr@   Úbcrypt_saltÚbcrypt_roundsÚpublic_keysÚ_ÚpubkeyÚprivate_ciphertextÚprivate_dataÚcipherÚkeyrA   Úsigning_keysÚiÚpublicÚkey_dataÚsigning_keys                            r)   r    z"Ed25519Key._parse_signing_key_dataF   s]  € Ø0Ð0Ð0Ð0Ð0Ð0õ ˜$‘-”-ˆØ×Ò�SÕ!3Ñ4Ô4Ñ5Ô5Õ9KÒKÐKÝ˜}Ñ-Ô-Ð-à×%Ò%Ñ'Ô'ˆ
Ø×"Ò"Ñ$Ô$ˆØ×'Ò'Ñ)Ô)ˆ
Ø—?’?Ñ$Ô$ˆà�fÒÐð ð 2˜Z¨6Ò1Ð1Ý" =Ñ1Ô1Ð1ð 2à˜Ò Ð Øð Ý/Ø3ñô ð õ ˜*Ñ%Ô%ˆCØŸ.š.Ñ*Ô*ˆKØŸKšK™MœMˆMˆMå˜}Ñ-Ô-Ð-à˜ÒÐ J°iÔ6LÐ$LÐ$LÝ˜}Ñ-Ô-Ð-àˆÝ�x‘”ð 	4ð 	4ˆAÝ˜W×/Ò/Ñ1Ô1Ñ2Ô2ˆFØ�ŠÑ Ô  D¤IÒ-Ð-Ý" =Ñ1Ô1Ð1Ø×Ò˜v×0Ò0Ñ2Ô2Ñ3Ô3Ð3Ð3à$×/Ò/Ñ1Ô1ÐØ˜ÒÐØ-ˆLˆLàÔ+¨JÔ7ˆFÝ”*Ý˜8™œØ Ø"(¨Ô"4°v¸lÔ7KÑ"KØ$ð #'ðñ ô ˆCõ Ø��w” Ð$8 f¨ZÔ&8Ð$8Ô 9Ñ:Ô:Ø��v”˜s 6¨*Ô#5Ð#7Ð#7Ô8Ñ9Ô9Ý'Ñ)Ô)ðñ ô ÷ Ši‰kŒkð	 ð × Ò Ð!3Ñ4Ô4°y×7IÒ7IÑ7KÔ7KÑKð õ �.¨Ñ6Ô6Ñ7Ô7ˆØ�?Š?ÑÔ §¢Ñ 1Ô 1Ò1Ð1Ý˜}Ñ-Ô-Ð-àˆÝ�x‘”ð 	!ð 	!ˆAØ×ÒÑ!Ô! T¤YÒ.Ð.Ý" =Ñ1Ô1Ð1à×'Ò'Ñ)Ô)ˆFØ×)Ò)Ñ+Ô+ˆHõ œ,×1Ò1°(¸3¸B¸3´-Ñ@Ô@ˆKð Ô&×-Ò-Ñ/Ô/Øð!ð !ò !ð !à˜q”>ð!ð !ò !ð !ð ˜B˜C˜C”=ò!ð !ð !ð !ð !ð !ð
 ×Ò Ñ,Ô,Ð,à×ÒÑ Ô Ð Ð åˆ|ÑÔ Ò!Ð!Ý˜}Ñ-Ô-Ð-Ø˜AŒÐó    c                 óâ   — | j         }|�|                     ¦   «         nd}t          ¦   «         }|                     | j        ¦  «         |                     |¦  «         |                     ¦   «         S )NrZ   )Úverifying_keyrF   r   Ú
add_stringr   Úasbytes)r"   ÚvÚmy_bytesÚms       r)   r^   zEd25519Key.asbytes¦   s\   € ØÔˆà!" �1—8’8‘:”:�:°CˆÝ‰IŒIˆØ	�Š�T”YÑÔÐØ	�Š�XÑÔÐØ�yŠy‰{Œ{ÐrZ   c                 ó8   — |                       ¦   «         | j        fS ©N)Úget_namer\   ©r"   s    r)   Ú_fieldszEd25519Key._fields¯   s   € à—’‘” Ô!3Ð4Ð4rZ   c                 ó   — | j         S rc   )r   re   s    r)   rd   zEd25519Key.get_name´   s
   € ØŒyÐrZ   c                 ó   — dS )Né   © re   s    r)   Úget_bitszEd25519Key.get_bits·   s   € ØˆsrZ   c                 ó   — | j         d uS rc   )r   re   s    r)   Úcan_signzEd25519Key.can_signº   s   € ØÔ ¨Ð,Ð,rZ   c                 ó   — | j         d uS rc   )r   re   s    r)   Ú
can_verifyzEd25519Key.can_verify½   s   € ØÔ"¨$Ð.Ð.rZ   Úreturnc                 ó|   — |                       ¦   «         r| j        j        S |                      ¦   «         r| j        S d S rc   )rm   r   rE   ro   r   re   s    r)   r\   zEd25519Key.verifying_keyÀ   s>   € à�=Š=‰?Œ?ð 	'ØÔ$Ô/Ð/Ø�_Š_ÑÔð 	'ØÔ&Ð&ØˆtrZ   c                 óº   — t          ¦   «         }|                     | j        ¦  «         |                     | j                             |¦  «        j        ¦  «         |S rc   )r   r]   r   r   ÚsignÚ	signature)r"   r#   Ú	algorithmra   s       r)   Úsign_ssh_datazEd25519Key.sign_ssh_dataÈ   sJ   € Ý‰IŒIˆØ	�Š�T”YÑÔÐØ	�Š�TÔ&×+Ò+¨DÑ1Ô1Ô;Ñ<Ô<Ð<ØˆrZ   c                 óÖ   — |                      ¦   «         | j        k    rdS 	 | j                             ||                     ¦   «         ¦  «         dS # t
          j        j        $ r Y dS w xY w)NFT)r;   r   r   Úverifyr   r   Ú
exceptionsÚBadSignatureError)r"   r#   r   s      r)   Úverify_ssh_sigzEd25519Key.verify_ssh_sigÎ   st   € Ø�<Š<‰>Œ>˜TœYÒ&Ð&Ø�5ð	ØÔ×&Ò& t¨S¯^ª^Ñ-=Ô-=Ñ>Ô>Ð>ð �4øõ ŒÔ0ð 	ð 	ð 	Ø�5�5ð	øøøs   ¡-A ÁA(Á'A()NNNNNrc   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r*   r    r^   Úpropertyrf   rd   rk   rm   ro   r   r   r   r   r\   rv   r{   rj   rZ   r)   r   r      s  € € € € € ð	ð 	ð €Dð KOð+ð +ð +ð +ð4^ð ^ð ^ð@ð ð ð ð5ð 5ñ „Xð5ðð ð ðð ð ð-ð -ð -ð/ð /ð /ð ð˜u T¤\Ô%;¸TÐ%AÔBð ð ð ñ „Xððð ð ð ð	ð 	ð 	ð 	ð 	rZ   r   )Útypingr   r.   Únacl.signingr   Úcryptography.hazmat.backendsr   Ú&cryptography.hazmat.primitives.ciphersr   Úparamiko.messager   Úparamiko.pkeyr   r   r	   Úparamiko.ssh_exceptionr
   r   Úparamiko.utilr   r   rj   rZ   r)   ú<module>r‰      sê   ðð" Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9à $Ð $Ð $Ð $Ð $Ð $Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ Ð Ð Ð Ð Ð ðyð yð yð yð y�ñ yô yð yð yð yrZ   