o
    b:                  	   @   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 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/d0 d0eZ)G d1d2 d2eZ*G d3d4 d4eZ+G d5d6 d6eZ,G d7d8 d8eZ-i d9e*d:e'd;e*d<e)d=e'd>e&d?e%d@e(dAe$dBe#dCe"dDe!dEe dFedGedHedIeee+e,e-dJZ.ej/e0ej1e f e2dK< G dLdM dMeZ3	d_dNedOej4e
 dPefdQdRZ5	d_dSe6dNedOej4e
 dPefdTdUZ7G dVdW dWeZ8G dXdY dYeZ9G dZd[ d[eZ:i 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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>d\edPej1e fd]d^Z?dS )`    N)utils)ObjectIdentifier)_get_backend)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!   k/var/www/secure340b-portal/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr
      s(    r
   c                   @   s4   e Zd ZejdefddZejdefddZdS )EllipticCurvereturnc                 C      dS )z8
        The name of the curve. e.g. secp256r1.
        Nr!   selfr!   r!   r"   name-       zEllipticCurve.namec                 C   r%   z<
        Bit size of a secret scalar for the curve.
        Nr!   r&   r!   r!   r"   key_size3   r)   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dejeje	j
f fddZdS )EllipticCurveSignatureAlgorithmr$   c                 C   r%   )z@
        The digest algorithm used with this signature.
        Nr!   r&   r!   r!   r"   	algorithm;   r)   z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r   r,   r-   typingUnion
asym_utils	Prehashedr   HashAlgorithmr2   r!   r!   r!   r"   r1   :   s
    r1   c                	   @   s   e Zd ZejdedefddZejdddddefd	d
Z	ejdddZ
ejdefddZejdefddZejdededefddZejdddZejdejdejdejdefddZdS )EllipticCurvePrivateKeysignature_algorithmr$   c                 C   r%   )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr!   )r'   r9   r!   r!   r"   signerE   r)   zEllipticCurvePrivateKey.signerr2   ECDHpeer_public_keyEllipticCurvePublicKeyc                 C   r%   )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr!   )r'   r2   r<   r!   r!   r"   exchangeN   r)   z EllipticCurvePrivateKey.exchangec                 C   r%   )zB
        The EllipticCurvePublicKey for this private key.
        Nr!   r&   r!   r!   r"   
public_keyW   r)   z"EllipticCurvePrivateKey.public_keyc                 C   r%   z8
        The EllipticCurve that this key is on.
        Nr!   r&   r!   r!   r"   curve]   r)   zEllipticCurvePrivateKey.curvec                 C   r%   r*   r!   r&   r!   r!   r"   r+   c   r)   z EllipticCurvePrivateKey.key_sizedatac                 C   r%   )z 
        Signs the data
        Nr!   )r'   rB   r9   r!   r!   r"   signi   r)   zEllipticCurvePrivateKey.signEllipticCurvePrivateNumbersc                 C   r%   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr!   r&   r!   r!   r"   private_numberss   r)   z'EllipticCurvePrivateKey.private_numbersencodingformatencryption_algorithmc                 C   r%   z6
        Returns the key serialized as bytes.
        Nr!   )r'   rF   rG   rH   r!   r!   r"   private_bytesy   r)   z%EllipticCurvePrivateKey.private_bytesN)r$   r=   )r$   rD   )r   r   r   r,   abstractmethodr1   r   r:   bytesr>   r?   r-   r#   rA   r/   r+   rC   rE   r   EncodingZPrivateFormatZKeySerializationEncryptionrJ   r!   r!   r!   r"   r8   D   sR    	r8   c                	   @   s   e Zd ZejdededefddZej	de
fddZej	defdd	ZejdddZejdejdejdefddZejdedededdfddZede
dedd fddZdS )r=   	signaturer9   r$   c                 C   r%   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr!   )r'   rN   r9   r!   r!   r"   verifier   r)   zEllipticCurvePublicKey.verifierc                 C   r%   r@   r!   r&   r!   r!   r"   rA      r)   zEllipticCurvePublicKey.curvec                 C   r%   r*   r!   r&   r!   r!   r"   r+      r)   zEllipticCurvePublicKey.key_sizeEllipticCurvePublicNumbersc                 C   r%   )z8
        Returns an EllipticCurvePublicNumbers.
        Nr!   r&   r!   r!   r"   public_numbers   r)   z%EllipticCurvePublicKey.public_numbersrF   rG   c                 C   r%   rI   r!   )r'   rF   rG   r!   r!   r"   public_bytes   r)   z#EllipticCurvePublicKey.public_bytesrB   Nc                 C   r%   )z5
        Verifies the signature of the data.
        Nr!   )r'   rN   rB   r9   r!   r!   r"   verify   r)   zEllipticCurvePublicKey.verifyrA   c                 C   s^   t d| t|tstdt|dkrtd|d dvr#tdddlm} |	||S )NrB   '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.backendrY   Z load_elliptic_curve_public_bytes)clsrA   rB   rY   r!   r!   r"   from_encoded_point   s   
z)EllipticCurvePublicKey.from_encoded_point)r$   rP   )r   r   r   r,   rK   rL   r1   r	   rO   r-   r#   rA   r/   r+   rQ   r   rM   ZPublicFormatrR   rS   classmethodr`   r!   r!   r!   r"   r=      sR    		
r=   c                   @      e Zd ZdZdZdS )r    	sect571r1i:  Nr   r   r   r(   r+   r!   r!   r!   r"   r           r    c                   @   rb   )r   	sect409r1  Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect283r1  Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect233r1   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect163r2   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect571k1i;  Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect409k1rg   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect283k1ri   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect233k1rk   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	sect163k1rm   Nrd   r!   r!   r!   r"   r      re   r   c                   @   rb   )r   	secp521r1i	  Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )r   	secp384r1  Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )r   	secp256r1   Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )r   	secp256k1rw   Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )r   	secp224r1   Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )r   	secp192r1   Nrd   r!   r!   r!   r"   r     re   r   c                   @   rb   )BrainpoolP256R1brainpoolP256r1rw   Nrd   r!   r!   r!   r"   r}   !  re   r}   c                   @   rb   )BrainpoolP384R1brainpoolP384r1ru   Nrd   r!   r!   r!   r"   r   &  re   r   c                   @   rb   )BrainpoolP512R1brainpoolP512r1i   Nrd   r!   r!   r!   r"   r   +  re   r   Z
prime192v1Z
prime256v1r{   ry   rv   rt   rs   rx   rr   rq   rp   ro   rn   rl   rj   rh   rf   )rc   r~   r   r   _CURVE_TYPESc                   @   sH   e Zd Zdejejejf fddZ	e
dejejejf fddZdS )ECDSAr2   c                 C   s
   || _ d S N
