o
     `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*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eG dJdK dKeZ,dXdLdMZ-dXdNdOZ.G dPdQ dQeZ/G dRdS dSeZ0G dTdU dUeZ1i e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Z5dVdW Z6dS )Y    )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   home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s(    r   c                   @   (   e Zd Zejdd Zejdd ZdS )EllipticCurvec                 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abstractpropertyr&   r)   r   r   r   r    r"   '   
    
r"   c                   @   s   e Zd Zejdd ZdS )EllipticCurveSignatureAlgorithmc                 C   r#   )z@
        The digest algorithm used with this signature.
        Nr   r$   r   r   r    	algorithm8   r'   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   r#   )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr   )r%   signature_algorithmr   r   r    signerA   r'   zEllipticCurvePrivateKey.signerc                 C   r#   )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   r'   z EllipticCurvePrivateKey.exchangec                 C   r#   )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r$   r   r   r    
public_keyN   r'   z"EllipticCurvePrivateKey.public_keyc                 C   r#   z8
        The EllipticCurve that this key is on.
        Nr   r$   r   r   r    curveT   r'   zEllipticCurvePrivateKey.curvec                 C   r#   r(   r   r$   r   r   r    r)   Z   r'   z EllipticCurvePrivateKey.key_sizec                 C   r#   )z 
        Signs the data
        Nr   )r%   datar0   r   r   r    sign`   r'   zEllipticCurvePrivateKey.signN)r	   r
   r   r*   abstractmethodr1   r2   r3   r+   r5   r)   r7   r   r   r   r    r/   ?   s    




r/   c                   @   r!   )(EllipticCurvePrivateKeyWithSerializationc                 C   r#   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r$   r   r   r    private_numbersi   r'   z8EllipticCurvePrivateKeyWithSerialization.private_numbersc                 C   r#   z6
        Returns the key serialized as bytes.
        Nr   )r%   encodingformatZencryption_algorithmr   r   r    private_byteso   r'   z6EllipticCurvePrivateKeyWithSerialization.private_bytesN)r	   r
   r   r*   r8   r:   r>   r   r   r   r    r9   g   r,   r9   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   r#   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r%   	signaturer0   r   r   r    verifierx   r'   zEllipticCurvePublicKey.verifierc                 C   r#   r4   r   r$   r   r   r    r5   ~   r'   zEllipticCurvePublicKey.curvec                 C   r#   r(   r   r$   r   r   r    r)      r'   zEllipticCurvePublicKey.key_sizec                 C   r#   )z8
        Returns an EllipticCurvePublicNumbers.
        Nr   r$   r   r   r    public_numbers   r'   z%EllipticCurvePublicKey.public_numbersc                 C   r#   r;   r   )r%   r<   r=   r   r   r    public_bytes   r'   z#EllipticCurvePublicKey.public_bytesc                 C   r#   )z5
        Verifies the signature of the data.
        Nr   )r%   r@   r6   r0   r   r   r    verify   r'   zEllipticCurvePublicKey.verifyc                 C   sb   t d| t|tstdt|dkrtdt|ddvr%tdddl	m
} |||S )Nr6   '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.backendrJ   Z load_elliptic_curve_public_bytes)clsr5   r6   rJ   r   r   r    from_encoded_point   s   
z)EllipticCurvePublicKey.from_encoded_pointN)r	   r
   r   r*   r8   rA   r+   r5   r)   rB   rC   rD   classmethodrR   r   r   r   r    r?   v   s    





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                   @   rT   )r   	sect409r1  NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect283r1  NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect233r1   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect163r2   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect571k1i;  NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect409k1rY   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect283k1r[   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect233k1r]   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	sect163k1r_   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	secp521r1i	  NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	secp384r1  NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	secp256r1   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	secp256k1ri   NrV   r   r   r   r    r      rW   r   c                   @   rT   )r   	secp224r1   NrV   r   r   r   r    r     rW   r   c                   @   rT   )r   	secp192r1   NrV   r   r   r   r    r     rW   r   c                   @   rT   )BrainpoolP256R1brainpoolP256r1ri   NrV   r   r   r   r    ro     rW   ro   c                   @   rT   )BrainpoolP384R1brainpoolP384r1rg   NrV   r   r   r   r    rq     rW   rq   c                   @   rT   )BrainpoolP512R1brainpoolP512r1i   NrV   r   r   r   r    rs     rW   rs   Z
prime192v1Z
prime256v1rm   rk   rh   rf   re   rj   rd   rc   rb   ra   r`   r^   r\   rZ   rX   )rU   rp   rr   rt   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__>     
zECDSA.__init__rw   N)r	   r
   r   rx   r   read_only_propertyr.   r   r   r   r    ru   <  s    ru   c                 C      t |}|| S rv   )r   Z#generate_elliptic_curve_private_key)r5   rJ   r   r   r    generate_private_keyD     
r|   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   rL   rP   integer_typesrM   rO   r"   Z!derive_elliptic_curve_private_key)private_valuer5   rJ   r   r   r    derive_private_keyI  s   
r   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std|| _|| _|| _d S )Nzx and y must be integers.r~   )rL   rP   r   rM   r"   _y_x_curve)r%   xyr5   r   r   r    rx   X  s   

z#EllipticCurvePublicNumbers.__init__Nc                 C   r{   rv   )r   Z"load_elliptic_curve_public_numbersr%   rJ   r   r   r    r3   e  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.rF   
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r5   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rJ|jd d }t	|d| d krFt
|d|d  d	}t
||d d  d	}| |||S td
td)NrE   zSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrF   r   r   r   r      bigz(Invalid elliptic curve point data lengthrI   )rL   r"   rM   r   r   r   r   
startswithr)   rN   Zint_from_bytesrO   )rQ   r5   r6   r   r   r   r   r   r    rR   z  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 rv   )rL   r   NotImplementedr   r   r5   r&   r)   r%   otherr   r   r    __eq__  s   

z!EllipticCurvePublicNumbers.__eq__c                 C   
   | |k S rv   r   r   r   r   r    __ne__  ry   z!EllipticCurvePublicNumbers.__ne__c                 C   s   t | j| j| jj| jjfS rv   )hashr   r   r5   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}>)r=   r$   r   r   r    __repr__  s   z#EllipticCurvePublicNumbers.__repr__rv   )r	   r
   r   rx   r3   r   rS   rR   r   rz   r5   r   r   r   r   r   r   r   r   r   r    r   W  s    




r   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.)rL   rP   r   rM   r   _private_value_public_numbers)r%   r   rB   r   r   r    rx     s   

z$EllipticCurvePrivateNumbers.__init__Nc                 C   r{   rv   )r   Z#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 rv   )rL   r   r   r   rB   r   r   r   r    r     s
   

z"EllipticCurvePrivateNumbers.__eq__c                 C   r   rv   r   r   r   r   r    r     ry   z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfS rv   )r   r   rB   r$   r   r   r    r     s   z$EllipticCurvePrivateNumbers.__hash__rv   )r	   r
   r   rx   r   r   rz   r   rB   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w )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   rv   )7
__future__r   r   r   r*   r   rP   cryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.backendsr   objectr   Zadd_metaclassABCMetar"   r-   r/   r9   r?   Z'EllipticCurvePublicKeyWithSerializationZregister_interfacer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ro   rq   rs   Z_CURVE_TYPESru   r|   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>   s  



'
7	


X%	
