o
    ™¨ÊhË)  ã                   @   s   d dl mZmZmZ d dlZd dl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 d/d0„ d0e
ƒƒZ$e e¡G d1d2„ d2e
ƒƒZ%e e¡G d3d4„ d4e
ƒƒZ&e e¡G d5d6„ d6e
ƒƒZ'i d7e$“d8e!“d9e$“d:e#“d;e!“d<e “d=e“d>e"“d?e“d@e“dAe“dBe“dCe“dDe“dEe“dFe“dGe“ee%e&e'dHœ¥Z(e e¡G dIdJ„ dJe
ƒƒZ)dKdL„ Z*dMdN„ Z+G dOdP„ dPe
ƒZ,G dQdR„ dRe
ƒZ-G dSdT„ dTe
ƒZ.dS )Ué    )Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚObjectIdentifierc                   @   s<   e Z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.35N)
Ú__name__Ú
__module__Ú__qualname__r   Ú	SECP192R1Ú	SECP224R1Ú	SECP256K1Ú	SECP256R1Ú	SECP384R1Ú	SECP521R1© r   r   ú^/var/www/html/env/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   Ú	algorithm)   r   z)EllipticCurveSignatureAlgorithm.algorithmN)r   r	   r
   r   r   r    r   r   r   r   r   '   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   Úsigner2   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    Úpeer_public_keyr   r   r   Úexchange8   r   z EllipticCurvePrivateKey.exchangec                 C   r   )zB
        The EllipticCurvePublicKey for this private key.
        Nr   r   r   r   r   Ú
public_key?   r   z"EllipticCurvePrivateKey.public_keyc                 C   r   ©z8
        The EllipticCurve that this key is on.
        Nr   r   r   r   r   ÚcurveE   r   zEllipticCurvePrivateKey.curvec                 C   r   r   r   r   r   r   r   r   K   r   z EllipticCurvePrivateKey.key_sizec                 C   r   )z 
        Signs the data
        Nr   )r   Údatar"   r   r   r   ÚsignQ   r   zEllipticCurvePrivateKey.signN)r   r	   r
   r   Úabstractmethodr#   r%   r&   r   r(   r   r*   r   r   r   r   r!   0   s    




