o
    �)%a9  ã                   @   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 d dl	m
Z
mZ d dlmZmZmZ G dd„ deƒ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 d0d1„ d1eƒZ(G d2d3„ d3eƒZ)G d4d5„ d5eƒZ*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j-e.ej/e f e0dJ< G dKdL„ dLeƒZ1	d]dMedNefdOdP„Z2	d]dQe3dMedNefdRdS„Z4G dTdU„ dUeƒZ5G dVdW„ dWeƒZ6G dXdY„ dYeƒZ7i ej(e(“ej'e'“ej&e&“ej%e%“ej$e$“ej#e#“ej8e)“ej9e*“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ejei¥Z;dZedNej/e fd[d\„Z<dS )^é    N)Úutils)ÚObjectIdentifier)Ú_get_backend)Ú_serializationÚhashes)ÚAsymmetricSignatureContextÚAsymmetricVerificationContextr   c                   @   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    úN/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr	      s(    r	   c                   @   s4   e Zd Zejdefdd„ƒZejdefdd„ƒZdS )ÚEllipticCurveÚreturnc                 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_size2   r(   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dejeje	j
f fdd„ƒZdS )ÚEllipticCurveSignatureAlgorithmr#   c                 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,   ÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr   ÚHashAlgorithmr1   r    r    r    r!   r0   9   s
    þr0   c                	   @   sÆ   e Zd Zejdedefdd„ƒZejdddddefd	d
„ƒZ	ejddd„ƒZ
ejdefdd„ƒZejdefdd„ƒZejdedefdd„ƒZejddd„ƒZejdejdejdejdefdd„ƒZdS )ÚEllipticCurvePrivateKeyÚsignature_algorithmr#   c                 C   r$   )zN
        Returns an AsymmetricSignatureContext used for signing data.
        Nr    )r&   r8   r    r    r!   ÚsignerD   r(   zEllipticCurvePrivateKey.signerr1   ÚECDHÚpeer_public_keyÚEllipticCurvePublicKeyc                 C   r$   )z}
        Performs a key exchange operation using the provided algorithm with the
        provided peer's public key.
        Nr    )r&   r1   r;   r    r    r!   ÚexchangeM   r(   z EllipticCurvePrivateKey.exchangec                 C   r$   )zB
        The EllipticCurvePublicKey for this private key.
        Nr    r%   r    r    r!   Ú
public_keyV   r(   z"EllipticCurvePrivateKey.public_keyc                 C   r$   ©z8
        The EllipticCurve that this key is on.
        Nr    r%   r    r    r!   Úcurve\   r(   zEllipticCurvePrivateKey.curvec                 C   r$   r)   r    r%   r    r    r!   r*   b   r(   z EllipticCurvePrivateKey.key_sizec                 C   r$   )z 
        Signs the data
        Nr    )r&   Údatar8   r    r    r!   Úsignh   r(   zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc                 C   r$   )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr    r%   r    r    r!   Úprivate_numbersr   r(   z'EllipticCurvePrivateKey.private_numbersÚencodingÚformatÚencryption_algorithmc                 C   r$   ©z6
        Returns the key serialized as bytes.
        Nr    )r&   rE   rF   rG   r    r    r!   Úprivate_bytesx   r(   z%EllipticCurvePrivateKey.private_bytesN)r#   r<   )r#   rC   )r
   r   r   r+   Úabstractmethodr0   r   r9   Úbytesr=   r>   r,   r"   r@   r.   r*   rB   rD   r   ÚEncodingÚPrivateFormatÚKeySerializationEncryptionrI   r    r    r    r!   r7   C   sN    þýÿÿþýü	þýüûr7   c                	   @   sº   e Zd Zejdededefdd„ƒZej	de
