3
ãdeµ1  ã            &   @   s  U 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 &G d7d8„ d8eƒZ*dHeej+ed9œd:d;„Z,dIe-eej+ed<œd=d>„Z.G d?d@„ d@ƒZ/G dAdB„ dBƒZ0G dCdD„ dDƒ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Z5eej)e dEœdFdG„Z6dS )Jé    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   úc/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/asymmetric/ec.pyr      s&   r   c               @   s<   e Zd Zeejedœdd„ƒƒZe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	   ÚpropertyÚabcÚabstractmethodÚstrr"   Úintr#   r   r   r   r   r   %   s   r   )Ú	metaclassc               @   s2   e Zd Zeejejej	e
jf dœdd„ƒƒZdS )ÚEllipticCurveSignatureAlgorithm)r    c             C   s   dS )z@
        The digest algorithm used with this signature.
        Nr   )r!   r   r   r   Ú	algorithm6   s    z)EllipticCurveSignatureAlgorithm.algorithmN)r   r   r	   r$   r%   r&   ÚtypingÚUnionÚ
asym_utilsÚ	Prehashedr   ÚHashAlgorithmr+   r   r   r   r   r*   5   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eje	dœd	d
„ƒƒZ
e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+   r4   r   r   r   ÚexchangeA   s    z EllipticCurvePrivateKey.exchange)r    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 )z<
        Bit size of a secret scalar for the curve.
        Nr   )r!   r   r   r   r#   W   s    z EllipticCurvePrivateKey.key_size)ÚdataÚsignature_algorithmr    c             C   s   dS )z 
        Signs the data
        Nr   )r!   r8   r9   r   r   r   Úsign^   s    zEllipticCurvePrivateKey.signÚEllipticCurvePrivateNumbersc             C   s   dS )z9
        Returns an EllipticCurvePrivateNumbers.
        Nr   )r!   r   r   r   Úprivate_numbersh   s    z'EllipticCurvePrivateKey.private_numbers)ÚencodingÚformatÚencryption_algorithmr    c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r!   r=   r>   r?   r   r   r   Úprivate_bytesn   s    z%EllipticCurvePrivateKey.private_bytesN)r   r   r	   r%   r&   Úbytesr5   r6   r$   r   r7   r(   r#   r*   r:   r<   r   ÚEncodingZPrivateFormatZKeySerializationEncryptionr@   r   r   r   r   r1   @   s,   r1   c               @   sœ   e Zd Zeejedœdd„ƒƒZe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 )r3   )r    c             C   s   dS )z8
        The EllipticCurve that this key is on.
        Nr   )r!   r   r   r   r7   ~   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_sizeÚEllipticCurvePublicNumbersc             C   s   dS )z8
        Returns an EllipticCurvePublicNumbers.
        Nr   )r!   r   r   r   Úpublic_numbersŒ   s    z%EllipticCurvePublicKey.public_numbers)r=   r>   r    c             C   s   dS )z6
        Returns the key serialized as bytes.
        Nr   )r!   r=   r>   r   r   r   Úpublic_bytes’   s    z#EllipticCurvePublicKey.public_bytesN)Ú	signaturer8   r9   r    c             C   s   dS )z5
        Verifies the signature of the data.
        Nr   )r!   rF   r8   r9   r   r   r   Úverifyœ   s    zEllipticCurvePublicKey.verify)r7   r8   r    c             C   s^   t jd|ƒ t|tƒstdƒ‚t|ƒdkr2tdƒ‚|d d
