o
    àý°jÇ'  ã                   @  sF  U d dl mZ d dlZd dl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mZ d dlmZ G dd	„ d	ƒZG d
d„ dejd�ZG dd„ dejd�ZG dd„ dejd�ZeZe ejj¡ G dd„ dejd�ZeZe ejj¡ ejjZejj Z G dd„ deƒZ!G dd„ deƒZ"G dd„ deƒZ#G dd„ deƒZ$G dd„ deƒZ%G dd„ deƒZ&G dd „ d eƒZ'G d!d"„ d"eƒZ(G d#d$„ d$eƒZ)e&ƒ e#ƒ e&ƒ e%ƒ e#ƒ e"ƒ e!ƒ e$ƒ e'ƒ e(ƒ e)ƒ d%œZ*d&e+d'< G d(d)„ d)eƒZ,ejj-Z-	d9d:d0d1„Z.G d2d3„ d3ƒZ/ej&e&ej%e%ej$e$ej#e#ej"e"ej!e!ej0e'ej1e(ej2e)i	Z3d;d7d8„Z4dS )<é    )ÚannotationsN)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)ÚObjectIdentifier)Úopenssl)Ú_serializationÚhashesc                   @  sT   e Zd ZedƒZedƒZedƒZedƒZedƒZedƒZ	edƒZ
edƒZed	ƒZd
S )ÚEllipticCurveOIDz1.2.840.10045.3.1.1z1.3.132.0.33z1.3.132.0.10z1.2.840.10045.3.1.7z1.3.132.0.34z1.3.132.0.35z1.3.36.3.3.2.8.1.1.7z1.3.36.3.3.2.8.1.1.11z1.3.36.3.3.2.8.1.1.13N)Ú__name__Ú
__module__Ú__qualname__r   Ú	SECP192R1Ú	SECP224R1Ú	SECP256K1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚBRAINPOOLP256R1ÚBRAINPOOLP384R1ÚBRAINPOOLP512R1© r   r   úŸ/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr
      s    r
   c                   @  sH   e Zd Zeejddd„ƒƒZeejddd„ƒƒZeejddd	„ƒƒZd
S )ÚEllipticCurveÚreturnÚstrc                 C  ó   dS )z8
        The name of the curve. e.g. secp256r1.
        Nr   ©Úselfr   r   r   Úname   ó    zEllipticCurve.nameÚintc                 C  r   ©z<
        Bit size of a secret scalar for the curve.
        Nr   r   r   r   r   Úkey_size&   r    zEllipticCurve.key_sizec                 C  r   )z1
        The order of the curve's group.
        Nr   r   r   r   r   Úgroup_order-   r    zEllipticCurve.group_orderN)r   r   ©r   r!   )	r   r   r   ÚpropertyÚabcÚabstractmethodr   r#   r$   r   r   r   r   r      s    r   )Ú	metaclassc                   @  s    e Zd Zeejddd„ƒƒZdS )ÚEllipticCurveSignatureAlgorithmr   ú+asym_utils.Prehashed | hashes.HashAlgorithmc                 C  r   )z@
        The digest algorithm used with this signature.
        Nr   r   r   r   r   Ú	algorithm6   r    z)EllipticCurveSignatureAlgorithm.algorithmN©r   r+   )r   r   r   r&   r'   r(   r,   r   r   r   r   r*   5   s    r*   c                   @  s¤   e Zd Zejd)dd„ƒZejd*d	d