fdd„ƒZej	defdd	„ƒZejddd„ƒZejdejdejdefdd„ƒZejdedededdfdd„ƒZede
dedd fdd„ƒZdS )r<   Ú	signaturer8   r#   c                 C   r$   )zQ
        Returns an AsymmetricVerificationContext used for signing data.
        Nr    )r&   rO   r8   r    r    r!   Úverifierˆ   r(   zEllipticCurvePublicKey.verifierc                 C   r$   r?   r    r%   r    r    r!   r@   ’   r(   zEllipticCurvePublicKey.curvec                 C   r$   r)   r    r%   r    r    r!   r*   ˜   r(   zEllipticCurvePublicKey.key_sizeÚEllipticCurvePublicNumbersc                 C   r$   )z8
        Returns an EllipticCurvePublicNumbers.
        Nr    r%   r    r    r!   Úpublic_numbersž   r(   z%EllipticCurvePublicKey.public_numbersrE   rF   c                 C   r$   rH   r    )r&   rE   rF   r    r    r!   Úpublic_bytes¤   r(   z#EllipticCurvePublicKey.public_bytesrA   Nc                 C   r$   )z5
        Verifies the signature of the data.
        Nr    )r&   rO   rA   r8   r    r    r!   Úverify®   r(   zEllipticCurvePublicKey.verifyr@   c                 C   s^   t  d|¡ t|tƒstdƒ‚t|ƒdkrtdƒ‚|d dvr#tdƒ‚ddlm} | 	||¡S )NrA   ú'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.backendrZ   Ú load_elliptic_curve_public_bytes)Úclsr@   rA   rZ   r    r    r!   Úfrom_encoded_point¹   s   
z)EllipticCurvePublicKey.from_encoded_point)r#   rQ   )r
   r   r   r+   rJ   rK   r0   r   rP   r,   r"   r@   r.   r*   rR   r   rL   ÚPublicFormatrS   rT   Úclassmethodrc   r    r    r    r!   r<   ‡   sR    þýü	þýü	þýüû
ÿÿþ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                   @   rf   )r   Ú	sect409r1é™  Nrh   r    r    r    r!   r   Õ   ri   r   c                   @   rf   )r   Ú	sect283r1é  Nrh   r    r    r    r!   r   Ú   ri   r   c                   @   rf   )r   Ú	sect233r1éé   Nrh   r    r    r    r!   r   ß   ri   r   c                   @   rf   )r   Ú	sect163r2é£   Nrh   r    r    r    r!   r   ä   ri   r   c                   @   rf   )r   Ú	sect571k1i;  Nrh   r    r    r    r!   r   é   ri   r   c                   @   rf   )r   Ú	sect409k1rk   Nrh   r    r    r    r!   r   î   ri   r   c                   @   rf   )r   Ú	sect283k1rm   Nrh   r    r    r    r!   r   ó   ri   r   c                   @   rf   )r   Ú	sect233k1ro   Nrh   r    r    r    r!   r   ø   ri   r   c                   @   rf   )r   Ú	sect163k1rq   Nrh   r    r    r    r!   r   ý   ri   r   c                   @   rf   )r   Ú	secp521r1i	  Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   Ú	secp384r1é€  Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   Ú	secp256r1é   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   Ú	secp256k1r{   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   Ú	secp224r1éà   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )r   Ú	secp192r1éÀ   Nrh   r    r    r    r!   r     ri   r   c                   @   rf   )ÚBrainpoolP256R1ÚbrainpoolP256r1r{   Nrh   r    r    r    r!   r�      ri   r�   c                   @   rf   )ÚBrainpoolP384R1ÚbrainpoolP384r1ry   Nrh   r    r    r    r!   rƒ   %  ri   rƒ   c                   @   rf   )ÚBrainpoolP512R1ÚbrainpoolP512r1i   Nrh   r    r    r    r!   r…   *  ri   r…   Ú
prime192v1Ú
prime256v1r   r}   rz   rx   rw   r|   rv   ru   rt   rs   rr   rp   rn   rl   rj   )rg   r‚   r„   r†   Ú_CURVE_TYPESc                   @   s   e Zd Zdd„ Ze d¡ZdS )ÚECDSAc                 C   s
   || _ d S ©N)Ú
_algorithm)r&   r1   r    r    r!   Ú__init__I  ó   
zECDSA.__init__rŒ   N)r
   r   r   r�   r   Úread_only_propertyr1   r    r    r    r!   rŠ   H  s    rŠ   r@   r#   c                 C   ó   t |ƒ}| | ¡S r‹   )r   Ú#generate_elliptic_curve_private_key)r@   rZ   r    r    r!   Úgenerate_private_keyO  s   
r’   Úprivate_valuec                 C   sH   t |ƒ}t| tƒ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   r\   r.   r]   r_   r"   Ú!derive_elliptic_curve_private_key)r“   r@   rZ   r    r    r!   Úderive_private_keyV  s   

