U
    c6{iÇ2  ã                &   @  sX  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)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/d0„ d0eƒZ/G d1d2„ d2eƒZ0G d3d4„ d4eƒZ1G d5d6„ d6eƒZ2G d7d8„ d8eƒZ3e0ƒ e-ƒ e0ƒ e/ƒ e-ƒ e,ƒ e+ƒ e.ƒ e*ƒ e)ƒ e(ƒ e'ƒ e&ƒ e%ƒ e$ƒ e#ƒ e"ƒ e!ƒ e1ƒ e2ƒ e3ƒ d9œZ4d:e5d;< G d<d=„ d=eƒZ6ejj7Z7dJd>dd?dd@œdAdB„Z8G dCdD„ dDƒZ9ej0e0ej/e/ej.e.ej-e-ej,e,ej+e+ej:e1ej;e2ej<e3ej*e*ej%e%ej)e)ej$e$ej(e(ej#e#ej'e'ej"e"ej&e&ej!e!iZ=dEdFdGœdHdI„Z>dS )Ké    )ÚannotationsN)Úutils)ÚUnsupportedAlgorithmÚ_Reasons)ÚObjectIdentifier)Úopenssl)Ú_serializationÚhashesc                   @  s¤   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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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.13z1.3.132.0.1z1.3.132.0.15z1.3.132.0.26z1.3.132.0.27z1.3.132.0.16z1.3.132.0.17z1.3.132.0.36z1.3.132.0.37z1.3.132.0.38z1.3.132.0.39N)Ú__name__Ú
__module__Ú__qualname__r   Ú	SECP192R1Ú	SECP224R1Ú	SECP256K1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1ÚBRAINPOOLP256R1ÚBRAINPOOLP384R1ÚBRAINPOOLP512R1Ú	SECT163K1Ú	SECT163R2Ú	SECT233K1Ú	SECT233R1Ú	SECT283K1Ú	SECT283R1Ú	SECT409K1Ú	SECT409R1Ú	SECT571K1Ú	SECT571R1© r!   r!   úP/tmp/pip-unpacked-wheel-6eg_dtv9/cryptography/hazmat/primitives/asymmetric/ec.pyr
      s&   r
   c                   @  sT   e Zd Zeejddœdd„ƒƒZeejddœdd„ƒƒZeejddœdd	„ƒƒZd
S )ÚEllipticCurveÚstr©Úreturnc                 C  s   dS )z8
        The name of the curve. e.g. secp256r1.
        Nr!   ©Úselfr!   r!   r"   Úname)   s    zEllipticCurve.nameÚintc                 C  s   dS ©z<
        Bit size of a secret scalar for the curve.
        Nr!   r'   r!   r!   r"   Úkey_size0   s    zEllipticCurve.key_sizec                 C  s   dS )z1
        The order of the curve's group.
        Nr!   r'   r!   r!   r"   Úgroup_order7   s    zEllipticCurve.group_orderN)	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d„ƒƒZdS )ÚEllipticCurveSignatureAlgorithmú+asym_utils.Prehashed | hashes.HashAlgorithmr%   c                 C  s   dS )z@
        The digest algorithm used with this signature.
        Nr!   r'   r!   r!   r"   Ú	algorithm@   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r   r.   r/   r0   r4   r!   r!   r!   r"   r2   ?   s   r2   c                   @  sÂ   e Zd Zejddddœdd„ƒZejddœdd	„ƒZeejd