„ƒZeejd+dd„ƒƒZeejd,dd„ƒƒZ	ejd-dd„ƒZ
ejd.dd„ƒZejd/d d!„ƒZejd0d"d#„ƒZejd1d&d'„ƒZd(S )2ÚEllipticCurvePrivateKeyr,   ÚECDHÚpeer_public_keyÚEllipticCurvePublicKeyr   Úbytesc                 C  r   )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr   )r   r,   r0   r   r   r   ÚexchangeA   r    z EllipticCurvePrivateKey.exchangec                 C  r   )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r   r   r   r   Ú
public_keyJ   r    z"EllipticCurvePrivateKey.public_keyr   c                 C  r   ©z8
        The EllipticCurve that this key is on.
        Nr   r   r   r   r   ÚcurveP   r    zEllipticCurvePrivateKey.curver!   c                 C  r   r"   r   r   r   r   r   r#   W   r    z EllipticCurvePrivateKey.key_sizeÚdataúutils.BufferÚsignature_algorithmr*   c                 C  r   )z 
        Signs the data
        Nr   )r   r7   r9   r   r   r   Úsign^   r    zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc                 C  r   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbersh   r    z'EllipticCurvePrivateKey.private_numbersÚencodingú_serialization.EncodingÚformatú_serialization.PrivateFormatÚencryption_algorithmú)_serialization.KeySerializationEncryptionc                 C  r   ©z6
        Returns the key serialized as bytes.
        Nr   )r   r=   r?   rA   r   r   r   Úprivate_bytesn   r    z%EllipticCurvePrivateKey.private_bytesc                 C  r   ©z!
        Returns a copy.
        Nr   r   r   r   r   Ú__copy__y   r    z EllipticCurvePrivateKey.__copy__ÚmemoÚdictc                 C  r   ©z&
        Returns a deep copy.
        Nr   ©r   rG   r   r   r   Ú__deepcopy__   r    z$EllipticCurvePrivateKey.__deepcopy__N)r,   r/   r0   r1   r   r2   ©r   r1   ©r   r   r%   )r7   r8   r9   r*   r   r2   )r   r;   )r=   r>   r?   r@   rA   rB   r   r2   )r   r.   )rG   rH   r   r.   )r   r   r   r'   r(   r3   r4   r&   r6   r#   r:   r<   rD   rF   rK   r   r   r   r   r.   @   s*    	
r.   c                   @  s¢   e Zd Zeejd)dd„ƒƒZeejd*dd„ƒƒZejd+d	d
„ƒZejd,dd„ƒZ	ejd-dd„ƒZ
ed.dd„ƒZejd/d d!„ƒZejd0d"d#„ƒZejd1d&d'„ƒZd(S )2r1   r   r   c                 C  r   r5   r   r   r   r   r   r6   ‹   r    zEllipticCurvePublicKey.curver!   c                 C  r   r"   r   r   r   r   r   r#   ’   r    zEllipticCurvePublicKey.key_sizeÚEllipticCurvePublicNumbersc                 C  r   )z8
        Returns an EllipticCurvePublicNumbers.
        Nr   r   r   r   r   Úpublic_numbers™   r    z%EllipticCurvePublicKey.public_numbersr=   r>   r?   ú_serialization.PublicFormatr2   c                 C  r   rC   r   )r   r=   r?   r   r   r   Úpublic_bytesŸ   r    z#EllipticCurvePublicKey.public_bytesÚ	signaturer8   r7   r9   r*   ÚNonec                 C  r   )z5
        Verifies the signature of the data.
        Nr   )r   rR   r7   r9   r   r   r   Úverify©   r    zEllipticCurvePublicKey.verifyr6   c                 C  sB   t  d|¡ t|ƒdkrtdƒ‚|d dvrtdƒ‚tj ||¡S )Nr7   r   z%data must not be an empty byte string)é   é   é   z%Unsupported elliptic curve point type)r   Ú_check_bytesÚlenÚ
ValueErrorÚrust_opensslÚecÚfrom_public_bytes)Úclsr6   r7   r   r   r   Úfrom_encoded_point´   s   z)EllipticCurvePublicKey.from_encoded_pointÚotherÚobjectÚboolc                 C  r   )z"
        Checks equality.
        Nr   )r   r`   r   r   r   Ú__eq__Â   r    zEllipticCurvePublicKey.__eq__c                 C  r   rE   r   r   r   r   r   rF   È   r    zEllipticCurvePublicKey.__copy__rG   rH   c                 C  r   rI   r   rJ   r   r   r   rK   Î   r    z#EllipticCurvePublicKey.__deepcopy__NrM   r%   )r   rN   )r=   r>   r?   rP   r   r2   )rR   r8   r7   r8   r9   r*   r   rS   )r6   r   r7   r2   r   r1   )r`   ra   r   rb   rL   )rG   rH   r   r1   )r   r   r   r&   r'   r(   r6   r#   rO   rQ   rT   Úclassmethodr_   rc   rF   rK   r   r   r   r   r1   Š   s*    	
