U
    cc8                  &   @   s$  U d dl Z d dlZd dl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G dd de jd	Z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 d,d- d-eZ"G d.d/ d/eZ#G d0d1 d1eZ$G d2d3 d3eZ%G d4d5 d5eZ&e#e e#e"e eee!eeeeeeeeeee$e%e&d6Z'ej(e)ej*e f e+d7< G d8d9 d9eZ,dIeej-ed:d;d<Z.dJe/eej-ed=d>d?Z0G d@dA dAZ1G dBdC dCZ2G dDdE dEZ3ej#e#ej"e"ej!e!ej e ejeejeej4e$ej5e%ej6e&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ejeiZ7eej*e dFdGdHZ8dS )K    N)utils)ObjectIdentifier)_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   f/var/www/html/project/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s&   r   c                   @   s4   e Zd ZejedddZejedddZdS )EllipticCurvereturnc                 C   s   dS )z8
        The name of the curve. e.g. secp256r1.
        Nr   selfr   r   r   name)   s    zEllipticCurve.namec                 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	   abcabstractpropertystrr$   intr&   r   r   r   r   r   (   s   r   )	metaclassc                   @   s.   e Zd Zejejeje	j
f dddZdS )EllipticCurveSignatureAlgorithmr    c                 C   s   dS )z@
        The digest algorithm used with this signature.
        Nr   r"   r   r   r   	algorithm7   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r	   r'   r(   typingUnion
asym_utils	Prehashedr   HashAlgorithmr-   r   r   r   r   r,   6   s   r,   c                   @   s   e Zd ZejddedddZejddddZeje	dd	d
Z
ejedddZejeeedddZejddddZejejejejedddZdS )EllipticCurvePrivateKeyECDHEllipticCurvePublicKey)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-   r6   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_keyc                 C   s   dS z8
        The EllipticCurve that this key is on.
        Nr   r"   r   r   r   curveP   s    zEllipticCurvePrivateKey.curvec                 C   s   dS r%   r   r"   r   r   r   r&   V   s    z EllipticCurvePrivateKey.key_size)datasignature_algorithmr!   c                 C   s   dS )z 
        Signs the data
        Nr   )r#   r;   r<   r   r   r   sign\   s    zEllipticCurvePrivateKey.signEllipticCurvePrivateNumbersc                 C   s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r"   r   r   r   private_numbersf   s    z'EllipticCurvePrivateKey.private_numbers)encodingformatencryption_algorithmr!   c                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr   )r#   r@   rA   rB   r   r   r   private_bytesl   s    z%EllipticCurvePrivateKey.private_bytesN)r   r   r	   r'   abstractmethodbytesr7   r8   r(   r   r:   r*   r&   r,   r=   r?   r   EncodingZPrivateFormatZKeySerializationEncryptionrD   r   r   r   r   r3   @   s0    	r3   c                   @   s   e Zd ZejedddZejedddZej	ddddZ
