a
     `6                  &   @   s  d dl mZmZmZ 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 G dd deZeejG dd	 d	eZeejG d
d deZeejG dd deZeejG dd deZeejG dd deZeZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG dd deZeeG d d! d!eZeeG d"d# d#eZ eeG d$d% d%eZ!eeG d&d' d'eZ"eeG d(d) d)eZ#eeG d*d+ d+eZ$eeG d,d- d-eZ%eeG d.d/ d/eZ&eeG d0d1 d1eZ'eeG d2d3 d3eZ(eeG d4d5 d5eZ)eeG d6d7 d7eZ*e'e$e'e&e$e#e"e%e!e eeeeeeeee(e)e*d8Z+eeG d9d: d:eZ,dGd;d<Z-dHd=d>Z.G d?d@ d@eZ/G dAdB dBeZ0G dCdD dDeZ1ej'e'ej&e&ej%e%ej$e$ej#e#ej"e"ej2e(ej3e)ej4e*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Z5dEdF Z6dS )I    )absolute_importdivisionprint_functionN)utils)ObjectIdentifier)_get_backendc                   @   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                   @   s(   e Zd Zejdd Zejdd ZdS )EllipticCurvec                 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   abcabstractpropertyr$   r&   r   r   r   r    r!   '   s   
r!   c                   @   s   e Zd Zejdd ZdS )EllipticCurveSignatureAlgorithmc                 C   s   dS )z@
        The digest algorithm used with this signature.
        Nr   r"   r   r   r    	algorithm8   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r	   r
   r   r'   r(   r*   r   r   r   r    r)   6   s   r)   c                   @   s`   e Zd Zejdd Zejdd Zejdd Zejdd Z	ejd	d
 Z
ejdd ZdS )EllipticCurvePrivateKeyc                 C   s   dS )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r#   signature_algorithmr   r   r    signerA   s    zEllipticCurvePrivateKey.signerc                 C   s   dS )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr   )r#   r*   Zpeer_public_keyr   r   r    exchangeG   s    z EllipticCurvePrivateKey.exchangec                 C   s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r"   r   r   r    
public_keyN   s    z"EllipticCurvePrivateKey.public_keyc                 C   s   dS z8
        The EllipticCurve that this key is on.
        Nr   r"   r   r   r    curveT   s    zEllipticCurvePrivateKey.curvec                 C   s   dS r%   r   r"   r   r   r    r&   Z   s    z EllipticCurvePrivateKey.key_sizec                 C   s   dS )z 
        Signs the data
        Nr   )r#   datar,   r   r   r    sign`   s    zEllipticCurvePrivateKey.signN)r	   r
   r   r'   abstractmethodr-   r.   r/   r(   r1   r&   r3   r   r   r   r    r+   ?   s   




r+   c                   @   s(   e Zd Zejdd Zejdd ZdS )(EllipticCurvePrivateKeyWithSerializationc                 C   s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r"   r   r   r    private_numbersi   s    z8EllipticCurvePrivateKeyWithSerialization.private_numbersc                 C   s   dS z6
        Returns the key serialized as bytes.
        Nr   )r#   encodingformatZencryption_algorithmr   r   r    private_byteso   s    z6EllipticCurvePrivateKeyWithSerialization.private_bytesN)r	   r
   r   r'   r4   r6   r:   r   r   r   r    r5   g   s   
r5   c                   @   sl   e Zd Zejdd Zejdd Zejdd Zejdd Z	ejd	d
 Z
ejdd Zedd ZdS )EllipticCurvePublicKeyc                 C   s   dS )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r#   	signaturer,   r   r   r    verifierx   s    zEllipticCurvePublicKey.verifierc                 C   s   dS r0   r   r"   r   r   r    r1   ~   s    zEllipticCurvePublicKey.curvec                 C   s   dS r%   r   r"   r   r   r    r&      s    zEllipticCurvePublicKey.key_sizec                 C   s   dS )z8
        Returns an EllipticCurvePublicNumbers.
        Nr   r"   r   r   r    public_numbers   s    z%EllipticCurvePublicKey.public_numbersc                 C   s   dS r7   r   )r#   r8   r9   r   r   r    public_bytes   s    z#EllipticCurvePublicKey.public_bytesc                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r#   r<   r2   r,   r   r   r    verify   s    zEllipticCurvePublicKey.verifyc                 C   sb   t d| t|tstdt|dkr2tdt|ddvrJtdddl	m
} |||S )Nr2   '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sixZ
indexbytesZ,cryptography.hazmat.backends.openssl.backendrF   Z load_elliptic_curve_public_bytes)clsr1   r2   rF   r   r   r    from_encoded_point   s    
z)EllipticCurvePublicKey.from_encoded_pointN)r	   r
   r   r'   r4   r=   r(   r1   r&   r>   r?   r@   classmethodrN   r   r   r   r    r;   v   s   





