
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<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 )NzÑencode_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rŒtj
|d|d … d	ƒ}tj
||d d … d	ƒ}| |||ƒS td
ƒ‚ntdƒ‚d S )Nz'curve must be an EllipticCurve instancez�Support 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%
