<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
l_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jejG dd	 d	eZejejG d
d deZejejG dd deZejejG dd deZejejG dd deZeZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG dd deZejeG d d! d!eZejeG d"d# d#eZ ejeG d$d% d%eZ!ejeG d&d' d'eZ"ejeG d(d) d)eZ#ejeG d*d+ d+eZ$ejeG d,d- d-eZ%ejeG d.d/ d/eZ&ejeG d0d1 d1eZ'ejeG d2d3 d3eZ(ejeG d4d5 d5eZ)ej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j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   /usr/lib64/python3.6/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 )z<
        Bit size of a secret scalar for the curve.
        Nr   )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&   r.   r$   r0   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%   r1   r3   r6   r   r   r   r    r2   g   s   r2   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 )z8
        The EllipticCurve that this key is on.
        Nr   )r"   r   r   r    r.   ~   s    zEllipticCurvePublicKey.curvec             C   s   dS )z<
        Bit size of a secret scalar for the curve.
        Nr   )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 )z6
        Returns the key serialized as bytes.
        Nr   )r"   r4   r5   r   r   r    public_bytes   s    z#EllipticCurvePublicKey.public_bytesc             C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r"   r8   r/   r*   r   r   r    verify   s    zEllipticCurvePublicKey.verifyc             C   sb   t jd| t|tstdt|dkr2tdtj|dd
krJtddd	l	m
} |j||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=   r>   r?   )r   _check_bytes
isinstancer!   	TypeErrorlen
ValueErrorsixZ
indexbytesZ,cryptography.hazmat.backends.openssl.backendr@   Z load_elliptic_curve_public_bytes)clsr.   r/   r@   r   r   r    from_encoded_point   s    
z)EllipticCurvePublicKey.from_encoded_pointN)r	   r
   r   r%   r1   r9   r&   r.   r$   r:   r;   r<   classmethodrH   r   r   r   r    r7   v   s   r7   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   	sect409r1i  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   	sect283r1i  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   	sect233r1   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   	sect163r2   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   	sect571k1i;  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   	sect409k1i  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   	sect283k1i  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   	sect233k1rN   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   	sect163k1rP   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   	secp521r1i	  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   	secp384r1i  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   	secp256r1   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   	secp256k1rY   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   	secp224r1   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   	secp192r1   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 )BrainpoolP256R1brainpoolP256r1rY   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 )BrainpoolP384R1brainpoolP384r1i  N)r	   r
   r   r#   r$   r   r   r   r    ra     s   ra   c               @   s   e Zd ZdZdZdS )BrainpoolP512R1brainpoolP512r1i   N)r	   r
   r   r#   r$   r   r   r   r    rc     s   rc   )Z
prime192v1Z
prime256v1r]   r[   rX   rW   rV   rZ   rU   rT   rS   rR   rQ   rO   rM   rL   rK   rJ   r`   rb   rd   c               @   s   e Zd Zdd ZejdZdS )ECDSAc             C   s
   || _ d S )N)
_algorithm)r"   r(   r   r   r    __init__>  s    zECDSA.__init__rf   N)r	   r
   r   rg   r   read_only_propertyr(   r   r   r   r    re   <  s   re   c             C   s   t |}|j| S )N)r   Z#generate_elliptic_curve_private_key)r.   r@   r   r   r    generate_private_keyD  s    ri   c             C   sJ   t |}t| tjstd| dkr,tdt|ts>td|j| |S )Nz&private_value must be an integer type.r   z)private_value must be a positive integer.z/curve must provide the EllipticCurve interface.)r   rB   rF   integer_typesrC   rE   r!   Z!derive_elliptic_curve_private_key)private_valuer.   r@   r   r   r    derive_private_keyI  s    
rl   c               @   sp   e Zd Zdd ZdddZdd Zedd	 Zej	d
Z
ej	dZej	dZdd Zdd Zdd Zdd ZdS )EllipticCurvePublicNumbersc             C   sL   t |tj st |tj r$tdt |ts6td|| _|| _|| _d S )Nzx and y must be integers.z/curve must provide the EllipticCurve interface.)rB   rF   rj   rC   r!   _y_x_curve)r"   xyr.   r   r   r    rg   X  s    
z#EllipticCurvePublicNumbers.__init__Nc             C   s   t |}|j| S )N)r   Z"load_elliptic_curve_public_numbers)r"   r@   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| j| tj| 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.r=   )
stacklevel         )	warningswarnr   PersistentlyDeprecated2019r.   r$   Zint_to_bytesrq   rr   )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 |jdr|jd d }t	|d| d krtj
|d|d  d	}tj
||d d  d	}| |||S td
ntdd S )Nz'curve must be an EllipticCurve instancezSupport for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointr=   )rs   rv   rt   ru      Zbigz(Invalid elliptic curve point data lengthz%Unsupported elliptic curve point type)rB   r!   rC   rw   rx   r   ry   
startswithr$   rD   Zint_from_bytesrE   )rG   r.   r/   rz   rq   rr   r   r   r    rH   z  s    


z-EllipticCurvePublicNumbers.from_encoded_pointrp   ro   rn   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 )N)rB   rm   NotImplementedrq   rr   r.   r#   r$   )r"   otherr   r   r    __eq__  s    
z!EllipticCurvePublicNumbers.__eq__c             C   s
   | |k S )Nr   )r"   r   r   r   r    __ne__  s    z!EllipticCurvePublicNumbers.__ne__c             C   s   t | j| j| jj| jjfS )N)hashrq   rr   r.   r#   r$   )r"   r   r   r    __hash__  s    z#EllipticCurvePublicNumbers.__hash__c             C   s
   dj | S )NzC<EllipticCurvePublicNumbers(curve={0.curve.name}, x={0.x}, y={0.y}>)r5   )r"   r   r   r    __repr__  s    z#EllipticCurvePublicNumbers.__repr__)N)r	   r
   r   rg   r-   r{   rI   rH   r   rh   r.   rq   rr   r   r   r   r   r   r   r   r    rm   W  s   



rm   c               @   sJ   e Zd Zdd ZdddZejdZej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.)rB   rF   rj   rC   rm   _private_value_public_numbers)r"   rk   r:   r   r   r    rg     s    
z$EllipticCurvePrivateNumbers.__init__Nc             C   s   t |}|j| S )N)r   Z#load_elliptic_curve_private_numbers)r"   r@   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 )N)rB   r   r~   rk   r:   )r"   r   r   r   r    r     s    
z"EllipticCurvePrivateNumbers.__eq__c             C   s
   | |k S )Nr   )r"   r   r   r   r    r     s    z"EllipticCurvePrivateNumbers.__ne__c             C   s   t | j| jfS )N)r   rk   r:   )r"   r   r   r    r     s    z$EllipticCurvePrivateNumbers.__hash__)N)r	   r
   r   rg   r   r   rh   rk   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*   yt |  S  tk
r$   tdY nX 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%   rw   rF   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.backendsr   objectr   Zadd_metaclassABCMetar!   r'   r)   r2   r7   Z'EllipticCurvePublicKeyWithSerializationZregister_interfacer   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r_   ra   rc   Z_CURVE_TYPESre   ri   rl   rm   r   r   r   r   r   r   r   r   r   r   r    <module>   s   '7

X%