krFtdƒ‚dd	lm} |j	||ƒS )Nr8   z'curve must be an EllipticCurve instancer   z%data must not be an empty byte stringé   é   é   z%Unsupported elliptic curve point type)Úbackend)rH   rI   rJ   )
r   Ú_check_bytesÚ
isinstancer   Ú	TypeErrorÚlenÚ
ValueErrorÚ,cryptography.hazmat.backends.openssl.backendrK   Z load_elliptic_curve_public_bytes)Úclsr7   r8   rK   r   r   r   Úfrom_encoded_point§   s    
z)EllipticCurvePublicKey.from_encoded_point)r   r   r	   r$   r%   r&   r   r7   r(   r#   rD   r   rB   ZPublicFormatrA   rE   r*   rG   ÚclassmethodrS   r   r   r   r   r3   }   s(   r3   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   Ú	sect233k1rY   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   Ú	sect163k1r[   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   Ú	secp256k1rd   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ÚbrainpoolP256r1rd   N)r   r   r	   r"   r#   r   r   r   r   rj     s   rj   c               @   s   e Zd ZdZdZdS )ÚBrainpoolP384R1ÚbrainpoolP384r1i€  N)r   r   r	   r"   r#   r   r   r   r   rl     s   rl   c               @   s   e Zd ZdZdZdS )ÚBrainpoolP512R1ÚbrainpoolP512r1i   N)r   r   r	   r"   r#   r   r   r   r   rn     s   rn   )Z
prime192v1Z
prime256v1rh   rf   rc   rb   ra   re   r`   r_   r^   r]   r\   rZ   rX   rW   rV   rU   rk   rm   ro   c               @   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__7  s    zECDSA.__init__)r    c             C   s   | j S )N)rq   )r!   r   r   r   r+   =  s    zECDSA.algorithmN)r   r   r	   r,   r-   r.   r/   r   r0   rr   r$   r+   r   r   r   r   rp   6  s   rp   )r7   rK   r    c             C   s   ddl m} |j| ƒS )Nr   )rK   )rQ   rK   Z#generate_elliptic_curve_private_key)r7   rK   Úosslr   r   r   Úgenerate_private_keyD  s    rt   )Úprivate_valuer7   rK   r    c             C   sL   ddl m} t| tƒstdƒ‚| dkr.tdƒ‚t|tƒs@tdƒ‚|j| |ƒS )Nr   )rK   z&private_value must be an integer type.z)private_value must be a positive integer.z/curve must provide the EllipticCurve interface.)rQ   rK   rM   r(   rN   rP   r   Z!derive_elliptic_curve_private_key)ru   r7   rK   rs   r   r   r   Úderive_private_keyL  s    

rv   c               @   s”   e Zd Ze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edœdd„Zedœdd„Zedœdd„ZdS )rC   )ÚxÚyr7   c             C   sH   t |tƒ st |tƒ r tdƒ‚t |tƒs2tdƒ‚|| _|| _|| _d S )Nzx and y must be integers.z/curve must provide the EllipticCurve interface.)rM   r(   rN   r   Ú_yÚ_xÚ_curve)r!   rw   rx   r7   r   r   r   rr   `  s    
z#EllipticCurvePublicNumbers.__init__N)rK   r    c             C   s   ddl m} |j| ƒS )Nr   )rK   )rQ   rK   Z"load_elliptic_curve_public_numbers)r!   rK   rs   r   r   r   r6   k  s    z%EllipticCurvePublicNumbers.public_key)r    c             C   s   | j S )N)r{   )r!   r   r   r   r7   r  s    z EllipticCurvePublicNumbers.curvec             C   s   | j S )N)rz   )r!   r   r   r   rw   v  s    zEllipticCurvePublicNumbers.xc             C   s   | j S )N)ry   )r!   r   r   r   rx   z  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 )N)rM   rC   ÚNotImplementedrw   rx   r7   r"   r#   )r!   r|   r   r   r   Ú__eq__~  s    
z!EllipticCurvePublicNumbers.__eq__c             C   s   t | j| j| jj| jjfƒS )N)Úhashrw   rx   r7   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}>)r>   )r!   r   r   r   Ú__repr__Œ  s    z#EllipticCurvePublicNumbers.__repr__)N)r   r   r	   r(   r   rr   r,   ÚAnyr3   r6   r$   r7   rw   rx   ÚobjectÚboolr~   r€   r'   r�   r   r   r   r   rC   _  s   rC   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;   )ru   rD   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.)rM   r(   rN   rC   Ú_private_valueÚ_public_numbers)r!   ru   rD   r   r   r   rr   ”  s    

z$EllipticCurvePrivateNumbers.__init__N)rK   r    c             C   s   ddl m} |j| ƒS )Nr   )rK   )rQ   rK   Z#load_elliptic_curve_private_numbers)r!   rK   rs   r   r   r   Úprivate_key£  s    z'EllipticCurvePrivateNumbers.private_key)r    c             C   s   | j S )N)r…   )r!   r   r   r   ru   ¬  s    z)EllipticCurvePrivateNumbers.private_valuec             C   s   | j S )N)r†   )r!   r   r   r   rD   °  s    z*EllipticCurvePrivateNumbers.public_numbers)r|   r    c             C   s&   t |tƒstS | j|jko$| j|jkS )N)rM   r;   r}   ru   rD   )r!   r|   r   r   r   r~   ´  s    
z"EllipticCurvePrivateNumbers.__eq__c             C   s   t | j| jfƒS )N)r   ru   rD   )r!   r   r   r   r€   ½  s    z$EllipticCurvePrivateNumbers.__hash__)N)r   r   r	   r(   rC   rr   r,   r‚   r1   r‡   r$   ru   rD   rƒ   r„   r~   r€   r   r   r   r   r;   “  s   	r;   c               @   s   e Zd ZdS )r2   N)r   r   r	   r   r   r   r   r2   Á  s   r2   )Úoidr    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)rˆ   r   r   r   Úget_curve_for_oidÜ  s
    rŒ   )N)N)7r%   r,   Zcryptographyr   Zcryptography.hazmat._oidr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr.   r   ÚABCMetar   r*   r1   Z(EllipticCurvePrivateKeyWithSerializationr3   Z'EllipticCurvePublicKeyWithSerializationr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r
   rj   rl   rn   Z_CURVE_TYPESÚDictr'   ÚTyperp   r‚   rt   r(   rv   rC   r;   r2   r   r   r   r‰   rŒ   r   r   r   r   Ú<module>   s¢    :>	
4.