r–   c                   @   s˜   e Zd Zdededefdd„Zddefdd	„Zdefd
d„Z	e
dededd f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 )rQ   Ú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”   )r\   r.   r]   r"   Ú_yÚ_xÚ_curve)r&   r—   r˜   r@   r    r    r!   r�   g  s   

z#EllipticCurvePublicNumbers.__init__Nr#   c                 C   r�   r‹   )r   Ú"load_elliptic_curve_public_numbers©r&   rZ   r    r    r!   r>   r  ó   
z%EllipticCurvePublicNumbers.public_keyc                 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.rV   ©Ú
stacklevelé   é   ó   )	ÚwarningsÚwarnr   ÚPersistentlyDeprecated2019r@   r*   Úint_to_bytesr—   r˜   )r&   Úbyte_lengthr    r    r!   Úencode_pointv  s   ú	ÿþÿz'EllipticCurvePublicNumbers.encode_pointrA   c                 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ƒ‚)NrU   z�Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_pointrV   rŸ   r£   r¡   r¢   é   Úbigz(Invalid elliptic curve point data lengthrY   )r\   r"   r]   r¤   r¥   r   r¦   Ú
startswithr*   r^   r.   Ú
from_bytesr_   )rb   r@   rA   r¨   r—   r˜   r    r    r!   rc   ‡  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 r‹   )r\   rQ   ÚNotImplementedr—   r˜   r@   r'   r*   ©r&   Úotherr    r    r!   Ú__eq__¦  s   

ÿþüz!EllipticCurvePublicNumbers.__eq__c                 C   ó
   | |k S r‹   r    r¯   r    r    r!   Ú__ne__±  rŽ   z!EllipticCurvePublicNumbers.__ne__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}>)rF   r%   r    r    r!   Ú__repr__·  s   þz#EllipticCurvePublicNumbers.__repr__r‹   )r
   r   r   r.   r"   r�   r<   r>   rK   r©   re   rc   r   r�   r@   r—   r˜   r±   r³   rµ   r¶   r    r    r    r!   rQ   f  s&    ÿÿþ


rQ   c                   @   sZ   e Zd Zdedefdd„Zddefdd„Ze 	d	¡Z
e 	d
¡Zdd„ Zdd„ Zdd„ ZdS )rC   r“   rR   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.)r\   r.   r]   rQ   Ú_private_valueÚ_public_numbers)r&   r“   rR   r    r    r!   r�   ¿  s   

ÿ
z$EllipticCurvePrivateNumbers.__init__Nr#   c                 C   r�   r‹   )r   Ú#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 r‹   )r\   rC   r®   r“   rR   r¯   r    r    r!   r±   Õ  s
   

þz"EllipticCurvePrivateNumbers.__eq__c                 C   r²   r‹   r    r¯   r    r    r!   r³   Þ  rŽ   z"EllipticCurvePrivateNumbers.__ne__c                 C   s   t | j| jfƒS r‹   )r´   r“   rR   r%   r    r    r!   rµ   á  s   z$EllipticCurvePrivateNumbers.__hash__r‹   )r
   r   r   r.   rQ   r�   r7   rº   r   r�   r“   rR   r±   r³   rµ   r    r    r    r!   rC   ¾  s    ÿ
ÿ

	rC   c                   @   s   e Zd ZdS )r:   N)r
   r   r   r    r    r    r!   r:   å  s    r:   Úoidc                 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)r»   r    r    r!   Úget_curve_for_oid   s   
ÿÿr¿   r‹   )=r+   r2   r¤   Úcryptographyr   Úcryptography.hazmat._oidr   Úcryptography.hazmat.backendsr   Úcryptography.hazmat.primitivesr   r   Ú)cryptography.hazmat.primitives.asymmetricr   r   r4   Úobjectr	   ÚABCMetar"   r0   r7   Ú(EllipticCurvePrivateKeyWithSerializationr<   Ú'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r�   rƒ   r…   r‰   ÚDictr-   ÚTypeÚ__annotations__rŠ   r’   r.   r–   rQ   rC   r:   r   r   r   r¼   r¿   r    r    r    r!   Ú<module>   s  

AFÿþýüûúùø	÷
öõôóòñðï ëÿÿ
þÿÿÿ
þX'ÿþýüûúùø	÷
öõôóòñðïí