o
    eC2                     @  sh  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'i d7e$d8e!d9e$d:e#d;e!d<e d=ed>e"d?ed@edAedBedCedDedEedFedGeee%e&e'dHZ(dIe)dJ< G dKdL dLeZ*	dbdcdQdRZ+	dbdddUdVZ,G dWdX dXZ-G dYdZ dZZ.G d[d\ d\Z/i 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Z3ded`daZ4dS )f    )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   _/var/www/html/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s(    r   c                   @  s4   e Zd Zeejd	ddZeejd
ddZdS )EllipticCurvereturnstrc                 C     dS )z8
        The name of the curve. e.g. secp256r1.
        Nr   selfr   r   r   name'       zEllipticCurve.nameintc                 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!   r(   )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ZdS )EllipticCurveSignatureAlgorithmr!   8typing.Union[asym_utils.Prehashed, hashes.HashAlgorithm]c                 C  r#   )z@
        The digest algorithm used with this signature.
        Nr   r$   r   r   r   	algorithm7   r'   z)EllipticCurveSignatureAlgorithm.algorithmNr!   r2   )r   r	   r
   r-   r.   r/   r3   r   r   r   r   r1   6   s    r1   c                   @  s   e Zd Zejd"ddZejd#d	d
Zeejd$ddZeejd%ddZ	ejd&ddZ
ejd'ddZejd(dd Zd!S ))EllipticCurvePrivateKeyr3   ECDHpeer_public_keyEllipticCurvePublicKeyr!   bytesc                 C  r#   )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr   )r%   r3   r7   r   r   r   exchangeB   r'   z EllipticCurvePrivateKey.exchangec                 C  r#   )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r$   r   r   r   
public_keyK   r'   z"EllipticCurvePrivateKey.public_keyr    c                 C  r#   z8
        The EllipticCurve that this key is on.
        Nr   r$   r   r   r   curveQ   r'   zEllipticCurvePrivateKey.curver(   c                 C  r#   r)   r   r$   r   r   r   r*   X   r'   z EllipticCurvePrivateKey.key_sizedatasignature_algorithmr1   c                 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_numbersi   r'   z'EllipticCurvePrivateKey.private_numbersencoding_serialization.Encodingformat_serialization.PrivateFormatencryption_algorithm)_serialization.KeySerializationEncryptionc                 C  r#   z6
        Returns the key serialized as bytes.
        Nr   )r%   rC   rE   rG   r   r   r   private_byteso   r'   z%EllipticCurvePrivateKey.private_bytesN)r3   r6   r7   r8   r!   r9   )r!   r8   r!   r    r,   )r>   r9   r?   r1   r!   r9   )r!   rA   )rC   rD   rE   rF   rG   rH   r!   r9   )r   r	   r
   r.   r/   r:   r;   r-   r=   r*   r@   rB   rJ   r   r   r   r   r5   A   s"    	r5   c                   @  s   e Zd Zeejd"ddZeejd#ddZejd$d	d
Zejd%ddZ	ejd&ddZ
ed'ddZejd(dd Zd!S ))r8   r!   r    c                 C  r#   r<   r   r$   r   r   r   r=      r'   zEllipticCurvePublicKey.curver(   c                 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_numbersrC   rD   rE   _serialization.PublicFormatr9   c                 C  r#   rI   r   )r%   rC   rE   r   r   r   public_bytes   r'   z#EllipticCurvePublicKey.public_bytes	signaturer>   r?   r1   Nonec                 C  r#   )z5
        Verifies the signature of the data.
        Nr   )r%   rP   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>   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.backendrW    load_elliptic_curve_public_bytes)clsr=   r>   rW   r   r   r   from_encoded_point   s   
z)EllipticCurvePublicKey.from_encoded_pointotherobjectboolc                 C  r#   )z"
        Checks equality.
        Nr   r%   ra   r   r   r   __eq__   r'   zEllipticCurvePublicKey.__eq__NrK   r,   r!   rL   )rC   rD   rE   rN   r!   r9   )rP   r9   r>   r9   r?   r1   r!   rQ   )r=   r    r>   r9   r!   r8   ra   rb   r!   rc   )r   r	   r
   r-   r.   r/   r=   r*   rM   rO   rR   classmethodr`   re   r   r   r   r   r8   ~   s"    	
r8   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                   @  ri   )r   	sect409r1  Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect283r1  Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect233r1   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect163r2   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect571k1i;  Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect409k1rn   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect283k1rp   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect233k1rr   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	sect163k1rt   Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	secp521r1i	  Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	secp384r1  Nrk   r   r   r   r   r      rl   r   c                   @  ri   )r   	secp256r1   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )r   	secp256k1r~   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )r   	secp224r1   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )r   	secp192r1   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )BrainpoolP256R1brainpoolP256r1r~   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )BrainpoolP384R1brainpoolP384r1r|   Nrk   r   r   r   r   r     rl   r   c                   @  ri   )BrainpoolP512R1brainpoolP512r1i   Nrk   r   r   r   r   r     rl   r   
prime192v1
prime256v1r   r   r}   r{   rz   r   ry   rx   rw   rv   ru   rs   rq   ro   rm   )rj   r   r   r   z,typing.Dict[str, typing.Type[EllipticCurve]]_CURVE_TYPESc                   @  s$   e Zd Zd	ddZed
ddZdS )ECDSAr3   r2   c                 C  s
   || _ d S N