r!   c                   @   r   )Ú(EllipticCurvePrivateKeyWithSerializationc                 C   r   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   r   r   r   r   Úprivate_numbersZ   r   z8EllipticCurvePrivateKeyWithSerialization.private_numbersc                 C   r   ©z6
        Returns the key serialized as bytes.
        Nr   )r   ÚencodingÚformatÚencryption_algorithmr   r   r   Úprivate_bytes`   r   z6EllipticCurvePrivateKeyWithSerialization.private_bytesN)r   r	   r
   r   r+   r-   r2   r   r   r   r   r,   X   r   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 )ÚEllipticCurvePublicKeyc                 C   r   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr   )r   Ú	signaturer"   r   r   r   Úverifieri   r   zEllipticCurvePublicKey.verifierc                 C   r   r'   r   r   r   r   r   r(   o   r   zEllipticCurvePublicKey.curvec                 C   r   r   r   r   r   r   r   r   u   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/   r0   r   r   r   Úpublic_bytes�   r   z#EllipticCurvePublicKey.public_bytesc                 C   r   )z5
        Verifies the signature of the data.
        Nr   )r   r4   r)   r"   r   r   r   Úverify‡   r   zEllipticCurvePublicKey.verifyN)r   r	   r
   r   r+   r5   r   r(   r   r6   r7   r8   r   r   r   r   r3   g   s    




r3   c                   @   ó   e Zd ZdZdZdS )Ú	SECT571R1Ú	sect571r1i:  N©r   r	   r
   r   r   r   r   r   r   r:   ‘   ó    r:   c                   @   r9   )Ú	SECT409R1Ú	sect409r1é™  Nr<   r   r   r   r   r>   —   r=   r>   c                   @   r9   )Ú	SECT283R1Ú	sect283r1é  Nr<   r   r   r   r   rA   �   r=   rA   c                   @   r9   )Ú	SECT233R1Ú	sect233r1éé   Nr<   r   r   r   r   rD   £   r=   rD   c                   @   r9   )Ú	SECT163R2Ú	sect163r2é£   Nr<   r   r   r   r   rG   ©   r=   rG   c                   @   r9   )Ú	SECT571K1Ú	sect571k1i;  Nr<   r   r   r   r   rJ   ¯   r=   rJ   c                   @   r9   )Ú	SECT409K1Ú	sect409k1r@   Nr<   r   r   r   r   rL   µ   r=   rL   c                   @   r9   )Ú	SECT283K1Ú	sect283k1rC   Nr<   r   r   r   r   rN   »   r=   rN   c                   @   r9   )Ú	SECT233K1Ú	sect233k1rF   Nr<   r   r   r   r   rP   Á   r=   rP   c                   @   r9   )Ú	SECT163K1Ú	sect163k1rI   Nr<   r   r   r   r   rR   Ç   r=   rR   c                   @   r9   )r   Ú	secp521r1i	  Nr<   r   r   r   r   r   Í   r=   r   c                   @   r9   )r   Ú	secp384r1é€  Nr<   r   r   r   r   r   Ó   r=   r   c                   @   r9   )r   Ú	secp256r1é   Nr<   r   r   r   r   r   Ù   r=   r   c                   @   r9   )r   Ú	secp256k1rX   Nr<   r   r   r   r   r   ß   r=   r   c                   @   r9   )r   Ú	secp224r1éà   Nr<   r   r   r   r   r   å   r=   r   c                   @   r9   )r   Ú	secp192r1éÀ   Nr<   r   r   r   r   r   ë   r=   r   c                   @   r9   )ÚBrainpoolP256R1ÚbrainpoolP256r1rX   Nr<   r   r   r   r   r^   ñ   r=   r^   c                   @   r9   )ÚBrainpoolP384R1ÚbrainpoolP384r1rV   Nr<   r   r   r   r   r`   ÷   r=   r`   c                   @   r9   )ÚBrainpoolP512R1ÚbrainpoolP512r1i   Nr<   r   r   r   r   rb   ý   r=   rb   Ú
prime192v1Ú
prime256v1r\   rZ   rW   rU   rT   rY   rS   rQ   rO   rM   rK   rH   rE   rB   r?   )r;   r_   ra   rc   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__rh   N)r   r	   r
   ri   r   Úread_only_propertyr    r   r   r   r   rf      s    rf   c                 C   ó
   |  | ¡S rg   )Ú#generate_elliptic_curve_private_key)r(   Úbackendr   r   r   Úgenerate_private_key(  rj   ro   c                 C   sB   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.)Ú
isinstanceÚsixÚinteger_typesÚ	TypeErrorÚ
ValueErrorr   Ú!derive_elliptic_curve_private_key)Úprivate_valuer(   rn   r   r   r   Úderive_private_key,  s   
rx   c                   @   sn   e Zd Zdd„ Z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.rp   )rq   rr   rs   rt   r   Ú_yÚ_xÚ_curve)r   ÚxÚyr(   r   r   r   ri   :  s   
ÿ
þ

z#EllipticCurvePublicNumbers.__init__c                 C   rl   rg   )Ú"load_elliptic_curve_public_numbers©r   rn   r   r   r   r&   H  rj   z%EllipticCurvePublicNumbers.public_keyc                 C   s0   | j jd d }dt | j|¡ t | j|¡ S )Né   é   ó   )r(   r   r   Úint_to_bytesr}   r~   )r   Úbyte_lengthr   r   r   Úencode_pointK  s
   ÿÿz'EllipticCurvePublicNumbers.encode_pointc                 C   sŠ   t |tƒs	tdƒ‚| d¡rA|jd d }t|ƒd| d kr=t |d|d … d¡}t ||d d … d¡}| |||ƒS tdƒ‚td	ƒ‚)
Nz'curve must be an EllipticCurve instancerƒ   r�   r‚   é   é   Úbigz(Invalid elliptic curve point data lengthz%Unsupported elliptic curve point type)	rq   r   rt   Ú
startswithr   Úlenr   Úint_from_bytesru   )Úclsr(   r)   r…   r}   r~   r   r   r   Úfrom_encoded_pointS  s   

z-EllipticCurvePublicNumbers.from_encoded_pointr|   r{   rz   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 rg   )rq   ry   ÚNotImplementedr}   r~   r(   r   r   ©r   Úotherr   r   r   Ú__eq__h  s   

ÿþüz!EllipticCurvePublicNumbers.__eq__c                 C   ó
   | |k S rg   r   r�   r   r   r   Ú__ne__s  rj   z!EllipticCurvePublicNumbers.__ne__c                 C   s   t | j| j| jj| jjfƒS rg   )Úhashr}   r~   r(   r   r   r   r   r   r   Ú__hash__v  s   z#EllipticCurvePublicNumbers.__hash__c                 C   s
   d  | ¡S )NzC<EllipticCurvePublicNumbers(curve={0.curve.name}, x={0.x}, y={0.y}>)r0   r   r   r   r   Ú__repr__y  s   þz#EllipticCurvePublicNumbers.__repr__N)r   r	   r
   ri   r&   r†   ÚclassmethodrŽ   r   rk   r(   r}   r~   r’   r”   r–   r—   r   r   r   r   ry   9  s    



ry   c                   @   sH   e Zd Zdd„ Z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.)rq   rr   rs   rt   ry   Ú_private_valueÚ_public_numbers)r   rw   r6   r   r   r   ri   �  s   
ÿ
z$EllipticCurvePrivateNumbers.__init__c                 C   rl   rg   )Ú#load_elliptic_curve_private_numbersr€   r   r   r   Úprivate_keyŽ  rj   z'EllipticCurvePrivateNumbers.private_keyrš   r›   c                 C   s&   t |tƒstS | j|jko| j|jkS rg   )rq   r™   r�   rw   r6   r�   r   r   r   r’   ”  s
   

þz"EllipticCurvePrivateNumbers.__eq__c                 C   r“   rg   r   r�   r   r   r   r”   �  rj   z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfƒS rg   )r•   rw   r6   r   r   r   r   r–      s   z$EllipticCurvePrivateNumbers.__hash__N)r   r	   r
   ri   r�   r   rk   rw   r6   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ž   )/Ú
__future__r   r   r   r   rr   Úcryptographyr   Úcryptography.hazmat._oidr   Úobjectr   Úadd_metaclassÚABCMetar   r   r!   r,   r3   Ú'EllipticCurvePublicKeyWithSerializationÚregister_interfacer:   r>   rA   rD   rG   rJ   rL   rN   rP   rR   r   r   r   r   r   r   r^   r`   rb   Ú_CURVE_TYPESrf   ro   rx   ry   r™   rž   r   r   r   r   Ú<module>   sÌ   
	


'
&ÿþüûúùø	÷õôóòñïîíìçG$