Ë
    zñ�j…-  ã                   óÊ   — 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
 ddlmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZ ddlmZ  G d„ d«      Z G d„ d«      Z G d„ de«      Zy)z
ECDSA keys
é    )ÚInvalidSignatureÚUnsupportedAlgorithm)Údefault_backend)ÚhashesÚserialization)Úec)Údecode_dss_signatureÚencode_dss_signature)Ú	four_byte)ÚMessage)ÚPKey)ÚSSHException)Údeflate_longc                   ó   — e Zd ZdZd„ Zy)Ú_ECDSACurvezì
    Represents a specific ECDSA Curve (nistp256, nistp384, etc).

    Handles the generation of the key format identifier and the selection of
    the proper hash function. Also grabs the proper curve from the 'ecdsa'
    package.
    c                 óD  — || _         |j                  | _        d| j                   z   | _        | j                  dk  rt        j
                  | _        || _	        y | j                  dk  rt        j                  | _        || _	        y t        j                  | _        || _	        y )Núecdsa-sha2-é   i€  )
Ú	nist_nameÚkey_sizeÚ
key_lengthÚkey_format_identifierr   ÚSHA256Úhash_objectÚSHA384ÚSHA512Úcurve_class)Úselfr   r   s      úR/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/paramiko/ecdsakey.pyÚ__init__z_ECDSACurve.__init__0   s‡   € Ø"ˆŒØ%×.Ñ.ˆŒð &3°T·^±^Ñ%CˆÔ"ð �?‰?˜cÒ!Ü%Ÿ}™}ˆDÔð 'ˆÕð �_‰_ Ò#Ü%Ÿ}™}ˆDÔð 'ˆÕô  &Ÿ}™}ˆDÔà&ˆÕó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r    © r!   r   r   r   '   s   „ ñó'r!   r   c                   ó.   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_ECDSACurveSetz°
    A collection to hold the ECDSA curves. Allows querying by oid and by key
    format identifier. The two ways in which ECDSAKey needs to be able to look
    up curves.
    c                 ó   — || _         y ©N)Úecdsa_curves)r   r+   s     r   r    z_ECDSACurveSet.__init__I   s
   € Ø(ˆÕr!   c                 óT   — | j                   D �cg c]  }|j                  ‘Œ c}S c c}w r*   ©r+   r   )r   Úcurves     r   Úget_key_format_identifier_listz-_ECDSACurveSet.get_key_format_identifier_listL   s"   € Ø9=×9JÑ9JÖK°�×+Ó+ÒKÐKùÒKs   �%c                 óL   — | j                   D ]  }|j                  |k(  sŒ|c S  y r*   )r+   r   )r   r   r.   s      r   Úget_by_curve_classz!_ECDSACurveSet.get_by_curve_classO   s*   € Ø×&Ñ&ò 	ˆEØ× Ñ  KÓ/Ø’ñ	r!   c                 óL   — | j                   D ]  }|j                  |k(  sŒ|c S  y r*   r-   )r   r   r.   s      r   Úget_by_key_format_identifierz+_ECDSACurveSet.get_by_key_format_identifierT   s+   € Ø×&Ñ&ò 	ˆEØ×*Ñ*Ð.CÓCØ’ñ	r!   c                 óL   — | j                   D ]  }|j                  |k(  sŒ|c S  y r*   )r+   r   )r   r   r.   s      r   Úget_by_key_lengthz _ECDSACurveSet.get_by_key_lengthY   s*   € Ø×&Ñ&ò 	ˆEØ×Ñ :Ó-Ø’ñ	r!   N)	r"   r#   r$   r%   r    r/   r1   r3   r5   r&   r!   r   r(   r(   B   s!   „ ñò)òLòò
ó
r!   r(   c                   ób  — e Zd ZdZ e eej                  d«       eej                  d«       eej                  d«      g«      Z
	 	 	 	 	 	 	 d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 ej                  «       ddfd„«       Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚECDSAKeyz\
    Representation of an ECDSA key which can be used to sign and verify SSH2
    data.
    Únistp256Únistp384Únistp521Nc                 óà  — d | _         d | _        d | _        |�| j                  ||«       y |�| j	                  ||«       y |€|�t        |«      }|�P|\  | _        | _         | j                  j                  j                  }| j                  j                  |«      | _
        y |j                  «       }	d}