dœdd„ƒƒZeejddœdd„ƒƒZ	ejddddœdd„ƒZ
ejddœdd„ƒZejdddddœdd„ƒZejd dœdd„ƒZd S )!ÚEllipticCurvePrivateKeyÚECDHÚEllipticCurvePublicKeyÚbytes)r4   Úpeer_public_keyr&   c                 C  s   dS )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr!   )r(   r4   r9   r!   r!   r"   ÚexchangeK   s    z EllipticCurvePrivateKey.exchanger%   c                 C  s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr!   r'   r!   r!   r"   Ú
public_keyT   s    z"EllipticCurvePrivateKey.public_keyr#   c                 C  s   dS ©z8
        The EllipticCurve that this key is on.
        Nr!   r'   r!   r!   r"   ÚcurveZ   s    zEllipticCurvePrivateKey.curver*   c                 C  s   dS r+   r!   r'   r!   r!   r"   r,   a   s    z EllipticCurvePrivateKey.key_sizeúutils.Bufferr2   )ÚdataÚsignature_algorithmr&   c                 C  s   dS )z 
        Signs the data
        Nr!   )r(   r?   r@   r!   r!   r"   Úsignh   s    zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc                 C  s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr!   r'   r!   r!   r"   Úprivate_numbersr   s    z'EllipticCurvePrivateKey.private_numbersú_serialization.Encodingz_serialization.PrivateFormatz)_serialization.KeySerializationEncryption)ÚencodingÚformatÚencryption_algorithmr&   c                 C  s   dS ©z6
        Returns the key serialized as bytes.
        Nr!   )r(   rE   rF   rG   r!   r!   r"   Úprivate_bytesx   s    z%EllipticCurvePrivateKey.private_bytesc                 C  s   dS ©z!
        Returns a copy.
        Nr!   r'   r!   r!   r"   Ú__copy__ƒ   s    z EllipticCurvePrivateKey.__copy__N)r   r   r   r/   r0   r:   r;   r.   r=   r,   rA   rC   rI   rK   r!   r!   r!   r"   r5   J   s$   	
r5   c                   @  sÂ   e Zd Zeejddœdd„ƒƒZeejddœdd„ƒƒZejddœd	d
„ƒZejddddœdd„ƒZ	ejdddddœdd„ƒZ
eddd dœdd„ƒZejdddœdd„ƒZejd dœdd „ƒZd!S )"r7   r#   r%   c                 C  s   dS r<   r!   r'   r!   r!   r"   r=   �   s    zEllipticCurvePublicKey.curver*   c                 C  s   dS r+   r!   r'   r!   r!   r"   r,   –   s    zEllipticCurvePublicKey.key_sizeÚEllipticCurvePublicNumbersc                 C  s   dS )z8
        Returns an EllipticCurvePublicNumbers.
        Nr!   r'   r!   r!   r"   Úpublic_numbers�   s    z%EllipticCurvePublicKey.public_numbersrD   z_serialization.PublicFormatr8   )rE   rF   r&   c                 C  s   dS rH   r!   )r(   rE   rF   r!   r!   r"   Úpublic_bytes£   s    z#EllipticCurvePublicKey.public_bytesr>   r2   ÚNone)Ú	signaturer?   r@   r&   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr!   )r(   rP   r?   r@   r!   r!   r"   Úverify­   s    zEllipticCurvePublicKey.verify)r=   r?   r&   c                 C  sB   t  d|¡ t|ƒdkr tdƒ‚|d dkr4tdƒ‚tj ||¡S )Nr?   r   z%data must not be an empty byte string)é   é   é   z%Unsupported elliptic curve point type)r   Ú_check_bytesÚlenÚ