_algorithm)r'   r2   r!   r!   r"   __init__J  s   
zECDSA.__init__r$   c                 C      | j S r   r   r&   r!   r!   r"   r2   P  s   zECDSA.algorithmN)r   r   r   r3   r4   r5   r6   r   r7   r   propertyr2   r!   r!   r!   r"   r   I  s    
r   rA   rY   r$   c                 C      t |}|| S r   )r   Z#generate_elliptic_curve_private_key)rA   rY   r!   r!   r"   generate_private_keyW     
r   private_valuec                 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   r[   r/   r\   r^   r#   Z!derive_elliptic_curve_private_key)r   rA   rY   r!   r!   r"   derive_private_key^  s   

r   c                   @   s   e Zd ZdededefddZ	ddeje de	fd	d
Z
defddZedededd fddZedd Zedd Zedd Zdd Zdd Zdd Zdd ZdS )rP   xyrA   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   )r[   r/   r\   r#   _y_x_curve)r'   r   r   rA   r!   r!   r"   r   q  s   

z#EllipticCurvePublicNumbers.__init__NrY   r$   c                 C   r   r   )r   Z"load_elliptic_curve_public_numbersr'   rY   r!   r!   r"   r?   |  r   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.rU   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019rA   r+   Zint_to_bytesr   r   )r'   byte_lengthr!   r!   r"   encode_point  s   	z'EllipticCurvePublicNumbers.encode_pointrB   c                 C   s   t |ts	tdtjdtjdd |drJ|jd d }t	|d| d krFt
|d|d  d	}t
||d d  d	}| |||S td
td)NrT   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrU   r   r   r   r      bigz(Invalid elliptic curve point data lengthrX   )r[   r#   r\   r   r   r   r   
startswithr+   r]   r/   
from_bytesr^   )r_   rA   rB   r   r   r   r!   r!   r"   r`     s   