ej	ejejed	d
dZej	eeeddddZeeed dddZdS )r5   r    c                 C   s   dS r9   r   r"   r   r   r   r:   |   s    zEllipticCurvePublicKey.curvec                 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_numbers)r@   rA   r!   c                 C   s   dS rC   r   )r#   r@   rA   r   r   r   public_bytes   s    z#EllipticCurvePublicKey.public_bytesN)	signaturer;   r<   r!   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r#   rK   r;   r<   r   r   r   verify   s    zEllipticCurvePublicKey.verifyr:   r;   r!   c                 C   s^   t d| t|tstdt|dkr2td|d dkrFtdddlm} |	||S )Nr;   'curve must be an EllipticCurve instancer   z%data must not be an empty byte string)         %Unsupported elliptic curve point typebackend)
r   _check_bytes
isinstancer   	TypeErrorlen
ValueError,cryptography.hazmat.backends.openssl.backendrT   Z load_elliptic_curve_public_bytes)clsr:   r;   rT   r   r   r   from_encoded_point   s    
z)EllipticCurvePublicKey.from_encoded_point)r   r   r	   r'   r(   r   r:   r*   r&   rE   rI   r   rG   ZPublicFormatrF   rJ   r,   rL   classmethodr\   r   r   r   r   r5   {   s,   	
 r5   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   	sect409r1  Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect283r1  Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect233r1   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect163r2   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect571k1i;  Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect409k1ra   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect283k1rc   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect233k1re   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect163k1rg   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp521r1i	  Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp384r1  Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp256r1   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp256k1rq   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp224r1   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r
   	secp192r1   Nr_   r   r   r   r   r
     s   r
   c                   @   s   e Zd ZdZdZdS )BrainpoolP256R1brainpoolP256r1rq   Nr_   r   r   r   r   rw   
  s   rw   c                   @   s   e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1ro   Nr_   r   r   r   r   ry     s   ry   c                   @   s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   Nr_   r   r   r   r   r{     s   r{   )Z
prime192v1Z
prime256v1ru   rs   rp   rn   rm   rr   rl   rk   rj   ri   rh   rf   rd   rb   r`   r^   rx   rz   r|   _CURVE_TYPESc                   @   sH   e Zd Zejejejf dddZ	e
ejejejf dddZdS )ECDSA)r-   c                 C   s
   || _ d S N
_algorithm)r#   r-   r   r   r   __init__3  s    zECDSA.__init__r    c                 C   s   | j S r   r   r"   r   r   r   r-   9  s    zECDSA.algorithmN)r   r   r	   r.   r/   r0   r1   r   r2   r   propertyr-   r   r   r   r   r~   2  s
   r~   )r:   rT   r!   c                 C   s   ddl m} || S Nr   rS   )rZ   rT   Z#generate_elliptic_curve_private_key)r:   rT   osslr   r   r   generate_private_key@  s    r   )private_valuer:   rT   r!   c                 C   sL   ddl m} t| tstd| dkr.tdt|ts@td|| |S )Nr   rS   z&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rZ   rT   rV   r*   rW   rY   r   Z!derive_elliptic_curve_private_key)r   r:   rT   r   r   r   r   derive_private_keyH  s    

r   c                   @   s   e Zd ZeeedddZdejedddZ	e
dd	d
Zeee
d dddZeedddZeedddZeedddZeedddZedddZedddZdS )rH   )xyr:   c                 C   sD   t |trt |tstdt |ts.td|| _|| _|| _d S )Nzx and y must be integers.r   )rV   r*   rW   r   _y_x_curve)r#   r   r   r:   r   r   r   r   \  s    
z#EllipticCurvePublicNumbers.__init__NrT   r!   c                 C   s   ddl m} || S r   )rZ   rT   Z"load_elliptic_curve_public_numbersr#   rT   r   r   r   r   r8   g  s    z%EllipticCurvePublicNumbers.public_keyr    c                 C   sB   t jdtjdd | jjd d }dt| j| t| j| S )Nzencode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.rO   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r:   r&   Zint_to_bytesr   r   )r#   byte_lengthr   r   r   encode_pointn  s    	z'EllipticCurvePublicNumbers.encode_pointrM   c                 C   s   t |tstdtjdtjdd |dr|jd d }t	|d| d krt
|d|d  d	}t
||d d  d	}| |||S td
ntdd S )NrN   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrO   r   r   r   r      bigz(Invalid elliptic curve point data lengthrR   )rV   r   rW   r   r   r   r   
startswithr&   rX   r*   
from_bytesrY   )r[   r:   r;   r   r   r   r   r   r   r\     s    


z-EllipticCurvePublicNumbers.from_encoded_pointc                 C   s   | j S r   )r   r"   r   r   r   r:     s    z EllipticCurvePublicNumbers.curvec                 C   s   | j S r   )r   r"   r   r   r   r     s    zEllipticCurvePublicNumbers.xc                 C   s   | j S r   )r   r"   r   r   r   r     s    zEllipticCurvePublicNumbers.yotherr!   c                 C   sF   t |tstS | j|jkoD| j|jkoD| jj|jjkoD| jj|jjkS r   )rV   rH   NotImplementedr   r   r:   r$   r&   r#   r   r   r   r   __eq__  s    

z!EllipticCurvePublicNumbers.__eq__c                 C   s   t | j| j| jj| jjfS r   )hashr   r   r:   r$   r&   r"   r   r   r   __hash__  s    z#EllipticCurvePublicNumbers.__hash__c                 C   s
   d | S )NzC<EllipticCurvePublicNumbers(curve={0.curve.name}, x={0.x}, y={0.y}>)rA   r"   r   r   r   __repr__  s    z#EllipticCurvePublicNumbers.__repr__)N)r   r   r	   r*   r   r   r.   Anyr5   r8   rF   r   r]   r\   r   r:   r   r   objectboolr   r   r)   r   r   r   r   r   rH   [  s"    rH   c                   @   sr   e Zd ZeedddZdejedddZ	e
edd	d
Ze
edddZeedddZedddZdS )r>   )r   rI   c                 C   s4   t |tstdt |ts$td|| _|| _d S )Nz!private_value must be an integer.z>public_numbers must be an EllipticCurvePublicNumbers instance.)rV   r*   rW   rH   _private_value_public_numbers)r#   r   rI   r   r   r   r     s    

z$EllipticCurvePrivateNumbers.__init__Nr   c                 C   s   ddl m} || S r   )rZ   rT   Z#load_elliptic_curve_private_numbersr   r   r   r   private_key  s    z'EllipticCurvePrivateNumbers.private_keyr    c                 C   s   | j S r   )r   r"   r   r   r   r     s    z)EllipticCurvePrivateNumbers.private_valuec                 C   s   | j S r   )r   r"   r   r   r   rI     s    z*EllipticCurvePrivateNumbers.public_numbersr   c                 C   s&   t |tstS | j|jko$| j|jkS r   )rV   r>   r   r   rI   r   r   r   r   r     s
    

z"EllipticCurvePrivateNumbers.__eq__c                 C   s   t | j| jfS r   )r   r   rI   r"   r   r   r   r     s    z$EllipticCurvePrivateNumbers.__hash__)N)r   r   r	   r*   rH   r   r.   r   r3   r   r   r   rI   r   r   r   r   r   r   r   r   r>     s     		r>   c                   @   s   e Zd ZdS )r4   N)r   r   r	   r   r   r   r   r4     s   r4   )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)N)9r'   r.   r   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr0   r   ABCMetar   r,   r3   Z(EllipticCurvePrivateKeyWithSerializationr5   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   rw   ry   r{   r}   Dictr)   Type__annotations__r~   r   r   r*   r   rH   r>   r4   r   r   r   r   r   r   r   r   r   <module>   s    
8<   `.                   