U
    [e9                  &   @   s8  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 d dl	m
Z
mZ d dlmZmZmZ G dd de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 d0d1 d1eZ(G d2d3 d3eZ)G d4d5 d5eZ*G d6d7 d7eZ+e(e%e(e'e%e$e#e&e"e!e eeeeeeee)e*e+d8Z,ej-e.ej/e f e0d9< G d:d; d;eZ1dKeed<d=d>Z2dLe3eed?d@dAZ4G dBdC dCeZ5G dDdE dEeZ6G dFdG dGeZ7ej(e(ej'e'ej&e&ej%e%ej$e$ej#e#ej8e)ej9e*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ejeiZ;eej/e dHdIdJZ<dS )M    N)utils)ObjectIdentifier)_get_backend)_serializationhashes)AsymmetricSignatureContextAsymmetricVerificationContextr   c                   @   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/var/www/html/services/stratfitenv/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_size2   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!   	algorithm:   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r
   r   r   r*   r+   typingUnion
asym_utilsZ	Prehashedr   ZHashAlgorithmr0   r    r    r    r!   r/   9   s   r/   c                   @   s   e Zd Zejeedd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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)signature_algorithmr$   c                 C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr    )r&   r5   r    r    r!   signerD   s    zEllipticCurvePrivateKey.signerECDHEllipticCurvePublicKey)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   r9   r    r    r!   exchangeM   s    z EllipticCurvePrivateKey.exchanger#   c                 C   s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr    r%   r    r    r!   
public_keyV   s    z"EllipticCurvePrivateKey.public_keyc                 C   s   dS z8
        The EllipticCurve that this key is on.
        Nr    r%   r    r    r!   curve\   s    zEllipticCurvePrivateKey.curvec                 C   s   dS r(   r    r%   r    r    r!   r)   b   s    z EllipticCurvePrivateKey.key_sizec                 C   s   dS )z 
        Signs the data
        Nr    )r&   datar5   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)encodingformatencryption_algorithmr$   c                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr    )r&   rB   rC   rD   r    r    r!   private_bytesx   s    z%EllipticCurvePrivateKey.private_bytesN)r
   r   r   r*   abstractmethodr/   r   r6   bytesr:   r;   r+   r"   r=   r-   r)   r?   rA   r   EncodingZPrivateFormatZKeySerializationEncryptionrF   r    r    r    r!   r4   C   s6    	r4   c                   @   s   e Zd Zejeeedd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 )r8   )	signaturer5   r$   c                 C   s   dS )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr    )r&   rJ   r5   r    r    r!   verifier   s    zEllipticCurvePublicKey.verifierr#   c                 C   s   dS r<   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)rB   rC   r$   c                 C   s   dS rE   r    )r&   rB   rC   r    r    r!   public_bytes   s    z#EllipticCurvePublicKey.public_bytesN)rJ   r>   r5   r$   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr    )r&   rJ   r>   r5   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
ValueErrorZ,cryptography.hazmat.backends.openssl.backendrV   Z load_elliptic_curve_public_bytes)clsr=   r>   rV   r    r    r!   from_encoded_point   s    
z)EllipticCurvePublicKey.from_encoded_point)r
   r   r   r*   rG   rH   r/   r   rK   r+   r"   r=   r-   r)   rM   r   rI   ZPublicFormatrN   rO   classmethodr]   r    r    r    r!   r8      s6   		
 r8   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}   _CURVE_TYPESc                   @   s   e Zd Zdd ZedZdS )ECDSAc                 C   s
   || _ d S N)
_algorithm)r&   r0   r    r    r!   __init__I  s    zECDSA.__init__r   N)r
   r   r   r   r   read_only_propertyr0   r    r    r    r!   r   H  s   r   )r=   r$   c                 C   s   t |}|| S r   )r   Z#generate_elliptic_curve_private_key)r=   rV   r    r    r!   generate_private_keyO  s    r   )private_valuer=   r$   c                 C   sH   t |}t| tstd| dkr*tdt|ts<td|| |S )Nz&private_value must be an integer type.r   z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)r   rX   r-   rY   r[   r"   Z!derive_elliptic_curve_private_key)r   r=   rV   r    r    r!   derive_private_keyV  s    

r   c                   @   s   e Zd ZeeedddZdedddZeddd	Z	e
eed d
ddZedZedZedZdd Zdd Zdd Zdd ZdS )rL   )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   )rX   r-   rY   r"   _y_x_curve)r&   r   r   r=   r    r    r!   r   g  s    
z#EllipticCurvePublicNumbers.__init__Nr#   c                 C   s   t |}|| S r   )r   Z"load_elliptic_curve_public_numbersr&   rV   r    r    r!   r;   r  s    z%EllipticCurvePublicNumbers.public_keyc                 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.rR   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r=   r)   Zint_to_bytesr   r   )r&   byte_lengthr    r    r!   encode_pointv  s    	z'EllipticCurvePublicNumbers.encode_pointrP   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 )NrQ   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrR   r   r   r   r      bigz(Invalid elliptic curve point data lengthrU   )rX   r"   rY   r   r   r   r   
startswithr)   rZ   r-   
from_bytesr[   )r\   r=   r>   r   r   r   r    r    r!   r]     s    


z-EllipticCurvePublicNumbers.from_encoded_pointr   r   r   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   )rX   rL   NotImplementedr   r   r=   r'   r)   r&   otherr    r    r!   __eq__  s    

z!EllipticCurvePublicNumbers.__eq__c                 C   s
   | |k S r   r    r   r    r    r!   __ne__  s    z!EllipticCurvePublicNumbers.__ne__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}>)rC   r%   r    r    r!   __repr__  s    z#EllipticCurvePublicNumbers.__repr__)N)r
   r   r   r-   r"   r   r8   r;   rH   r   r^   r]   r   r   r=   r   r   r   r   r   r   r    r    r    r!   rL   f  s    


rL   c                   @   sX   e Zd ZeedddZdedddZe	dZ
e	d	Zd
d Zdd Zdd ZdS )r@   )r   rM   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.)rX   r-   rY   rL   _private_value_public_numbers)r&   r   rM   r    r    r!   r     s    

z$EllipticCurvePrivateNumbers.__init__Nr#   c                 C   s   t |}|| S r   )r   Z#load_elliptic_curve_private_numbersr   r    r    r!   private_key  s    z'EllipticCurvePrivateNumbers.private_keyr   r   c                 C   s&   t |tstS | j|jko$| j|jkS r   )rX   r@   r   r   rM   r   r    r    r!   r     s
    

z"EllipticCurvePrivateNumbers.__eq__c                 C   s
   | |k S r   r    r   r    r    r!   r     s    z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfS r   )r   r   rM   r%   r    r    r!   r     s    z$EllipticCurvePrivateNumbers.__hash__)N)r
   r   r   r-   rL   r   r4   r   r   r   r   rM   r   r   r   r    r    r    r!   r@     s    

	r@   c                   @   s   e Zd ZdS )r7   N)r
   r   r   r    r    r    r!   r7     s   r7   )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)=r*   r1   r   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r   r3   objectr	   ABCMetar"   r/   r4   Z(EllipticCurvePrivateKeyWithSerializationr8   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   rx   rz   r|   r~   Dictr,   Type__annotations__r   r   r-   r   rL   r@   r7   r   r   r   r   r   r    r    r    r!   <module>   s    
AF   X'                   