o
    )%a9                     @   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
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+i d8e(d9e%d:e(d;e'd<e%d=e$d>e#d?e&d@e"dAe!dBe dCedDedEedFedGedHeee)e*e+dIZ,ej-e.ej/e f e0dJ< G dKdL dLeZ1	d]dMedNefdOdPZ2	d]dQe3dMedNefdRdSZ4G dTdU dUeZ5G dVdW dWeZ6G dXdY dYeZ7i e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;dZedNej/e fd[d\Z<dS )^    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/usr/lib/python3/dist-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_size2   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   HashAlgorithmr1   r    r    r    r!   r0   9   s
    r0   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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&   r8   r    r    r!   signerD   r(   zEllipticCurvePrivateKey.signerr1   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&   r1   r;   r    r    r!   exchangeM   r(   z EllipticCurvePrivateKey.exchangec                 C   r$   )zB
        The EllipticCurvePublicKey for this private key.
        Nr    r%   r    r    r!   
public_keyV   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*   b   r(   z EllipticCurvePrivateKey.key_sizec                 C   r$   )z 
        Signs the data
        Nr    )r&   datar8   r    r    r!   signh   r(   zEllipticCurvePrivateKey.signEllipticCurvePrivateNumbersc                 C   r$   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr    r%   r    r    r!   private_numbersr   r(   z'EllipticCurvePrivateKey.private_numbersencodingformatencryption_algorithmc                 C   r$   z6
        Returns the key serialized as bytes.
        Nr    )r&   rE   rF   rG   r    r    r!   private_bytesx   r(   z%EllipticCurvePrivateKey.private_bytesN)r#   r<   )r#   rC   )r
   r   r   r+   abstractmethodr0   r   r9   bytesr=   r>   r,   r"   r@   r.   r*   rB   rD   r   EncodingPrivateFormatKeySerializationEncryptionrI   r    r    r    r!   r7   C   sN    	r7   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<   	signaturer8   r#   c                 C   r$   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr    )r&   rO   r8   r    r    r!   verifier   r(   zEllipticCurvePublicKey.verifierc                 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_numbersrE   rF   c                 C   r$   rH   r    )r&   rE   rF   r    r    r!   public_bytes   r(   z#EllipticCurvePublicKey.public_bytesrA   Nc                 C   r$   )z5
        Verifies the signature of the data.
        Nr    )r&   rO   rA   r8   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 )NrA   '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.backendrZ    load_elliptic_curve_public_bytes)clsr@   rA   rZ   r    r    r!   from_encoded_point   s   
z)EllipticCurvePublicKey.from_encoded_point)r#   rQ   )r
   r   r   r+   rJ   rK   r0   r   rP   r,   r"   r@   r.   r*   rR   r   rL   PublicFormatrS   rT   classmethodrc   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                   @   rf   )r   	sect409r1  Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect283r1  Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect233r1   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect163r2   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect571k1i;  Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect409k1rk   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect283k1rm   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect233k1ro   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	sect163k1rq   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )r   	secp521r1i	  Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   	secp384r1  Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   	secp256r1   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   	secp256k1r{   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   	secp224r1   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   	secp192r1   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )BrainpoolP256R1brainpoolP256r1r{   Nrh   r    r    r    r!   r      ri   r   c                   @   rf   )BrainpoolP384R1brainpoolP384r1ry   Nrh   r    r    r    r!   r   %  ri   r   c                   @   rf   )BrainpoolP512R1brainpoolP512r1i   Nrh   r    r    r    r!   r   *  ri   r   
prime192v1
prime256v1r   r}   rz   rx   rw   r|   rv   ru   rt   rs   rr   rp   rn   rl   rj   )rg   r   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&   r1   r    r    r!   __init__I     
zECDSA.__init__r   N)r
   r   r   r   r   read_only_propertyr1   r    r    r    r!   r   H  s    r   r@   r#   c                 C      t |}|| S r   )r   #generate_elliptic_curve_private_key)r@   rZ   r    r    r!   generate_private_keyO  s   
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"   !derive_elliptic_curve_private_key)r   r@   rZ   r    r    r!   derive_private_keyV  s   

r   c                   @   s   e Zd ZdededefddZd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ZedZedZdd Zdd Zdd Zdd ZdS )rQ   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   )r\   r.   r]   r"   _y_x_curve)r&   r   r   r@   r    r    r!   r   g  s   

z#EllipticCurvePublicNumbers.__init__Nr#   c                 C   r   r   )r   "load_elliptic_curve_public_numbersr&   rZ   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.rV   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r@   r*   int_to_bytesr   r   )r&   byte_lengthr    r    r!   encode_pointv  s   	z'EllipticCurvePublicNumbers.encode_pointrA   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)NrU   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrV   r   r   r   r      bigz(Invalid elliptic curve point data lengthrY   )r\   r"   r]   r   r   r   r   
startswithr*   r^   r.   
from_bytesr_   )rb   r@   rA   r   r   r   r    r    r!   rc     s   

z-EllipticCurvePublicNumbers.from_encoded_pointr   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\   rQ   NotImplementedr   r   r@   r'   r*   r&   otherr    r    r!   __eq__  s   

z!EllipticCurvePublicNumbers.__eq__c                 C   
   | |k S r   r    r   r    r    r!   __ne__  r   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}>)rF   r%   r    r    r!   __repr__  s   z#EllipticCurvePublicNumbers.__repr__r   )r
   r   r   r.   r"   r   r<   r>   rK   r   re   rc   r   r   r@   r   r   r   r   r   r   r    r    r    r!   rQ   f  s&    


rQ   c                   @   sZ   e Zd ZdedefddZddefddZe	d	Z
e	d
Zdd Zdd Zdd ZdS )rC   r   rR   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]   rQ   _private_value_public_numbers)r&   r   rR   r    r    r!   r     s   


z$EllipticCurvePrivateNumbers.__init__Nr#   c                 C   r   r   )r   #load_elliptic_curve_private_numbersr   r    r    r!   private_key  r   z'EllipticCurvePrivateNumbers.private_keyr   r   c                 C   s&   t |tstS | j|jko| j|jkS r   )r\   rC   r   r   rR   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   rR   r%   r    r    r!   r     s   z$EllipticCurvePrivateNumbers.__hash__r   )r
   r   r   r.   rQ   r   r7   r   r   r   r   rR   r   r   r   r    r    r    r!   rC     s    


	rC   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+   r2   r   cryptographyr   cryptography.hazmat._oidr   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   r   r4   objectr	   ABCMetar"   r0   r7   (EllipticCurvePrivateKeyWithSerializationr<   '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   rQ   rC   r:   r   r   r   r   r   r    r    r    r!   <module>   s  

AF	
 

X'	
