o
    ˷e8                  	   @   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&i d6e#d7e d8e#d9e"d:e d;ed<ed=e!d>ed?ed@edAedBedCedDedEedFeee$e%e&dGZ'ej(e)ej*e f e+dH< G dIdJ dJeZ,	d\dKedLej-dMefdNdOZ.	d\dPe/dKedLej-dMefdQdRZ0G dSdT dTZ1G dUdV dVZ2G dWdX dXZ3i e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Z7dYedMej*e fdZd[Z8dS )]    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   c/var/www/ideatree/venv/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_size/   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   	algorithm7   r%   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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 )EllipticCurvePrivateKeyr.   ECDHpeer_public_keyEllipticCurvePublicKeyr    c                 C   r!   )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   r%   z EllipticCurvePrivateKey.exchangec                 C   r!   )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r"   r   r   r   
public_keyJ   r%   z"EllipticCurvePrivateKey.public_keyc                 C   r!   z8
        The EllipticCurve that this key is on.
        Nr   r"   r   r   r   curveP   r%   zEllipticCurvePrivateKey.curvec                 C   r!   r&   r   r"   r   r   r   r'   V   r%   z EllipticCurvePrivateKey.key_sizedatasignature_algorithmc                 C   r!   )z 
        Signs the data
        Nr   )r#   r<   r=   r   r   r   sign\   r%   zEllipticCurvePrivateKey.signEllipticCurvePrivateNumbersc                 C   r!   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r"   r   r   r   private_numbersf   r%   z'EllipticCurvePrivateKey.private_numbersencodingformatencryption_algorithmc                 C   r!   z6
        Returns the key serialized as bytes.
        Nr   )r#   rA   rB   rC   r   r   r   private_bytesl   r%   z%EllipticCurvePrivateKey.private_bytesN)r    r7   )r    r?   )r   r   r	   r(   abstractmethodbytesr8   r9   r)   r   r;   r+   r'   r-   r>   r@   r   EncodingPrivateFormatKeySerializationEncryptionrE   r   r   r   r   r4   @   sF    	r4   c                	   @   s   e Z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 )r7   r    c                 C   r!   r:   r   r"   r   r   r   r;   |   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_numbersrA   rB   c                 C   r!   rD   r   )r#   rA   rB   r   r   r   public_bytes   r%   z#EllipticCurvePublicKey.public_bytes	signaturer<   r=   Nc                 C   r!   )z5
        Verifies the signature of the data.
        Nr   )r#   rN   r<   r=   r   r   r   verify   r%   zEllipticCurvePublicKey.verifyr;   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 )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.backendrV    load_elliptic_curve_public_bytes)clsr;   r<   rV   r   r   r   from_encoded_point   s   
z)EllipticCurvePublicKey.from_encoded_point)r    rK   )r   r   r	   r(   r)   r   r;   r+   r'   rF   rL   r   rH   PublicFormatrG   rM   r-   rO   classmethodr_   r   r   r   r   r7   {   sB    	
r7   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   
prime192v1
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 )ECDSAr.   c                 C   s
   || _ d S N
_algorithm)r#   r.   r   r   r   __init__3  s   
zECDSA.__init__r    c                 C      | j S r   r   r"   r   r   r   r.   9  s   zECDSA.algorithmN)r   r   r	   r/   r0   r1   r2   r   r3   r   propertyr.   r   r   r   r   r   2  s    
r   r;   rV   r    c                 C      ddl m} || S Nr   rU   )r\   rV   #generate_elliptic_curve_private_key)r;   rV   osslr   r   r   generate_private_key@  s   
r   private_valuec                 C   sL   ddl m} t| tstd| dkrtdt|ts td|| |S )Nr   rU   z&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)r\   rV   rX   r+   rY   r[   r   !derive_elliptic_curve_private_key)r   r;   rV   r   r   r   r   derive_private_keyH  s   

r   c                   @   s   e Zd ZdededefddZddej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efddZedefddZedefddZdedefddZdefddZdefddZdS )rK   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   \  s   

z#EllipticCurvePublicNumbers.__init__NrV   r    c                 C   r   r   )r\   rV   "load_elliptic_curve_public_numbersr#   rV   r   r   r   r   r9   g  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.rQ   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r;   r'   int_to_bytesr   r   )r#   byte_lengthr   r   r   encode_pointn  s   	z'EllipticCurvePublicNumbers.encode_pointr<   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)NrP   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrQ   r   r   r   r      bigz(Invalid elliptic curve point data lengthrT   )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_pointc                 C   r   r   )r   r"   r   r   r   r;        z EllipticCurvePublicNumbers.curvec                 C   r   r   )r   r"   r   r   r   r     r   zEllipticCurvePublicNumbers.xc                 C   r   r   )r   r"   r   r   r   r     r   zEllipticCurvePublicNumbers.yotherc                 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   )rX   rK   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__r   )r   r   r	   r+   r   r   r/   Anyr7   r9   rG   r   ra   r_   r   r;   r   r   objectboolr   r   r*   r   r   r   r   r   rK   [  s*    rK   c                   @   sz   e Zd ZdedefddZ	ddejdefdd	Z	e
defd
dZe
defddZdedefddZdefddZdS )r?   r   rL   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   rK   _private_value_public_numbers)r#   r   rL   r   r   r   r     s   


z$EllipticCurvePrivateNumbers.__init__NrV   r    c                 C   r   r   )r\   rV   #load_elliptic_curve_private_numbersr   r   r   r   private_key  s   
z'EllipticCurvePrivateNumbers.private_keyc                 C   r   r   )r   r"   r   r   r   r     r   z)EllipticCurvePrivateNumbers.private_valuec                 C   r   r   )r   r"   r   r   r   rL     r   z*EllipticCurvePrivateNumbers.public_numbersr   c                 C   s&   t |tstS | j|jko| j|jkS r   )rX   r?   r   r   rL   r   r   r   r   r     s
   

z"EllipticCurvePrivateNumbers.__eq__c                 C   s   t | j| jfS r   )r   r   rL   r"   r   r   r   r     s   z$EllipticCurvePrivateNumbers.__hash__r   )r   r   r	   r+   rK   r   r/   r   r4   r   r   r   rL   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   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   )9r(   r/   r   cryptographyr   cryptography.hazmat._oidr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr1   r   ABCMetar   r-   r4   (EllipticCurvePrivateKeyWithSerializationr7   '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   rK   r?   r5   r   r   r   r   r   r   r   r   r   <module>   s  

8<	
 

`.	