|	j                  |
«      r|	d t        |
«        }	| j                  j                  |	«      | _
        | j                  j                  «       }|D �cg c]  }dj!                  |«      ‘Œ }}| j#                  |||¬«       |j                  «       }|| j                  j$                  k7  rt'        dj!                  |«      «      ‚|j)                  «       }	 t*        j,                  j/                  | j                  j1                  «       |«      }|| _         y c c}w # t2        $ r t'        d«      ‚w xY w)Nz-cert-v01@openssh.comz{}-cert-v01@openssh.com)ÚmsgÚkey_typeÚ	cert_typezCan't handle curve of type {}zInvalid public key)Úverifying_keyÚsigning_keyÚpublic_blobÚ_from_private_keyÚ_from_private_key_filer   r.   Ú	__class__Ú_ECDSA_CURVESr1   Úecdsa_curveÚget_textÚendswithÚlenr3   r/   ÚformatÚ_check_type_and_load_certr   r   Ú
get_binaryr   ÚEllipticCurvePublicKeyÚfrom_encoded_pointr   Ú
ValueError)r   r<   ÚdataÚfilenameÚpasswordÚvalsÚfile_objÚvalidate_pointÚc_classr=   ÚsuffixÚ	key_typesÚxÚ
cert_typesÚ	curvenameÚ	pointinfoÚkeys                    r   r    zECDSAKey.__init__m   sô  € ð "ˆÔØˆÔØˆÔØÐØ×"Ñ" 8¨XÔ6ØØÐØ×'Ñ'¨°(Ô;ØØˆK˜dÐ.Ü˜$“-ˆCØÐØ37Ñ0ˆDÔ˜dÔ0Ø×&Ñ&×,Ñ,×6Ñ6ˆGØ#×1Ñ1×DÑDÀWÓMˆDÕð —|‘|“~ˆHð
 -ˆFØ× Ñ  Ô(Ø# N¤s¨6£{ lÐ3�Ø#×1Ñ1×NÑNØó ˆDÔð ×*Ñ*×IÑIÓKˆIà=FöØ89Ð)×0Ñ0°Õ3ðˆJð ð ×*Ñ*Ø )°zð +ô ð Ÿ™›ˆIØ˜D×,Ñ,×6Ñ6Ò6Ü"Ø3×:Ñ:¸9ÓEóð ð Ÿ™Ó(ˆIð9Ü×/Ñ/×BÑBØ×$Ñ$×0Ñ0Ó2°Ió�ð &)�Õ"ùò#øô$ ò 9Ü"Ð#7Ó8Ð8ð9ús   ÄGÆ?G ÇG-c                 ó6   — | j                   j                  «       S r*   )rE   r/   ©Úclss    r   ÚidentifierszECDSAKey.identifiers«   s   € à× Ñ ×?Ñ?ÓAÐAr!   c                 ó"   — | j                  «       S r*   )ra   r_   s    r   Ú supported_key_format_identifiersz)ECDSAKey.supported_key_format_identifiers°   s   € à�‰Ó Ð r!   c                 ó   — | j                   }t        «       }|j                  | j                  j                  «       |j                  | j                  j
                  «       |j                  «       }|j                  j                  dz   dz  }t        |j                  d¬«      }d|t        |«      z
  z  |z   }t        |j                  d¬«      }d|t        |«      z
  z  |z   }t        |z   |z   }|j                  |«       |j                  «       S )Né   é   F)Úadd_sign_paddingó    )r?   r   Ú