_algorithm)r%   r3   r   r   r   __init__>  s   
zECDSA.__init__r!   c                 C     | j S r   r   r$   r   r   r   r3   D  s   zECDSA.algorithmN)r3   r2   r4   )r   r	   r
   r   r-   r3   r   r   r   r   r   =  s    
r   r=   rW   
typing.Anyr!   c                 C     ddl m} || S Nr   rV   )r]   rW   #generate_elliptic_curve_private_key)r=   rW   osslr   r   r   generate_private_keyK  s   
r   private_valuer(   c                 C  sL   ddl m} t| tstd| dkrtdt|ts td|| |S )Nr   rV   z&private_value must be an integer type.z)private_value must be a positive integer./curve must provide the EllipticCurve interface.)r]   rW   rY   r(   rZ   r\   r    !derive_elliptic_curve_private_key)r   r=   rW   r   r   r   r   derive_private_keyS  s   

r   c                   @  sj   e Zd ZdddZd d!ddZed"ddZed#ddZed#ddZd$ddZ	d#ddZ
d%ddZdS )&rL   xr(   yr=   r    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   )rY   r(   rZ   r    _y_x_curve)r%   r   r   r=   r   r   r   r   g  s   

z#EllipticCurvePublicNumbers.__init__NrW   r   r!   r8   c                 C  r   r   )r]   rW   "load_elliptic_curve_public_numbersr%   rW   r   r   r   r   r;   r  s   
z%EllipticCurvePublicNumbers.public_keyc                 C  r   r   )r   r$   r   r   r   r=   y     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.yra   rb   rc   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   )rY   rL   NotImplementedr   r   r=   r&   r*   rd   r   r   r   re     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__r"   c                 C  s
   d | S )NzC<EllipticCurvePublicNumbers(curve={0.curve.name}, x={0.x}, y={0.y}>)rE   r$   r   r   r   __repr__  s   z#EllipticCurvePublicNumbers.__repr__)r   r(   r   r(   r=   r    r   )rW   r   r!   r8   rK   r,   rg   r+   )r   r	   r
   r   r;   r-   r=   r   r   re   r   r   r   r   r   r   rL   f  s    


rL   c                   @  sT   e Zd ZdddZ	ddddZedddZedddZdddZdddZ	dS )rA   r   r(   rM   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.)rY   r(   rZ   rL   _private_value_public_numbers)r%   r   rM   r   r   r   r     s   


z$EllipticCurvePrivateNumbers.__init__NrW   r   r!   r5   c                 C  r   r   )r]   rW   #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   rM     r   z*EllipticCurvePrivateNumbers.public_numbersra   rb   rc   c                 C  s&   t |tstS | j|jko| j|jkS r   )rY   rA   r   r   rM   rd   r   r   r   re     s
   

z"EllipticCurvePrivateNumbers.__eq__c                 C  s   t | j| jfS r   )r   r   rM   r$   r   r   r   r     s   z$EllipticCurvePrivateNumbers.__hash__)r   r(   rM   rL   r   )rW   r   r!   r5   r,   rf   rg   )
r   r	   r
   r   r   r-   r   rM   re   r   r   r   r   r   rA     s    
	
	rA   c                   @  s   e Zd ZdS )r6   N)r   r	   r
   r   r   r   r   r6     s    r6   oidr   typing.Type[EllipticCurve]c                 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=   r    rW   r   r!   r5   )r   r(   r=   r    rW   r   r!   r5   )r   r   r!   r   )5
__future__r   r.   typingcryptographyr   cryptography.hazmat._oidr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetric
asym_utilsr   ABCMetar    r1   r5   (EllipticCurvePrivateKeyWithSerializationr8   'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   __annotations__r   r   r   rL   rA   r6   r   r   r   r   r   r   r   r   r   <module>   s   :D	
4.	
