U
    ÒZj„8  ã                &   @   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m	Z	 d dl
mZ G dd„ dƒ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 d.d/„ d/eƒZ#G d0d1„ d1eƒZ$G d2d3„ d3eƒZ%G d4d5„ d5eƒZ&e#e e#e"e eee!eeeeeeeeeee$e%e&d6œZ'ej(e)ej*e f e+d7< G d8d9„ d9eƒZ,dIeej-ed:œd;d<„Z.dJe/eej-ed=œd>d?„Z0G d@dA„ dAƒZ1G dBdC„ dCƒZ2G dDdE„ dEƒZ3ej#e#ej"e"ej!e!ej e ejeejeej4e$ej5e%ej6e&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Z7eej*e dFœdGdH„Z8dS )Ké    N)Úutils)ÚObjectIdentifier)Ú_serializationÚhashesc                   @   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   úo/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s&   r   c                   @   s4   e Zd Zejedœdd„ƒZejedœdd„ƒZdS )ÚEllipticCurve©Úreturnc                 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ÚabstractpropertyÚstrr$   Úintr&   r   r   r   r   r   (   s   r   )Ú	metaclassc                   @   s.   e Zd Zejejeje	j
f dœdd„ƒZdS )ÚEllipticCurveSignatureAlgorithmr    c                 C   s   dS )z@
        The digest algorithm used with this signature.
        Nr   r"   r   r   r   Ú	algorithm7   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r	   r'   r(   ÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr   ÚHashAlgorithmr-   r   r   r   r   r,   6   s   þr,   c                   @   s¬   e Zd Zejddedœdd„ƒZejddœdd„ƒZeje	dœd	d
„ƒZ
ejedœdd„ƒZejeeedœdd„ƒZejddœdd„ƒZejejejejedœdd„ƒZdS )ÚEllipticCurvePrivateKeyÚECDHÚEllipticCurvePublicKey)r-   Úpeer_public_keyr!   c                 C   s   dS )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr   )r#   r-   r6   r   r   r   ÚexchangeA   s    z EllipticCurvePrivateKey.exchanger    c                 C   s   dS )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r"   r   r   r   Ú
public_keyJ   s    z"EllipticCurvePrivateKey.public_keyc                 C   s   dS ©z8
        The EllipticCurve that this key is on.
        Nr   r"   r   r   r   ÚcurveP   s    zEllipticCurvePrivateKey.curvec                 C   s   dS r%   r   r"   r   r   r   r&   V   s    z EllipticCurvePrivateKey.key_size)ÚdataÚsignature_algorithmr!   c                 C   s   dS )z 
        Signs the data
        Nr   )r#   r;   r<   r   r   r   Úsign\   s    zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc                 C   s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r"   r   r   r   Úprivate_numbersf   s    z'EllipticCurvePrivateKey.private_numbers)ÚencodingÚformatÚencryption_algorithmr!   c                 C   s   dS ©z6
        Returns the key serialized as bytes.
        Nr   )r#   r@   rA   rB   r   r   r   Úprivate_bytesl   s    z%EllipticCurvePrivateKey.private_bytesN)r   r   r	   r'   ÚabstractmethodÚbytesr7   r8   r(   r   r:   r*   r&   r,   r=   r?   r   ÚEncodingZPrivateFormatZKeySerializationEncryptionrD   r   r   r   r   r3   @   s0    þü	ûr3   c                   @   s”   e Zd Zejedœdd„ƒZejedœdd„ƒZej	ddœdd„ƒZ
ej	ejejed	œd
d„ƒZej	eeeddœdd„ƒZeeed dœdd„ƒZdS )r5   r    c                 C   s   dS r9   r   r"   r   r   r   r:   |   s    zEllipticCurvePublicKey.curvec                 C   s   dS r%   r   r"   r   r   r   r&   ‚   s    zEllipticCurvePublicKey.key_sizeÚEllipticCurvePublicNumbersc                 C   s   dS )z8
        Returns an EllipticCurvePublicNumbers.
        Nr   r"   r   r   r   Úpublic_numbersˆ   s    z%EllipticCurvePublicKey.public_numbers)r@   rA   r!   c                 C   s   dS rC   r   )r#   r@   rA   r   r   r   Úpublic_bytesŽ   s    z#EllipticCurvePublicKey.public_bytesN)Ú	signaturer;   r<   r!   c                 C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r#   rK   r;   r<   r   r   r   Úverify˜   s    zEllipticCurvePublicKey.verify©r:   r;   r!   c                 C   s^   t  d|¡ t|tƒstdƒ‚t|ƒdkr2tdƒ‚|d dkrFtdƒ‚ddlm} | 	||¡S )Nr;   ú'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.backendrT   Z load_elliptic_curve_public_bytes)Úclsr:   r;   rT   r   r   r   Úfrom_encoded_point£   s    