add_stringrF   r   r   Úpublic_numbersr.   r   r   rY   rI   Úyr   Úasbytes)r   r]   ÚmÚnumbersÚkey_size_bytesÚx_bytesÚy_bytesÚ	point_strs           r   rl   zECDSAKey.asbytes´   sâ   € Ø× Ñ ˆÜ‹IˆØ	�‰�T×%Ñ%×;Ñ;Ô<Ø	�‰�T×%Ñ%×/Ñ/Ô0à×$Ñ$Ó&ˆàŸ)™)×,Ñ,¨qÑ0°QÑ6ˆä˜wŸy™y¸5ÔAˆØ˜^¬c°'«lÑ:Ñ;¸gÑEˆä˜wŸy™y¸5ÔAˆØ˜^¬c°'«lÑ:Ñ;¸gÑEˆä Ñ'¨'Ñ1ˆ	Ø	�‰�YÔØ�y‰y‹{Ðr!   c                 ó"   — | j                  «       S r*   )rl   ©r   s    r   Ú__str__zECDSAKey.__str__È   s   € Ø�|‰|‹~Ðr!   c                 ó°   — | j                  «       | j                  j                  «       j                  | j                  j                  «       j                  fS r*   )Úget_namer?   rj   rY   rk   rt   s    r   Ú_fieldszECDSAKey._fieldsË   sG   € ð �M‰M‹OØ×Ñ×-Ñ-Ó/×1Ñ1Ø×Ñ×-Ñ-Ó/×1Ñ1ð
ð 	
r!   c                 ó.   — | j                   j                  S r*   )rF   r   rt   s    r   rw   zECDSAKey.get_nameÓ   s   € Ø×Ñ×5Ñ5Ð5r!   c                 ó.   — | j                   j                  S r*   )rF   r   rt   s    r   Úget_bitszECDSAKey.get_bitsÖ   s   € Ø×Ñ×*Ñ*Ð*r!   c                 ó   — | j                   d uS r*   )r@   rt   s    r   Úcan_signzECDSAKey.can_signÙ   s   € Ø×Ñ tÐ+Ð+r!   c                 óT  — t        j                  | j                  j                  «       «      }| j                  j                  ||«      }t        |«      \  }}t        «       }|j                  | j                  j                  «       |j                  | j                  ||«      «       |S r*   )r   ÚECDSArF   r   r@   Úsignr	   r   ri   r   Ú
_sigencode)r   rP   Ú	algorithmÚecdsaÚsigÚrÚsrm   s           r   Úsign_ssh_datazECDSAKey.sign_ssh_dataÜ   s€   € Ü—‘˜×)Ñ)×5Ñ5Ó7Ó8ˆØ×Ñ×#Ñ# D¨%Ó0ˆÜ# CÓ(‰ˆˆ1ä‹IˆØ	�‰�T×%Ñ%×;Ñ;Ô<Ø	�‰�T—_‘_ Q¨Ó*Ô+Øˆr!   c                 ód  — |j                  «       | j                  j                  k7  ry|j                  «       }| j	                  |«      \  }}t        ||«      }	 | j                  j                  ||t        j                  | j                  j                  «       «      «       y# t        $ r Y yw xY w)NFT)rG   rF   r   rL   Ú
_sigdecoder
   r?   Úverifyr   r   r   r   )r   rP   r<   r„   ÚsigRÚsigSÚ	signatures          r   Úverify_ssh_sigzECDSAKey.verify_ssh_sigæ   sš   € Ø�<‰<‹>˜T×-Ñ-×CÑCÒCØØ�n‰nÓˆØ—_‘_ SÓ)‰
ˆˆdÜ(¨¨tÓ4ˆ	ð	Ø×Ñ×%Ñ%Ø˜4¤§¡¨$×*:Ñ*:×*FÑ*FÓ*HÓ!Iôð øô  ò 	Ùð	ús   ÁAB# Â#	B/Â.B/c                 ór   — | j                  || j                  t        j                  j                  |¬«       y ©N)rR   )Ú_write_private_key_filer@   r   ÚPrivateFormatÚTraditionalOpenSSL)r   rQ   rR   s      r   Úwrite_private_key_filezECDSAKey.write_private_key_fileö   s3   € Ø×$Ñ$ØØ×ÑÜ×'Ñ'×:Ñ:Øð	 	%õ 	
r!   c                 ór   — | j                  || j                  t        j                  j                  |¬«       y r�   )Ú_write_private_keyr@   r   r’   r“   )r   rT   rR   s      r   Úwrite_private_keyzECDSAKey.write_private_keyþ   s3   € Ø×ÑØØ×ÑÜ×'Ñ'×:Ñ:Øð	 	 õ 	
r!   c                 ó
  — |�G| j                   j                  |«      }|€t        dj                  |«      «      ‚|j	                  «       }t        j                  |t        «       ¬«      }t        ||j                  «       f¬«      S )a  
        Generate a new private ECDSA key.  This factory function can be used to
        generate a new host key or authentication key.

        :param progress_func: Not used for this type of key.
        :returns: A new private key (`.ECDSAKey`) object
        zUnsupported key length: {:d})Úbackend)rS   )
