U
    EZh1                  &   @   s  U 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?Z/G d@dA dAZ0G dBdC dCZ1G dDdE dEZ2ej"e"ej!e!ej e ejeejeejeej3e#ej4e$ej5e%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Z6eej)e dFdGdHZ7d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   s/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s&   r   c                   @   s<   e Zd ZeejedddZe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	   propertyabcabstractmethodstrr$   intr&   r   r   r   r   r   %   s   r   )	metaclassc                   @   s2   e Zd Ze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   	algorithm6   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r	   r'   r(   r)   typingUnion
asym_utils	Prehashedr   HashAlgorithmr.   r   r   r   r   r-   5   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eje	dd	d
Z
e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.   r7   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&   W   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_numbersh   s    z'EllipticCurvePrivateKey.private_numbers)encodingformatencryption_algorithmr!   c                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr   )r#   rA   rB   rC   r   r   r   private_bytesn   s    z%EllipticCurvePrivateKey.private_bytesN)r   r   r	   r(   r)   bytesr8   r9   r'   r   r;   r+   r&   r-   r>   r@   r   EncodingZPrivateFormatZKeySerializationEncryptionrE   r   r   r   r   r4   @   s4    	r4   c                   @   s   e Zd ZeejedddZe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 )r6   r    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)rA   rB   r!   c                 C   s   dS rD   r   )r#   rA   rB   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<   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.backendrQ   Z load_elliptic_curve_public_bytes)clsr;   r<   rQ   r   r   r   from_encoded_point   s    
z)EllipticCurvePublicKey.from_encoded_point)r   r   r	   r'   r(   r)   r   r;   r+   r&   rI   r   rG   ZPublicFormatrF   rJ   r-   rL   classmethodrY   r   r   r   r   r6   }   s0   	
 r6   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   	sect409k1r^   Nr\   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect283k1r`   Nr\   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect233k1rb   Nr\   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect163k1rd   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   	secp256k1rn   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brainpoolP256r1rn   Nr\   r   r   r   r   rt     s   rt   c                   @   s   e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1rl   Nr\   r   r   r   r   rv     s   rv   c                   @   s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   Nr\   r   r   r   r   rx     s   rx   )Z
prime192v1Z
prime256v1rr   rp   rm   rk   rj   ro   ri   rh   rg   rf   re   rc   ra   r_   r]   r[   ru   rw   ry   _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__7  s    zECDSA.__init__r    c                 C   s   | j S r|   r}   r"   r   r   r   r.   =  s    zECDSA.algorithmN)r   r   r	   r/   r0   r1   r2   r   r3   r   r'   r.   r   r   r   r   r{   6  s
   r{   )r;   rQ   r!   c                 C   s   ddl m} || S Nr   rP   )rW   rQ   Z#generate_elliptic_curve_private_key)r;   rQ   osslr   r   r   generate_private_keyD  s    r   )private_valuer;   rQ   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   rP   z&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)rW   rQ   rS   r+   rT   rV   r   Z!derive_elliptic_curve_private_key)r   r;   rQ   r   r   r   r   derive_private_keyL  s    

r   c                   @   s   e Zd Ze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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   )rS   r+   rT   r   _y_x_curve)r#   r   r   r;   r   r   r   r   `  s    
z#EllipticCurvePublicNumbers.__init__NrQ   r!   c                 C   s   ddl m} || S r   )rW   rQ   Z"load_elliptic_curve_public_numbersr#   rQ   r   r   r   r   r9   k  s    z%EllipticCurvePublicNumbers.public_keyr    c                 C   s   | j S r|   )r   r"   r   r   r   r;   r  s    z EllipticCurvePublicNumbers.curvec                 C   s   | j S r|   )r   r"   r   r   r   r   v  s    zEllipticCurvePublicNumbers.xc                 C   s   | j S r|   )r   r"   r   r   r   r   z  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|   )rS   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}>)rB   r"   r   r   r   __repr__  s    z#EllipticCurvePublicNumbers.__repr__)N)r   r   r	   r+   r   r   r/   Anyr6   r9   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.)rS   r+   rT   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   )rW   rQ   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|   )rS   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   r4   r   r'   r   rI   r   r   r   r   r   r   r   r   r?     s     		r?   c                   @   s   e Zd ZdS )r5   N)r   r   r	   r   r   r   r   r5     s   r5   )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)8r(   r/   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr1   r   ABCMetar   r-   r4   Z(EllipticCurvePrivateKeyWithSerializationr6   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   rt   rv   rx   rz   Dictr*   Type__annotations__r{   r   r   r+   r   rH   r?   r5   r   r   r   r   r   r   r   r   r   <module>   s    :>   4.                   