r;   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  NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect283r1  NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect233r1   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect163r2   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect571k1i;  NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect409k1rS   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect283k1rU   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect233k1rW   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	sect163k1rY   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp521r1i	  NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp384r1  NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp256r1   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp256k1rc   NrQ   r   r   r   r    r      s   r   c                   @   s   e Zd ZdZdZdS )r   	secp224r1   NrQ   r   r   r   r    r     s   r   c                   @   s   e Zd ZdZdZdS )r   	secp192r1   NrQ   r   r   r   r    r     s   r   c                   @   s   e Zd ZdZdZdS )BrainpoolP256R1brainpoolP256r1rc   NrQ   r   r   r   r    ri     s   ri   c                   @   s   e Zd ZdZdZdS )BrainpoolP384R1brainpoolP384r1ra   NrQ   r   r   r   r    rk     s   rk   c                   @   s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   NrQ   r   r   r   r    rm     s   rm   )Z
prime192v1Z
prime256v1rg   re   rb   r`   r_   rd   r^   r]   r\   r[   rZ   rX   rV   rT   rR   rP   rj   rl   rn   c                   @   s   e Zd Zdd ZedZdS )ECDSAc                 C   s
   || _ d S N)
_algorithm)r#   r*   r   r   r    __init__>  s    zECDSA.__init__rq   N)r	   r
   r   rr   r   read_only_propertyr*   r   r   r   r    ro   <  s   ro   c                 C   s   t |}|| S rp   )r   Z#generate_elliptic_curve_private_key)r1   rF   r   r   r    generate_private_keyD  s    rt   c                 C   sJ   t |}t| tj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   rH   rL   integer_typesrI   rK   r!   Z!derive_elliptic_curve_private_key)private_valuer1   rF   r   r   r    derive_private_keyI  s    
rx   c                   @   sp   e Zd Zdd ZdddZdd Ze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 )EllipticCurvePublicNumbersc                 C   sH   t |tjrt |tjs tdt |ts2td|| _|| _|| _d S )Nzx and y must be integers.ru   )rH   rL   rv   rI   r!   _y_x_curve)r#   xyr1   r   r   r    rr   X  s    
z#EllipticCurvePublicNumbers.__init__Nc                 C   s   t |}|| S rp   )r   Z"load_elliptic_curve_public_numbersr#   rF   r   r   r    r/   e  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.rB   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r1   r&   Zint_to_bytesr}   r~   )r#   byte_lengthr   r   r    encode_pointi  s    	z'EllipticCurvePublicNumbers.encode_pointc                 C   s   t |tstdtjdtjdd |dr|jd d }t	|d| d krt
|d|d  d	}t
||d d  d	}| |||S td
ntdd S )NrA   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrB   r   r   r   r      Zbigz(Invalid elliptic curve point data lengthrE   )rH   r!   rI   r   r   r   r   
startswithr&   rJ   Zint_from_bytesrK   )rM   r1   r2   r   r}   r~   r   r   r    rN   z  s    


z-EllipticCurvePublicNumbers.from_encoded_pointr|   r{   rz   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 rp   )rH   ry   NotImplementedr}   r~   r1   r$   r&   r#   otherr   r   r    __eq__  s    

z!EllipticCurvePublicNumbers.__eq__c                 C   s
   | |k S rp   r   r   r   r   r    __ne__  s    z!EllipticCurvePublicNumbers.__ne__c                 C   s   t | j| j| jj| jjfS rp   )hashr}   r~   r1   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}>)r9   r"   r   r   r    __repr__  s    z#EllipticCurvePublicNumbers.__repr__)N)r	   r
   r   rr   r/   r   rO   rN   r   rs   r1   r}   r~   r   r   r   r   r   r   r   r    ry   W  s   




ry   c                   @   sJ   e Zd Zdd ZdddZedZedZdd	 Z	d
d Z
dd ZdS )EllipticCurvePrivateNumbersc                 C   s6   t |tj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.)rH   rL   rv   rI   ry   _private_value_public_numbers)r#   rw   r>   r   r   r    rr     s    
z$EllipticCurvePrivateNumbers.__init__Nc                 C   s   t |}|| S rp   )r   Z#load_elliptic_curve_private_numbersr   r   r   r    private_key  s    z'EllipticCurvePrivateNumbers.private_keyr   r   c                 C   s&   t |tstS | j|jko$| j|jkS rp   )rH   r   r   rw   r>   r   r   r   r    r     s
    

z"EllipticCurvePrivateNumbers.__eq__c                 C   s
   | |k S rp   r   r   r   r   r    r     s    z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfS rp   )r   rw   r>   r"   r   r   r    r     s    z$EllipticCurvePrivateNumbers.__hash__)N)r	   r
   r   rr   r   r   rs   rw   r>   r   r   r   r   r   r   r    r     s   


	r   c                   @   s   e Zd ZdS )ECDHN)r	   r
   r   r   r   r   r    r     s   r   c                 C   s*   z
t |  W S  ty$   tdY n0 d S )NzCThe provided object identifier has no matching elliptic curve class)_OID_TO_CURVEKeyErrorLookupError)Zoidr   r   r    get_curve_for_oid  s    
r   )N)N)7Z
__future__r   r   r   r'   r   rL   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.backendsr   objectr   Zadd_metaclassABCMetar!   r)   r+   r5   r;   Z'EllipticCurvePublicKeyWithSerializationZregister_interfacer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ri   rk   rm   Z_CURVE_TYPESro   rt   rx   ry   r   r   r   r   r   r   r   r   r   r   r    <module>   s   


'

7

X%