rE   r5   rO   rJ   r   r   Úgenerate_private_keyr   r7   Ú
public_key)r`   r.   Úprogress_funcÚbitsÚprivate_keys        r   ÚgeneratezECDSAKey.generate  sx   € ð ÐØ×%Ñ%×7Ñ7¸Ó=ˆEØˆ}Ü Ð!?×!FÑ!FÀtÓ!LÓMÐMØ×%Ñ%Ó'ˆEä×-Ñ-¨e¼_Ó=NÔOˆÜ˜k¨;×+AÑ+AÓ+CÐDÔEÐEr!   c                 óL   — | j                  d||«      }| j                  |«       y ©NÚEC)Ú_read_private_key_fileÚ_decode_key)r   rQ   rR   rP   s       r   rC   zECDSAKey._from_private_key_file  s$   € Ø×*Ñ*¨4°¸8ÓDˆØ×Ñ˜Õr!   c                 óL   — | j                  d||«      }| j                  |«       y r¡   )Ú_read_private_keyr¤   )r   rT   rR   rP   s       r   rB   zECDSAKey._from_private_key  s$   € Ø×%Ñ% d¨H°hÓ?ˆØ×Ñ˜Õr!   c                 ó6  — |\  }}|| j                   k(  r"	 t        j                  |d t        «       ¬«      }n·|| j                  k(  r—	 t        |«      }|j                  «       }|j                  «       }|j                  «       }d|z   }	| j                  j!                  |	«      }
|
st        d«      ‚t#        j$                  ||
j'                  «       t        «       «      }n| j+                  |«       | _        |j/                  «       | _        |j2                  j4                  }| j                  j7                  |«      | _        y # t        t
        t        t        f$ r}t        t        |«      «      ‚d }~ww xY w# t(        $ r}t        t        |«      «      ‚d }~ww xY w)N)rR   r™   r   zInvalid key curve identifier)Ú_PRIVATE_KEY_FORMAT_ORIGINALr   Úload_der_private_keyr   rO   ÚAssertionErrorÚ	TypeErrorr   r   ÚstrÚ_PRIVATE_KEY_FORMAT_OPENSSHr   rG   rL   Ú	get_mpintrE   r3   r   Úderive_private_keyr   Ú	ExceptionÚ_got_bad_key_format_idr@   r›   r?   r.   rD   r1   rF   )r   rP   Úpkformatr]   Úer<   Ú
curve_nameÚverkeyÚsigkeyÚnamer.   r   s               r   r¤   zECDSAKey._decode_key"  sl  € Ø‰ˆ�$Ø�t×8Ñ8Ò8ð
+Ü#×8Ñ8Ø 4´Ó1Bô‘ð ˜×9Ñ9Ò9ð+Ü˜d“m�Ø Ÿ\™\›^�
ØŸ™Ó)�ØŸ™›�Ø$ zÑ1�Ø×*Ñ*×GÑGÈÓM�ÙÜ&Ð'EÓFÐFÜ×+Ñ+Ø˜E×-Ñ-Ó/´Ó1Bó‘ð ×'Ñ'¨Ô1àˆÔØ Ÿ^™^Ó-ˆÔØ—i‘i×)Ñ)ˆØ×-Ñ-×@Ñ@ÀÓMˆÕøô; ÜÜÜ$ð	ò +ô #¤3 q£6Ó*Ð*ûð+ûô( ò +ô #¤3 q£6Ó*Ð*ûð+ús0   – E ÁBE6 ÅE3ÅE.Å.E3Å6	FÅ?FÆFc                 óz   — t        «       }|j                  |«       |j                  |«       |j                  «       S r*   )r   Ú	add_mpintrl   )r   r…   r†   r<   s       r   r�   zECDSAKey._sigencodeI  s-   € Ü‹iˆØ�‰�aÔØ�‰�aÔØ�{‰{‹}Ðr!   c                 ó`   — t        |«      }|j                  «       }|j                  «       }||fS r*   )r   r®   )r   r„   r<   r…   r†   s        r   r‰   zECDSAKey._sigdecodeO  s*   € Ü�c‹lˆØ�M‰M‹OˆØ�M‰M‹OˆØ�!ˆtˆr!   )NNNNNNTr*   ) r"   r#   r$   r%   r(   r   r   Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1rE   r    Úclassmethodra   rc   rl   ru   Úpropertyrx   rw   r{   r}   r‡   rŽ   r”   r—   rŸ   rC   rB   r¤   r�   r‰   r&   r!   r   r7   r7   _   s
  „ ññ
 #á˜Ÿ™ jÓ1Ù˜Ÿ™ jÓ1Ù˜Ÿ™ jÓ1ð	
ó€Mð ØØØØØàó<9ð| ñBó ðBð ñ!ó ð!òò(ð ñ
ó ð
ò6ò+ò,óòó 
ó
ð Ø(˜BŸL™L›N¸$ÀTò Fó ðFò&òò%NòNór!   r7   N)r%   Úcryptography.exceptionsr   r   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr   Ú/cryptography.hazmat.primitives.asymmetric.utilsr	   r
   Úparamiko.commonr   Úparamiko.messager   Úparamiko.pkeyr   Úparamiko.ssh_exceptionr   Úparamiko.utilr   r   r(   r7   r&   r!   r   ú<module>rÊ      sQ   ðñ&÷ KÝ 8ß @Ý 8÷õ
 &Ý $Ý Ý /Ý &÷'ñ '÷6ñ ô:tˆtõ tr!   