B
    uf%              &   @  sH  U d dl mZ d dlZd dlZd dl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.d/ d/eZ,G d0d1 d1eZ-G d2d3 d3eZ.G d4d5 d5eZ/G d6d7 d7eZ0e- e* e- e, e* e) e( e+ e' e& e% e$ e# e" e! e  e e e. e/ e0 d8Z1d9e2d:< G d;d< d<eZ3e
jj4Z4dId=d
d>dd?d@dAZ5G dBdC dCZ6ej-e-ej,e,ej+e+ej*e*ej)e)ej(e(ej7e.ej8e/ej9e0e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:dDdEdFdGdHZ;dS )J    )annotationsN)utils)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   n/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s&   r   c               @  s<   e Z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_sizeN)r	   r
   r   propertyabcabstractmethodr%   r'   r   r   r   r    r!   '   s   r!   )	metaclassc               @  s$   e Zd ZeejddddZdS )EllipticCurveSignatureAlgorithmz+asym_utils.Prehashed | hashes.HashAlgorithm)r#   c             C  s   dS )z@
        The digest algorithm used with this signature.
        Nr   )r$   r   r   r    	algorithm8   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r	   r
   r   r(   r)   r*   r-   r   r   r   r    r,   7   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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-   r2   r   r   r    exchangeC   s    z EllipticCurvePrivateKey.exchange)r#   c             C  s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr   )r$   r   r   r    
public_keyL   s    z"EllipticCurvePrivateKey.public_keyr!   c             C  s   dS )z8
        The EllipticCurve that this key is on.
        Nr   )r$   r   r   r    curveR   s    zEllipticCurvePrivateKey.curver&   c             C  s   dS )z<
        Bit size of a secret scalar for the curve.
        Nr   )r$   r   r   r    r'   Y   s    z EllipticCurvePrivateKey.key_sizer,   )datasignature_algorithmr#   c             C  s   dS )z 
        Signs the data
        Nr   )r$   r6   r7   r   r   r    sign`   s    zEllipticCurvePrivateKey.signEllipticCurvePrivateNumbersc             C  s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   )r$   r   r   r    private_numbersj   s    z'EllipticCurvePrivateKey.private_numbersz_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_bytesp   s    	z%EllipticCurvePrivateKey.private_bytesN)r	   r
   r   r)   r*   r3   r4   r(   r5   r'   r8   r:   r>   r   r   r   r    r.   B   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dS )r0   r!   )r#   c             C  s   dS )z8
        The EllipticCurve that this key is on.
        Nr   )r$   r   r   r    r5      s    zEllipticCurvePublicKey.curver&   c             C  s   dS )z<
        Bit size of a secret scalar for the curve.
        Nr   )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_numbersz_serialization.Encodingz_serialization.PublicFormatr1   )r;   r<   r#   c             C  s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r$   r;   r<   r   r   r    public_bytes   s    z#EllipticCurvePublicKey.public_bytesr,   None)	signaturer6   r7   r#   c             C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r$   rC   r6   r7   r   r   r    verify   s    	zEllipticCurvePublicKey.verify)r5   r6   r#   c             C  sB   t d| t|dkr td|d dkr4tdtj||S )Nr6   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)clsr5   r6   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$   rQ   r   r   r    __eq__   s    zEllipticCurvePublicKey.__eq__N)r	   r
   r   r(   r)   r*   r5   r'   r@   rA   rD   classmethodrN   rR   r   r   r   r    r0      s   
r0   c               @  s   e Zd ZdZdZdS )r   	sect571r1i:  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect409r1i  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect283r1i  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect233r1   N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect163r2   N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect571k1i;  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect409k1i  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect283k1i  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect233k1rX   N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	sect163k1rZ   N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	secp521r1i	  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	secp384r1i  N)r	   r
   r   r%   r'   r   r   r   r    r      s   r   c               @  s   e Zd ZdZdZdS )r   	secp256r1   N)r	   r
   r   r%   r'   r   r   r   r    r     s   r   c               @  s   e Zd ZdZdZdS )r   	secp256k1rc   N)r	   r
   r   r%   r'   r   r   r   r    r     s   r   c               @  s   e Zd ZdZdZdS )r   	secp224r1   N)r	   r
   r   r%   r'   r   r   r   r    r     s   r   c               @  s   e Zd ZdZdZdS )r   	secp192r1   N)r	   r
   r   r%   r'   r   r   r   r    r     s   r   c               @  s   e Zd ZdZdZdS )BrainpoolP256R1brainpoolP256r1rc   N)r	   r
   r   r%   r'   r   r   r   r    ri     s   ri   c               @  s   e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1i  N)r	   r
   r   r%   r'   r   r   r   r    rk     s   rk   c               @  s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   N)r	   r
   r   r%   r'   r   r   r   r    rm      s   rm   )Z
prime192v1Z
prime256v1rg   re   rb   ra   r`   rd   r_   r^   r]   r\   r[   rY   rW   rV   rU   rT   rj   rl   rn   zdict[str, EllipticCurve]_CURVE_TYPESc               @  s,   e Zd ZddddZeddddZdS )	ECDSAz+asym_utils.Prehashed | hashes.HashAlgorithm)r-   c             C  s
   || _ d S )N)
_algorithm)r$   r-   r   r   r    __init__?  s    zECDSA.__init__)r#   c             C  s   | j S )N)rq   )r$   r   r   r    r-   E  s    zECDSA.algorithmN)r	   r
   r   rr   r(   r-   r   r   r   r    rp   >  s   rp   r&   z
typing.Any)private_valuer5   backendr#   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&   	TypeErrorrJ   rK   rL   derive_private_key)rs   r5   rt   r   r   r    rw   O  s
    
rw   c               @  s   e Zd ZdS )r/   N)r	   r
   r   r   r   r   r    r/   ]  s   r/   r   ztype[EllipticCurve])oidr#   c             C  s*   yt |  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)rx   r   r   r    get_curve_for_oidx  s
    r|   )N)<
__future__r   r)   typingZcryptographyr   Zcryptography.hazmat._oidr   Z"cryptography.hazmat.bindings._rustr   rK   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricZ
asym_utilsr   ABCMetar!   r,   r.   Z(EllipticCurvePrivateKeyWithSerializationregisterrL   ZECPrivateKeyr0   Z'EllipticCurvePublicKeyWithSerializationZECPublicKeyr9   r?   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   rk   rm   ro   __annotations__rp   Zgenerate_private_keyrw   r/   r   r   r   ry   r|   r   r   r   r    <module>   s    :?
