U
    Á“«jÇ'  ã                   @  sT  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-d6d*dd+dd,œd-d.„Z.G d/d0„ d0ƒ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	Z3d1d2d3œd4d5„Z4dS )7é    )Ú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   úP/tmp/pip-unpacked-wheel-w0_gbkxc/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_size&   s    zEllipticCurve.key_sizec                 C  s   dS )z1
        The order of the curve's group.
        Nr   r   r   r   r   Úgroup_order-   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   Ú	algorithm6   s    z)EllipticCurveSignatureAlgorithm.algorithmN)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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ejd d d!œd"d#„ƒZd$S )%ÚEllipticCurvePrivateKeyÚECDHÚEllipticCurvePublicKeyÚbytes)r*   Ú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   r*   r/   r   r   r   ÚexchangeA   s    z EllipticCurvePrivateKey.exchanger   c                 C  s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r   r   r   r   Ú
public_keyJ   s    z"EllipticCurvePrivateKey.public_keyr   c                 C  s   dS ©z8
        The EllipticCurve that this key is on.
        Nr   r   r   r   r   ÚcurveP   s    zEllipticCurvePrivateKey.curver    c                 C  s   dS r!   r   r   r   r   r   r"   W   s    z EllipticCurvePrivateKey.key_sizeúutils.Bufferr(   )ÚdataÚsignature_algorithmr   c                 C  s   dS )z 
        Signs the data
        Nr   )r   r5   r6   r   r   r   Úsign^   s    zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc                 C  s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbersh   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   r;   r<   r=   r   r   r   Úprivate_bytesn   s    z%EllipticCurvePrivateKey.private_bytesc                 C  s   dS ©z!
        Returns a copy.
        Nr   r   r   r   r   Ú__copy__y   s    z EllipticCurvePrivateKey.__copy__Údict©Úmemor   c                 C  s   dS ©z&
        Returns a deep copy.
        Nr   ©r   rD   r   r   r   Ú__deepcopy__   s    z$EllipticCurvePrivateKey.__deepcopy__N)r   r   r   r%   r&   r0   r1   r$   r3   r"   r7   r9   r?   rA   rG   r   r   r   r   r+   @   s(   	
r+   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ejd!d d"œd#d$„ƒZd%S )&r-   r   r   c                 C  s   dS r2   r   r   r   r   r   r3   ‹   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_numbersr:   z_serialization.PublicFormatr.   )r;   r<   r   c                 C  s   dS r>   r   )r   r;   r<   r   r   r   Úpublic_bytesŸ   s    z#EllipticCurvePublicKey.public_bytesr4   r(   ÚNone)Ú	signaturer5   r6   r   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r   rL   r5   r6   r   r   r   Úverify©   s    zEllipticCurvePublicKey.verify)r3   r5   r   c                 C  sB   t  d|¡ t|ƒdkr tdƒ‚|d dkr4tdƒ‚tj ||¡S )Nr5   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)Úclsr3   r5   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   rZ   r   r   r   Ú__eq__Â   s    zEllipticCurvePublicKey.__eq__c                 C  s   dS r@   r   r   r   r   r   rA   È   s    zEllipticCurvePublicKey.__copy__rB   rC   c                 C  s   dS rE   r   rF   r   r   r   rG   Î   s    z#EllipticCurvePublicKey.__deepcopy__N)r   r   r   r$   r%   r&   r3   r"   rI   rJ   rM   ÚclassmethodrW   r[   rA   rG   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ôÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ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   Ú	secp384r1é€  l   s)Š«e`g®w’lX_[nÐlv|ÿÿÿÿÿÿÿÿÿÿÿÿÿNr^   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¼ÿÿÿÿ   @ÿÿ Nr^   r   r   r   r   r   è   s   ÿr   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp256k1rb   l   AAl 3z’~»i«9nWº~ÿÿÿÿÿÿÿÿ Nr^   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%éá¸(‹ÿÿÿÿÿÿÿ?Nr^   r   r   r   r   r   ø   s   r   c                   @  s   e Zd ZdZdZdZdS )r   Ú	secp192r1éÀ   l   1(¤iÆ&^#aß;æÿÿÿÿÿÿNr^   r   r   r   r   r   þ   s   r   c                   @  s   e Zd ZdZdZdZdS )ÚBrainpoolP256R1ÚbrainpoolP256r1rb   l   §V�.
:ð yo4,í(½ŒqvBT0æC7U{hí+û) Nr^   r   r   r   r   rh     s   ÿrh   c                   @  s   e Zd ZdZdZdZdS )ÚBrainpoolP384R1ÚbrainpoolP384r1r`   l   eeRHA\1øoÚ+[Ï'K°2s3ñ1Ö
U{„8/¾™Cò{Öu%NQA9Nr^   r   r   r   r   rj     s   rj   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 Nr^   r   r   r   r   rl     s   rl   )Z
prime192v1Z
prime256v1rf   rd   ra   r_   r]   rc   ri   rk   rm   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 )ÚECDSAFr)   rY   )r*   Ú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.backendrq   Zecdsa_deterministic_supportedr   r   Z UNSUPPORTED_PUBLIC_KEY_ALGORITHMÚ
_algorithmÚ_deterministic_signing)r   r*   rp   rq   r   r   r   Ú__init__(  s    ÿþýzECDSA.__init__r   c                 C  s   | j S ©N)rr   r   r   r   r   r*   ;  s    zECDSA.algorithmc                 C  s   | j S ru   )rs   r   r   r   r   rp   A  s    zECDSA.deterministic_signingN)F)r   r   r   rt   r$   r*   rp   r   r   r   r   ro   '  s    ýro   r    z
typing.Any)Úprivate_valuer3   rq   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    Ú	TypeErrorrS   rT   rU   Úderive_private_key)rv   r3   rq   r   r   r   ry   K  s
    
ry   c                   @  s   e Zd ZdS )r,   N)r   r   r   r   r   r   r   r,   Y  s   r,   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)rz   r   r   r   Úget_curve_for_oidj  s    
ÿr~   )N)5Ú
__future__r   r%   ÚtypingZcryptographyr   Zcryptography.exceptionsr   r   Zcryptography.hazmat._oidr   Z"cryptography.hazmat.bindings._rustr   rT   Zcryptography.hazmat.primitivesr   r	   Z)cryptography.hazmat.primitives.asymmetricZ
asym_utilsr
   ÚABCMetar   r(   r+   Z(EllipticCurvePrivateKeyWithSerializationÚregisterrU   ZECPrivateKeyr-   Z'EllipticCurvePublicKeyWithSerializationZECPublicKeyr8   rH   r   r   r   r   r   r   rh   rj   rl   rn   Ú__annotations__ro   Zgenerate_private_keyry   r,   r   r   r   r{   r~   r   r   r   r   Ú<module>   s„    FKõ! ý         ÷