Ë
    zñ�j!  ã                   ó~   — d dl Z d dlmZ d dlmZ d dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZmZ  G d„ d	e
«      Zy)
é    N)Údefault_backend)ÚCipher)ÚMessage)ÚPKeyÚOPENSSH_AUTH_MAGICÚ_unpad_openssh)Úb)ÚSSHExceptionÚPasswordRequiredExceptionc                   óZ   — 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d„Zd„ Zy)Ú
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 x}}|€|�t        |«      }|�L| j                  || j                  d¬«       t        j
                  j                  |j                  «       «      }nD|�+t        |d«      5 }| j                  d|«      \  }	}d d d «       n|�| j                  d|«      \  }	}|s|r| j                  ||«      }|€|€t        d«      ‚|| _        || _        y # 1 sw Y   Œ=xY w)Nz ssh-ed25519-cert-v01@openssh.com)ÚmsgÚkey_typeÚ	cert_typeÚrÚOPENSSHz
need a key)Úpublic_blobr   Ú_check_type_and_load_certÚnameÚnaclÚsigningÚ	VerifyKeyÚ
get_binaryÚopenÚ_read_private_keyÚ_parse_signing_key_dataÚ
ValueErrorÚ_signing_keyÚ_verifying_key)
Úselfr   ÚdataÚfilenameÚpasswordÚfile_objÚverifying_keyÚsigning_keyÚfÚpkformats
             úT/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/paramiko/ed25519key.pyÚ__init__zEd25519Key.__init__,   s  € ð  ˆÔØ&*Ð*ˆ˜Øˆ;˜4Ð+Ü˜$“-ˆCØˆ?Ø×*Ñ*ØØŸ™Ø<ð +ô ô
 !ŸL™L×2Ñ2°3·>±>Ó3CÓD‰MØÐ!Ü�h Ó$ð F¨Ø!%×!7Ñ!7¸	À1Ó!E‘�˜$÷Fð FàÐ!Ø!×3Ñ3°I¸xÓH‰NˆH�dá‘xØ×6Ñ6°t¸XÓFˆKàÐ =Ð#8Ü˜\Ó*Ð*à'ˆÔØ+ˆÕ÷Fð Fús   Á7C!Ã!C*c                 ó°  — ddl m} t        |«      }|j                  t	        t
        «      «      t
        k7  rt        d«      ‚|j                  «       }|j                  «       }|j                  «       }|j                  «       }|dk(  r|s|dk7  rTt        d«      ‚|dk(  r9|st        d«      ‚t        |«      }	|	j                  «       }
|	j                  «       }nt        d«      ‚|dk7  r||j                  vrt        d«      ‚g }t        |«      D ]b  }t        |j                  «       «      }|j                  «       | j                  k7  rt        d«      ‚|j                  |j                  «       «       Œd |j                  «       }|dk(  r|}nŸ|j                  |   }t        j                   t#        |«      
|d   |d   z   d	¬
«      }t%         |d   |d |d    «       |d   ||d   d  «      t'        «       ¬«      j)                  «       }|j+                  |«      |j-                  «       z   }t        t/        |«      «      }|j                  «       |j                  «       k7  rt        d«      ‚g }t        |«      D ]Á  }|j                  «       | j                  k7  rt        d«      ‚|j                  «       }|j                  «       }t0        j2                  j5                  |d d «      }|j6                  j9                  «       |cxk(  r||   cxk(  r	|dd  k(  sJ ‚ J ‚|j                  |«       |j                  «        ŒÃ t	        |«      dk7  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_keysrA   Úbcrypt_saltÚbcrypt_roundsÚpublic_keysÚ_ÚpubkeyÚprivate_ciphertextÚprivate_dataÚcipherÚkeyrB   Úsigning_keysÚiÚpublicÚkey_datar'   s                            r*   r   z"Ed25519Key._parse_signing_key_dataI   sY  € Ý0ô ˜$“-ˆØ×ÑœSÔ!3Ó4Ó5Ô9KÒKÜ˜}Ó-Ð-à×%Ñ%Ó'ˆ
Ø×"Ñ"Ó$ˆØ×'Ñ'Ó)ˆ
Ø—?‘?Ó$ˆà�fÒñ ˜Z¨6Ò1Ü" =Ó1Ð1Ø˜Ò ÙÜ/Ø3óð ô ˜*Ó%ˆCØŸ.™.Ó*ˆKØŸK™K›M‰Mä˜}Ó-Ð-à˜Ò J°i×6LÑ6LÑ$LÜ˜}Ó-Ð-àˆÜ�x“ò 	4ˆAÜ˜W×/Ñ/Ó1Ó2ˆFØ�‰Ó  D§I¡IÒ-Ü" =Ó1Ð1Ø×Ñ˜v×0Ñ0Ó2Õ3ð		4ð %×/Ñ/Ó1ÐØ˜ÒØ-‰Là×+Ñ+¨JÑ7ˆFÜ—*‘*Ü˜8›Ø Ø"(¨Ñ"4°v¸lÑ7KÑ"KØ$ð #'ôˆCô Ø��w‘ Ð$8 f¨ZÑ&8Ð 9Ó:Ø��v‘˜s 6¨*Ñ#5Ð#7Ð8Ó9Ü'Ó)ô÷ ‰i‹kð	 ð × Ñ Ð!3Ó4°y×7IÑ7IÓ7KÑKð ô œ.¨Ó6Ó7ˆØ�?‰?Ó §¡Ó 1Ò1Ü˜}Ó-Ð-àˆÜ�x“ò 	!ˆAØ×ÑÓ! T§Y¡YÒ.Ü" =Ó1Ð1à×'Ñ'Ó)ˆFØ×)Ñ)Ó+ˆHô Ÿ,™,×1Ñ1°(¸3¸B°-Ó@ˆKð ×&Ñ&×-Ñ-Ó/Øô!à˜q‘>ô!ð ˜B˜C�=ò!ðñ!ðð!ð
 ×Ñ Ô,à×ÑÕ ð%	!ô( ˆ|Ó Ò!Ü˜}Ó-Ð-Ø˜A‰Ðó    c                 ó  — | j                  «       r| j                  j                  }n| j                  }t	        «       }|j                  | j                  «       |j                  |j                  «       «       |j                  «       S ©N)	Úcan_signr   rF   r    r   Ú