z)EllipticCurvePublicKey.from_encoded_point)r   r   r	   r'   r(   r   r:   r*   r&   rE   rI   r   rG   ZPublicFormatrF   rJ   r,   rL   Úclassmethodr\   r   r   r   r   r5   {   s,   ü	û
 þr5   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é™  Nr_   r   r   r   r   r   ¿   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect283r1é  Nr_   r   r   r   r   r   Ä   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect233r1éé   Nr_   r   r   r   r   r   É   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect163r2é£   Nr_   r   r   r   r   r   Î   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect571k1i;  Nr_   r   r   r   r   r   Ó   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect409k1ra   Nr_   r   r   r   r   r   Ø   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect283k1rc   Nr_   r   r   r   r   r   Ý   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect233k1re   Nr_   r   r   r   r   r   â   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	sect163k1rg   Nr_   r   r   r   r   r   ç   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	secp521r1i	  Nr_   r   r   r   r   r   ì   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	secp384r1é€  Nr_   r   r   r   r   r   ñ   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	secp256r1é   Nr_   r   r   r   r   r   ö   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	secp256k1rq   Nr_   r   r   r   r   r   û   s   r   c                   @   s   e Zd ZdZdZdS )r   Ú	secp224r1éà   Nr_   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdS )r
   Ú	secp192r1éÀ   Nr_   r   r   r   r   r
     s   r
   c                   @   s   e Zd ZdZdZdS )ÚBrainpoolP256R1ÚbrainpoolP256r1rq   Nr_   r   r   r   r   rw   
  s   rw   c                   @   s   e Zd ZdZdZdS )ÚBrainpoolP384R1ÚbrainpoolP384r1ro   Nr_   r   r   r   r   ry     s   ry   c                   @   s   e Zd ZdZdZdS )ÚBrainpoolP512R1ÚbrainpoolP512r1i   Nr_   r   r   r   r   r{     s   r{   )Z
prime192v1Z
prime256v1ru   rs   rp   rn   rm   rr   rl   rk   rj   ri   rh   rf   rd   rb   r`   r^   rx   rz   r|   Ú_CURVE_TYPESc                   @   sH   e Zd Zejejejf dœdd„Z	e
ejejejf dœdd„ƒZdS )ÚECDSA)r-   c                 C   s
   || _ d S ©N©Ú
_algorithm)r#   r-   r   r   r   Ú__init__3  s    zECDSA.__init__r    c                 C   s   | j S r   r€   r"   r   r   r   r-   9  s    zECDSA.algorithmN)r   r   r	   r.   r/   r0   r1   r   r2   r‚   Úpropertyr-   r   r   r   r   r~   2  s
   þþr~   )r:   rT   r!   c                 C   s   ddl m} | | ¡S ©Nr   rS   )rZ   rT   Z#generate_elliptic_curve_private_key)r:   rT   Úosslr   r   r   Úgenerate_private_key@  s    r†   )Úprivate_valuer:   rT   r!   c                 C   sL   ddl m} t| tƒstdƒ‚| dkr.tdƒ‚t|tƒs@tdƒ‚| | |¡S )Nr   rS   z&private_value must be an integer type.z)private_value must be a positive integer.ú/curve must provide the EllipticCurve interface.)rZ   rT   rV   r*   rW   rY   r   Z!derive_elliptic_curve_private_key)r‡   r:   rT   r…   r   r   r   Úderive_private_keyH  s    

r‰   c                   @   s¸   e Zd Zeeedœdd„Zdejedœdd„Z	e
dœd	d
„Zeee
d dœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„ƒZeedœdd„Zedœdd„Zedœdd„ZdS )rH   )Ú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ˆ   )rV   r*   rW   r   Ú_yÚ_xÚ_curve)r#   rŠ   r‹   r:   r   r   r   r‚   \  s    
z#EllipticCurvePublicNumbers.__init__N©rT   r!   c                 C   s   ddl m} | | ¡S r„   )rZ   rT   Z"load_elliptic_curve_public_numbers©r#   rT   r…   r   r   r   r8   g  s    z%EllipticCurvePublicNumbers.public_keyr    c                 C   sB   t jdtjdd� | jjd d }dt | j|¡ t | 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.rO   ©Ú
stacklevelé   é   ó   )	ÚwarningsÚwarnr   ÚPersistentlyDeprecated2019r:   r&   Zint_to_bytesrŠ   r‹   )r#   Úbyte_lengthr   r   r   Úencode_pointn  s    ú	ÿþÿz'EllipticCurvePublicNumbers.encode_pointrM   c                 C   s¢   t |tƒstdƒ‚tjdtjdd� | d¡r–|jd d }t	|ƒd| d krŒt
 |d|d … d	¡}t
 ||d d … d	¡}| |||ƒS td
ƒ‚ntdƒ‚d S )NrN   z�Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrO   r‘   r•   r“   r”   é   Úbigz(Invalid elliptic curve point data lengthrR   )rV   r   rW   r–   r—   r   r˜   Ú
startswithr&   rX   r*   Ú
from_bytesrY   )r[   r:   r;   r™   rŠ   r‹   r   r   r   r\     s    
û

z-EllipticCurvePublicNumbers.from_encoded_pointc                 C   s   | j S r   )rŽ   r"   r   r   r   r:   š  s    z EllipticCurvePublicNumbers.curvec                 C   s   | j S r   )r�   r"   r   r   r   rŠ   ž  s    zEllipticCurvePublicNumbers.xc                 C   s   | j S r   )rŒ   r"   r   r   r   r‹   ¢  s    zEllipticCurvePublicNumbers.y©Úotherr!   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 r   )rV   rH   ÚNotImplementedrŠ   r‹   r:   r$   r&   ©r#   r    r   r   r   Ú__eq__¦  s    

ÿþüz!EllipticCurvePublicNumbers.__eq__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}>)rA   r"   r   r   r   Ú__repr__´  s    ÿÿz#EllipticCurvePublicNumbers.__repr__)N)r   r   r	   r*   r   r‚   r.   ÚAnyr5   r8   rF   rš   r]   r\   rƒ   r:   rŠ   r‹   ÚobjectÚboolr£   r¥   r)   r¦   r   r   r   r   rH   [  s"    þrH   c                   @   sr   e Zd Zeedœdd„Zdejedœdd„Z	e
edœd	d
„ƒZe
edœdd„ƒZeedœdd„Zedœdd„ZdS )r>   )r‡   rI   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.)rV   r*   rW   rH   Ú_private_valueÚ_public_numbers)r#   r‡   rI   r   r   r   r‚   ¼  s    

ÿz$EllipticCurvePrivateNumbers.__init__Nr�   c                 C   s   ddl m} | | ¡S r„   )rZ   rT   Z#load_elliptic_curve_private_numbersr�   r   r   r   Úprivate_keyË  s    z'EllipticCurvePrivateNumbers.private_keyr    c                 C   s   | j S r   )rª   r"   r   r   r   r‡   Ô  s    z)EllipticCurvePrivateNumbers.private_valuec                 C   s   | j S r   )r«   r"   r   r   r   rI   Ø  s    z*EllipticCurvePrivateNumbers.public_numbersrŸ   c                 C   s&   t |tƒstS | j|jko$| j|jkS r   )rV   r>   r¡   r‡   rI   r¢   r   r   r   r£   Ü  s
    

þz"EllipticCurvePrivateNumbers.__eq__c                 C   s   t | j| jfƒS r   )r¤   r‡   rI   r"   r   r   r   r¥   å  s    z$EllipticCurvePrivateNumbers.__hash__)N)r   r   r	   r*   rH   r‚   r.   r§   r3   r¬   rƒ   r‡   rI   r¨   r©   r£   r¥   r   r   r   r   r>   »  s    ÿ ÿþ		r>   c                   @   s   e Zd ZdS )r4   N)r   r   r	   r   r   r   r   r4   é  s   r4   )Úoidr!   c                 C   s,   z
t |  W 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)r­   r   r   r   Úget_curve_for_oid  s    
ÿr±   )N)N)9r'   r.   r–   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr0   r   ÚABCMetar   r,   r3   Z(EllipticCurvePrivateKeyWithSerializationr5   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   rw   ry   r{   r}   ÚDictr)   ÚTypeÚ__annotations__r~   r§   r†   r*   r‰   rH   r>   r4   r   r   r   r®   r±   r   r   r   r   Ú<module>   sà    
8<ë ÿ þ ýü`.                   í