r1   c                   @  ó   e Zd ZdZdZdZdS )r   Ú	secp521r1i	  l#   	dp"z\}[ëzˆ3"näZ;PKÜ#
`ü7ÍrËoÁC†QôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN©r   r   r   r   r#   r$   r   r   r   r   r   Ü   ó    r   c                   @  re   )r   Ú	secp384r1é€  l   s)Š«e`g®w’lX_[nÐlv|ÿÿÿÿÿÿÿÿÿÿÿÿÿNrg   r   r   r   r   r   â   rh   r   c                   @  re   )r   Ú	secp256r1é   l   Q%Æx+ÎOhóbi+}s¼ÿÿÿÿ   @ÿÿ Nrg   r   r   r   r   r   è   ó
    ÿr   c                   @  re   )r   Ú	secp256k1rl   l   AAl 3z’~»i«9nWº~ÿÿÿÿÿÿÿÿ Nrg   r   r   r   r   r   ð   rm   r   c                   @  re   )r   Ú	secp224r1éà   l   =*¸8%éá¸(‹ÿÿÿÿÿÿÿ?Nrg   r   r   r   r   r   ø   rh   r   c                   @  re   )r   Ú	secp192r1éÀ   l   1(¤iÆ&^#aß;æÿÿÿÿÿÿNrg   r   r   r   r   r   þ   rh   r   c                   @  re   )ÚBrainpoolP256R1ÚbrainpoolP256r1rl   l   §V�.
:ð yo4,í(½ŒqvBT0æC7U{hí+û) Nrg   r   r   r   r   rs     rm   rs   c                   @  re   )ÚBrainpoolP384R1ÚbrainpoolP384r1rj   l   eeRHA\1øoÚ+[Ï'K°2s3ñ1Ö
U{„8/¾™Cò{Öu%NQA9Nrg   r   r   r   r   ru     rh   ru   c                   @  re   )ÚBrainpoolP512R1ÚbrainpoolP512r1i   l#   i R9
Z<,Û-»B`éXG Xþe3Ã$*S .>UàÌ@Sf9fÚAtrÙY�0–ð'žqjNúg"qôm¸»U Nrg   r   r   r   r   rw     rh   rw   )Ú
prime192v1Ú
prime256v1rq   ro   rk   ri   rf   rn   rt   rv   rx   zdict[str, EllipticCurve]Ú_CURVE_TYPESc                   @  s6   e Zd Z	dddd„Zedd	d
„ƒZeddd„ƒZdS )ÚECDSAFr,   r+   Údeterministic_signingrb   c                 C  s4   ddl m} |r| ¡ stdtjƒ‚|| _|| _d S )Nr   )ÚbackendzZECDSA with deterministic signature (RFC 6979) is not supported by this version of OpenSSL.)Ú,cryptography.hazmat.backends.openssl.backendr~   Úecdsa_deterministic_supportedr   r   Ú UNSUPPORTED_PUBLIC_KEY_ALGORITHMÚ
_algorithmÚ_deterministic_signing)r   r,   r}   r~   r   r   r   Ú__init__(  s   ÿþý
zECDSA.__init__r   c                 C  ó   | j S ©N)r‚   r   r   r   r   r,   ;  ó   zECDSA.algorithmc                 C  r…   r†   )rƒ   r   r   r   r   r}   A  r‡   zECDSA.deterministic_signingN)F)r,   r+   r}   rb   r-   )r   rb   )r   r   r   r„   r&   r,   r}   r   r   r   r   r|   '  s    ýr|   Úprivate_valuer!   r6   r~   ú
typing.Anyr   c                 C  s0   t | tƒs	tdƒ‚| dkrtdƒ‚tj | |¡S )Nz&private_value must be an integer type.r   z)private_value must be a positive integer.)Ú
isinstancer!   Ú	TypeErrorrZ   r[   r\   Úderive_private_key)rˆ   r6   r~   r   r   r   rŒ   K  s
   
rŒ   c                   @  s   e Zd ZdS )r/   N)r   r   r   r   r   r   r   r/   Y  s    r/   Úoidr   útype[EllipticCurve]c                 C  s"   zt |  W S  ty   tdƒ‚w )NzCThe provided object identifier has no matching elliptic curve class)Ú_OID_TO_CURVEÚKeyErrorÚLookupError)r�   r   r   r   Úget_curve_for_oidj  s   
ÿÿr’   r†   )rˆ   r!   r6   r   r~   r‰   r   r.   )r�   r   r   rŽ   )5Ú
__future__r   r'   ÚtypingÚcryptographyr   Úcryptography.exceptionsr   r   Úcryptography.hazmat._oidr   Ú"cryptography.hazmat.bindings._rustr   r[   Úcryptography.hazmat.primitivesr   r	   Ú)cryptography.hazmat.primitives.asymmetricÚ
asym_utilsr
   ÚABCMetar   r*   r.   Ú(EllipticCurvePrivateKeyWithSerializationÚregisterr\   ÚECPrivateKeyr1   Ú'EllipticCurvePublicKeyWithSerializationÚECPublicKeyr;   rN   r   r   r   r   r   r   rs   ru   rw   r{   Ú__annotations__r|   Úgenerate_private_keyrŒ   r/   r   r   r   r�   r’   r   r   r   r   Ú<module>   sr   FKõ!ý÷