add_stringr   rG   Úasbytes)r!   ÚvÚms      r*   r_   zEd25519Key.asbytes©   s\   € Ø�=‰=Œ?Ø×!Ñ!×,Ñ,‰Aà×#Ñ#ˆAÜ‹IˆØ	�‰�T—Y‘YÔØ	�‰�Q—X‘X“ZÔ Ø�y‰y‹{ÐrZ   c                 óŒ   — | j                  «       r| j                  j                  }n| j                  }| j	                  «       |fS r\   )r]   r   rF   r    Úget_name)r!   r`   s     r*   Ú_fieldszEd25519Key._fields³   s8   € à�=‰=Œ?Ø×!Ñ!×,Ñ,‰Aà×#Ñ#ˆAØ—‘“ Ð#Ð#rZ   c                 ó   — | j                   S r\   )r   ©r!   s    r*   rc   zEd25519Key.get_name¼   s   € Ø�y‰yÐrZ   c                  ó   — y)Né   © rf   s    r*   Úget_bitszEd25519Key.get_bits¿   s   € ØrZ   c                 ó   — | j                   d uS r\   )r   rf   s    r*   r]   zEd25519Key.can_signÂ   s   € Ø× Ñ ¨Ð,Ð,rZ   c                 ó¸   — t        «       }|j                  | j                  «       |j                  | j                  j	                  |«      j
                  «       |S r\   )r   r^   r   r   ÚsignÚ	signature)r!   r"   Ú	algorithmra   s       r*   Úsign_ssh_datazEd25519Key.sign_ssh_dataÅ   sA   € Ü‹IˆØ	�‰�T—Y‘YÔØ	�‰�T×&Ñ&×+Ñ+¨DÓ1×;Ñ;Ô<ØˆrZ   c                 óÜ   — |j                  «       | j                  k7  ry	 | j                  j                  ||j	                  «       «       y# t
        j                  j                  $ r Y yw xY w)NFT)r<   r   r    Úverifyr   r   Ú
exceptionsÚBadSignatureError)r!   r"   r   s      r*   Úverify_ssh_sigzEd25519Key.verify_ssh_sigË   s\   € Ø�<‰<‹>˜TŸY™YÒ&Øð	Ø×Ñ×&Ñ& t¨S¯^©^Ó-=Ô>ð øô �‰×0Ñ0ò 	Ùð	ús    *A ÁA+Á*A+)NNNNNr\   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r   r_   Úpropertyrd   rc   rj   r]   rp   ru   ri   rZ   r*   r   r      sS   „ ñ	ð €Dð KOó,ò:^ò@ð ñ$ó ð$òòò-óó	rZ   r   )r/   Úcryptography.hazmat.backendsr   Ú&cryptography.hazmat.primitives.ciphersr   Únacl.signingr   Úparamiko.messager   Úparamiko.pkeyr   r   r   Úparamiko.utilr	   Úparamiko.ssh_exceptionr
   r   r   ri   rZ   r*   ú<module>r‚      s0   ðó" å 8Ý 9ã å $ß BÑ BÝ ß Jôv�õ vrZ   