U
    ςdC2                  &   @  s  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	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/d0 d0eZ$G d1d2 d2eZ%G d3d4 d4eZ&G d5d6 d6eZ'e$e!e$e#e!e ee"eeeeeeeeeee%e&e'd7Z(d8e)d9< G d:d; d;eZ*dOd	d<dd=d>d?Z+dPd@d	d<ddAdBdCZ,G dDdE dEZ-G dFdG dGZ.G dHdI dI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'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Z3dJdKdLdMdNZ4dS )Q    )annotationsN)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   i/var/www/html/myproject/myenv/lib/python3.8/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 )EllipticCurveSignatureAlgorithm8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]r"   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+   r,   r0   r   r   r   r   r.   6   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)r0   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%   r0   r5   r   r   r   exchangeB   s    z EllipticCurvePrivateKey.exchanger"   c                 C  s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r$   r   r   r   
public_keyK   s    z"EllipticCurvePrivateKey.public_keyr    c                 C  s   dS z8
        The EllipticCurve that this key is on.
        Nr   r$   r   r   r   curveQ   s    zEllipticCurvePrivateKey.curver'   c                 C  s   dS r(   r   r$   r   r   r   r)   X   s    z EllipticCurvePrivateKey.key_sizer.   )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_numbersi   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@   rA   rB   r   r   r   private_byteso   s    z%EllipticCurvePrivateKey.private_bytesN)r   r	   r
   r+   r,   r6   r7   r*   r9   r)   r<   r>   rD   r   r   r   r   r1   A   s    	r1   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 )r3   r    r"   c                 C  s   dS r8   r   r$   r   r   r   r9      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.PublicFormatr4   )r@   rA   r#   c                 C  s   dS rC   r   )r%   r@   rA   r   r   r   public_bytes   s    z#EllipticCurvePublicKey.public_bytesr.   None)	signaturer:   r;   r#   c                 C  s   dS )z5
        Verifies the signature of the data.
        Nr   )r%   rI   r:   r;   r   r   r   verify   s    zEllipticCurvePublicKey.verify)r9   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:   z'curve must be an EllipticCurve instancer   z%data must not be an empty byte string)         z%Unsupported elliptic curve point typebackend)
r   _check_bytes
isinstancer    	TypeErrorlen
ValueError,cryptography.hazmat.backends.openssl.backendrO   Z load_elliptic_curve_public_bytes)clsr9   r:   rO   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__N)r   r	   r
   r*   r+   r,   r9   r)   rF   rG   rJ   classmethodrW   r]   r   r   r   r   r3   ~   s    	
r3   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   	sect409k1rb   Nr`   r   r   r   r   r      s   r   c                   @  s   e Zd ZdZdZdS )r   	sect283k1rd   Nr`   r   r   r   r   r      s   r   c                   @  s   e Zd ZdZdZdS )r   	sect233k1rf   Nr`   r   r   r   r   r      s   r   c                   @  s   e Zd ZdZdZdS )r   	sect163k1rh   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   	secp256k1rr   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brainpoolP256r1rr   Nr`   r   r   r   r   rx     s   rx   c                   @  s   e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1rp   Nr`   r   r   r   r   rz     s   rz   c                   @  s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   Nr`   r   r   r   r   r|     s   r|   )Z
prime192v1Z
prime256v1rv   rt   rq   ro   rn   rs   rm   rl   rk   rj   ri   rg   re   rc   ra   r_   ry   r{   r}   z,typing.Dict[str, typing.Type[EllipticCurve]]_CURVE_TYPESc                   @  s,   e Zd ZddddZeddddZdS )	ECDSAr/   )r0   c                 C  s
   || _ d S N
_algorithm)r%   r0   r   r   r   __init__>  s    zECDSA.__init__r"   c                 C  s   | j S r   r   r$   r   r   r   r0   D  s    zECDSA.algorithmN)r   r	   r
   r   r*   r0   r   r   r   r   r   =  s   r   
typing.Any)r9   rO   r#   c                 C  s   ddl m} || S Nr   rN   )rU   rO   Z#generate_elliptic_curve_private_key)r9   rO   osslr   r   r   generate_private_keyK  s    r   r'   )private_valuer9   rO   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   rN   z&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rU   rO   rQ   r'   rR   rT   r    Z!derive_elliptic_curve_private_key)r   r9   rO   r   r   r   r   derive_private_keyS  s    

r   c                   @  s   e Zd ZddddddZdddd	d
dZeddddZeddddZeddddZdddddZ	ddddZ
ddddZdS )rE   r'   r    )xyr9   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   )rQ   r'   rR   r    _y_x_curve)r%   r   r   r9   r   r   r   r   g  s    
z#EllipticCurvePublicNumbers.__init__Nr   r3   rO   r#   c                 C  s   ddl m} || S r   )rU   rO   Z"load_elliptic_curve_public_numbersr%   rO   r   r   r   r   r7   r  s    z%EllipticCurvePublicNumbers.public_keyr"   c                 C  s   | j S r   )r   r$   r   r   r   r9   y  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.yrX   rY   rZ   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   )rQ   rE   NotImplementedr   r   r9   r&   r)   r\   r   r   r   r]     s    

z!EllipticCurvePublicNumbers.__eq__c                 C  s   t | j| j| jj| jjfS r   )hashr   r   r9   r&   r)   r$   r   r   r   __hash__  s    z#EllipticCurvePublicNumbers.__hash__r!   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   r7   r*   r9   r   r   r]   r   r   r   r   r   r   rE   f  s   rE   c                   @  sp   e Zd ZdddddZdddd	d
dZeddddZeddddZdddddZddddZ	dS )r=   r'   rE   )r   rF   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.)rQ   r'   rR   rE   _private_value_public_numbers)r%   r   rF   r   r   r   r     s    

z$EllipticCurvePrivateNumbers.__init__Nr   r1   r   c                 C  s   ddl m} || S r   )rU   rO   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   rF     s    z*EllipticCurvePrivateNumbers.public_numbersrX   rY   rZ   c                 C  s&   t |tstS | j|jko$| j|jkS r   )rQ   r=   r   r   rF   r\   r   r   r   r]     s
    

z"EllipticCurvePrivateNumbers.__eq__c                 C  s   t | j| jfS r   )r   r   rF   r$   r   r   r   r     s    z$EllipticCurvePrivateNumbers.__hash__)N)
r   r	   r
   r   r   r*   r   rF   r]   r   r   r   r   r   r=     s    		r=   c                   @  s   e Zd ZdS )r2   N)r   r	   r
   r   r   r   r   r2     s   r2   r   ztyping.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)N)5
__future__r   r+   typingZcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricZ
asym_utilsr   ABCMetar    r.   r1   Z(EllipticCurvePrivateKeyWithSerializationr3   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   rz   r|   r~   __annotations__r   r   r   rE   r=   r2   r   r   r   r   r   r   r   r   r   <module>   s    :D  4.                   