z-EllipticCurvePublicNumbers.from_encoded_pointc                 C   r   r   )r   r&   r!   r!   r"   <lambda>      z#EllipticCurvePublicNumbers.<lambda>c                 C   r   r   )r   r&   r!   r!   r"   r     r   c                 C   r   r   )r   r&   r!   r!   r"   r     r   c                 C   sF   t |tstS | j|jko"| j|jko"| jj|jjko"| jj|jjkS r   )r[   rP   NotImplementedr   r   rA   r(   r+   r'   otherr!   r!   r"   __eq__  s   

z!EllipticCurvePublicNumbers.__eq__c                 C   
   | |k S r   r!   r   r!   r!   r"   __ne__     
z!EllipticCurvePublicNumbers.__ne__c                 C   s   t | j| j| jj| jjfS r   )hashr   r   rA   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}>)rG   r&   r!   r!   r"   __repr__  s   z#EllipticCurvePublicNumbers.__repr__r   )r   r   r   r/   r#   r   r3   Optionalr   r=   r?   rL   r   ra   r`   r   rA   r   r   r   r   r   r   r!   r!   r!   r"   rP   p  s0    
rP   c                   @   sj   e Zd ZdedefddZ	ddeje de	fdd	Z
ed
d Zedd Zdd Zdd Zdd ZdS )rD   r   rQ   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.)r[   r/   r\   rP   _private_value_public_numbers)r'   r   rQ   r!   r!   r"   r     s   


z$EllipticCurvePrivateNumbers.__init__NrY   r$   c                 C   r   r   )r   Z#load_elliptic_curve_private_numbersr   r!   r!   r"   private_key  r   z'EllipticCurvePrivateNumbers.private_keyc                 C   r   r   )r   r&   r!   r!   r"   r     r   z$EllipticCurvePrivateNumbers.<lambda>c                 C   r   r   )r   r&   r!   r!   r"   r     r   c                 C   s&   t |tstS | j|jko| j|jkS r   )r[   rD   r   r   rQ   r   r!   r!   r"   r     s
   

z"EllipticCurvePrivateNumbers.__eq__c                 C   r   r   r!   r   r!   r!   r"   r     r   z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfS r   )r   r   rQ   r&   r!   r!   r"   r     s   z$EllipticCurvePrivateNumbers.__hash__r   )r   r   r   r/   rP   r   r3   r   r   r8   r   r   r   rQ   r   r   r   r!   r!   r!   r"   rD     s"    

	rD   c                   @   s   e Zd ZdS )r;   N)r   r   r   r!   r!   r!   r"   r;     s    r;   oidc                 C   s"   zt |  W S  ty   tdw )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   r   )@r,   r3   r   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.backendsr   Z'cryptography.hazmat.backends.interfacesr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   r	   r5   objectr
   ABCMetar#   r1   r8   Z(EllipticCurvePrivateKeyWithSerializationr=   Z'EllipticCurvePublicKeyWithSerializationr    r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r}   r   r   r   Dictr.   Type__annotations__r   r   r   r/   r   rP   rD   r;   r   r   r   r   r   r!   r!   r!   r"   <module>   s  

AF	
 


Z)	