ValueErrorÚrust_opensslÚecZfrom_public_bytes)Úclsr=   r?   r!   r!   r"   Úfrom_encoded_point¸   s    z)EllipticCurvePublicKey.from_encoded_pointÚobjectÚbool)Úotherr&   c                 C  s   dS )z"
        Checks equality.
        Nr!   )r(   r^   r!   r!   r"   Ú__eq__Æ   s    zEllipticCurvePublicKey.__eq__c                 C  s   dS rJ   r!   r'   r!   r!   r"   rK   Ì   s    zEllipticCurvePublicKey.__copy__N)r   r   r   r.   r/   r0   r=   r,   rM   rN   rQ   Úclassmethodr[   r_   rK   r!   r!   r!   r"   r7   Ž   s$   	
r7   c                   @  s   e Zd ZdZdZdZdS )r    Ú	sect571r1i:  l&   GNÐ_ì&èfš.TOô!9;{(‚c3B9LU1‡ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿN©r   r   r   r)   r,   r-   r!   r!   r!   r"   r    Ú   s   r    c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect409r1é™  l   sD3ß4&8x¥@'>R_>fÌK05­*<                            Nrb   r!   r!   r!   r"   r   à   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect283r1é  l   3[_ó)!XeRq$?0K9ßÿÿÿÿÿÿÿÿÿNrb   r!   r!   r!   r"   r   æ   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect233r1éé   l   ×`Ÿ˜t’&ñe9]ô	              € Nrb   r!   r!   r!   r"   r   ì   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect163r2é£   l   3LFHJ08?ç/R          Nrb   r!   r!   r!   r"   r   ò   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect571k1i;  l&   øF=^ógEk;RNkåK°aØb	z95ä,ò1šqÃ!aL                                     @Nrb   r!   r!   r!   r"   r   ø   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect409k1rd   l   Ï_<@ãäZ´%ù|ø4¯>UD �(§;xËÿÿÿÿÿÿÿÿÿÿÿÿÿ Nrb   r!   r!   r!   r"   r   þ   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect283k1rf   l   a<,<x("ùw¿KÉ]:h..ÓÿÿÿÿÿÿÿÿÿNrb   r!   r!   r!   r"   r     s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect233k1rh   l   ß+çbWkØwFM·"îVN              @ Nrb   r!   r!   r!   r"   r   
  s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	sect163k1rj   l   ï%ñ360Š@          Nrb   r!   r!   r!   r"   r     s   r   c                   @  s   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ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNrb   r!   r!   r!   r"   r     s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp384r1é€  l   s)Š«e`g®w’lX_[nÐlv|ÿÿÿÿÿÿÿÿÿÿÿÿÿNrb   r!   r!   r!   r"   r     s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp256r1é   l   Q%Æx+ÎOhóbi+}s¼ÿÿÿÿ   @ÿÿ Nrb   r!   r!   r!   r"   r   "  s   ÿr   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp256k1rt   l   AAl 3z’~»i«9nWº~ÿÿÿÿÿÿÿÿ Nrb   r!   r!   r!   r"   r   *  s   ÿr   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp224r1éà   l   =*¸8%éá¸(‹ÿÿÿÿÿÿÿ?Nrb   r!   r!   r!   r"   r   2  s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp192r1éÀ   l   1(¤iÆ&^#aß;æÿÿÿÿÿÿNrb   r!   r!   r!   r"   r   8  s   r   c                   @  s   e Zd ZdZdZdZdS )ÚBrainpoolP256R1ÚbrainpoolP256r1rt   l   §V�.
:ð yo4,í(½ŒqvBT0æC7U{hí+û) Nrb   r!   r!   r!   r"   rz   >  s   ÿrz   c                   @  s   e Zd ZdZdZdZdS )ÚBrainpoolP384R1ÚbrainpoolP384r1rr   l   eeRHA\1øoÚ+[Ï'K°2s3ñ1Ö
U{„8/¾™Cò{Öu%NQA9Nrb   r!   r!   r!   r"   r|   F  s   r|   c                   @  s   e Zd ZdZdZdZdS )ÚBrainpoolP512R1ÚbrainpoolP512r1i   l#   i R9
Z<,Û-»B`éXG Xþe3Ã$*S .>UàÌ@Sf9fÚAtrÙY�0–ð'žqjNúg"qôm¸»U Nrb   r!   r!   r!   r"   r~   L  s   r~   )Z
prime192v1Z
prime256v1rx   rv   rs   rq   rp   ru   ro   rn   rm   rl   rk   ri   rg   re   rc   ra   r{   r}   r   zdict[str, EllipticCurve]Ú_CURVE_TYPESc                   @  sB   e Zd Zddddœdd„Zeddœdd	„ƒZeddœd
d„ƒZdS )ÚECDSAFr3   r]   )r4   Údeterministic_signingc                 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.)Z,cryptography.hazmat.backends.openssl.backendrƒ   Zecdsa_deterministic_supportedr   r   Z UNSUPPORTED_PUBLIC_KEY_ALGORITHMÚ
_algorithmÚ_deterministic_signing)r(   r4   r‚   rƒ   r!   r!   r"   Ú__init__l  s    ÿþýzECDSA.__init__r%   c                 C  s   | j S ©N)r„   r'   r!   r!   r"   r4     s    zECDSA.algorithmc                 C  s   | j S r‡   )r…   r'   r!   r!   r"   r‚   …  s    zECDSA.deterministic_signingN)F)r   r   r   r†   r.   r4   r‚   r!   r!   r!   r"   r�   k  s    ýr�   r*   z
typing.Any)Úprivate_valuer=   rƒ   r&   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*   Ú	TypeErrorrW   rX   rY   Úderive_private_key)rˆ   r=   rƒ   r!   r!   r"   r‹   �  s
    
r‹   c                   @  s   e Zd ZdS )r6   N)r   r   r   r!   r!   r!   r"   r6   �  s   r6   r   ztype[EllipticCurve])Úoidr&   c                 C  s,   z
t |  W S  tk
r&   tdƒ‚Y nX d S )NzCThe provided object identifier has no matching elliptic curve class)Ú_OID_TO_CURVEÚKeyErrorÚLookupError)rŒ   r!   r!   r"   Úget_curve_for_oid¸  s    
ÿr�   )N)?Ú
__future__r   r/   ÚtypingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat._oidr   Z"cryptography.hazmat.bindings._rustr   rX   Zcryptography.hazmat.primitivesr   r	   Z)cryptography.hazmat.primitives.asymmetricZ
asym_utilsr
   ÚABCMetar#   r2   r5   Z(EllipticCurvePrivateKeyWithSerializationÚregisterrY   ZECPrivateKeyr7   Z'EllipticCurvePublicKeyWithSerializationZECPublicKeyrB   rL   r    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rz   r|   r~   r€   Ú__annotations__r�   Zgenerate_private_keyr‹   r6   r   r   r   r�   r�   r!   r!   r!   r"   Ú<module>   sÔ    @Eë! ý                   í