3
ãde /  ã               @   sŽ   d dl Z d dlZd dlmZmZ d dlmZ d dlmZ d dl	m
Z
 G dd„ dƒZG dd	„ d	ƒZG d
d„ dƒZG dd„ dƒZG dd„ dƒZdS )é    N)Ú
exceptionsÚutils)Úaead)Úbackend)Ú	FixedPoolc               @   s€   e Zd ZdZedœdd„Zeedœdd	„ƒZd
d„ Zeee	j
e edœdd„Zeee	j
e edœdd„Zeeeddœdd„ZdS )ÚChaCha20Poly1305é   é   é   )Úkeyc             C   sP   t j| ƒstjdtjjƒ‚tjd|ƒ t|ƒdkr:t	dƒ‚|| _
t| jƒ| _d S )Nz<ChaCha20Poly1305 is not supported by this version of OpenSSLr   é    z&ChaCha20Poly1305 key must be 32 bytes.)r   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_keyr   Ú
_create_fnÚ_pool)Úselfr   © r   úb/var/www/agendate/envp3/lib/python3.6/site-packages/cryptography/hazmat/primitives/ciphers/aead.pyÚ__init__   s    

zChaCha20Poly1305.__init__)Úreturnc             C   s
   t jdƒS )Nr   )ÚosÚurandom)Úclsr   r   r   Úgenerate_key    s    zChaCha20Poly1305.generate_keyc             C   s   t jt| | jƒS )N)r   Z_aead_create_ctxr   r   )r   r   r   r   r   $   s    zChaCha20Poly1305._create_fn)ÚnonceÚdataÚassociated_datar   c             C   sl   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚| j|||ƒ | jjƒ �}tjt| |||gd|ƒS Q R X d S )Nó    z5Data or associated data too long. Max 2**31 - 1 bytesé   )	r   Ú	_MAX_SIZEÚOverflowErrorÚ_check_paramsr   Úacquirer   Ú_encryptr   )r   r    r!   r"   Úctxr   r   r   Úencrypt'   s    zChaCha20Poly1305.encryptc             C   sH   |d krd}| j |||ƒ | jjƒ �}tjt| |||gd|ƒS Q R X d S )Nr#   r$   )r'   r   r(   r   Ú_decryptr   )r   r    r!   r"   r*   r   r   r   Údecrypt<   s    zChaCha20Poly1305.decryptNc             C   s<   t jd|ƒ t jd|ƒ t jd|ƒ t|ƒdkr8tdƒ‚d S )Nr    r!   r"   é   zNonce must be 12 bytes)r   r   r   r   )r   r    r!   r"   r   r   r   r'   K   s
    zChaCha20Poly1305._check_paramsl        iÿÿÿ)Ú__name__Ú
__module__Ú__qualname__r%   Úbytesr   Úclassmethodr   r   ÚtypingÚOptionalr+   r-   r'   r   r   r   r   r      s"   r   c               @   s�   e Zd ZdZdeedœdd„Zeeedœd	d
„ƒZeee	j
e edœdd„Zeee	j
e edœdd„Zeeddœdd„Zeeeddœdd„ZdS )ÚAESCCMr   r	   r
   r$   )r   Ú
tag_lengthc             C   sl   t jd|ƒ t|ƒdkr tdƒ‚|| _t|tƒs8tdƒ‚|dkrHtdƒ‚|| _t	j
| ƒshtjdtjjƒ‚d S )Nr   r$   é   r   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integeré   é   é   é
   r.   é   zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)r$   r8   r   )r9   r:   r;   r<   r.   r=   r$   )r   r   r   r   r   Ú
isinstanceÚintÚ	TypeErrorÚ_tag_lengthr   r   r   r   r   r   )r   r   r7   r   r   r   r   [   s    

zAESCCM.__init__)Ú
bit_lengthr   c             C   s0   t |tƒstdƒ‚|dkr"tdƒ‚tj|d ƒS )Nzbit_length must be an integeré€   éÀ   é   z#bit_length must be 128, 192, or 256r;   )rC   rD   rE   )r>   r?   r@   r   r   r   )r   rB   r   r   r   r   o   s
    
zAESCCM.generate_key)r    r!   r"   r   c             C   sf   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚| j|||ƒ | j|t |ƒƒ tjt| |||g| jƒS )Nr#   z5Data or associated data too long. Max 2**31 - 1 bytes)	r   r%   r&   r'   Ú_validate_lengthsr   r)   r   rA   )r   r    r!   r"   r   r   r   r+   y   s    zAESCCM.encryptc             C   s2   |d krd}| j |||ƒ tjt| |||g| jƒS )Nr#   )r'   r   r,   r   rA   )r   r    r!   r"   r   r   r   r-   Ž   s
    zAESCCM.decryptN)r    Údata_lenr   c             C   s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   r   r;   zData too long for nonce)r   r   )r   r    rG   Zl_valr   r   r   rF   œ   s    zAESCCM._validate_lengthsc             C   sL   t jd|ƒ t jd|ƒ t jd|ƒ dt|ƒ  ko:dkn  sHtdƒ‚d S )Nr    r!   r"   é   é   z$Nonce must be between 7 and 13 bytes)r   r   r   r   )r   r    r!   r"   r   r   r   r'   £   s
    zAESCCM._check_paramsl        iÿÿÿ)r$   )r/   r0   r1   r%   r2   r?   r   r3   r   r4   r5   r+   r-   rF   r'   r   r   r   r   r6   X   s   	r6   c               @   sz   e Zd ZdZedœdd„Zeeedœdd	„ƒZeee	j
e ed
œdd„Zeee	j
e ed
œdd„Zeeedd
œdd„ZdS )ÚAESGCMr   r	   r
   )r   c             C   s*   t jd|ƒ t|ƒdkr tdƒ‚|| _d S )Nr   r$   r8   r   z)AESGCM key must be 128, 192, or 256 bits.)r$   r8   r   )r   r   r   r   r   )r   r   r   r   r   r   °   s    zAESGCM.__init__)rB   r   c             C   s0   t |tƒstdƒ‚|dkr"tdƒ‚tj|d ƒS )Nzbit_length must be an integerrC   rD   rE   z#bit_length must be 128, 192, or 256r;   )rC   rD   rE   )r>   r?   r@   r   r   r   )r   rB   r   r   r   r   ·   s
    
zAESGCM.generate_key)r    r!   r"   r   c             C   sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚| j|||ƒ tjt| |||gdƒS )Nr#   z5Data or associated data too long. Max 2**31 - 1 bytesr$   )r   r%   r&   r'   r   r)   r   )r   r    r!   r"   r   r   r   r+   Á   s    zAESGCM.encryptc             C   s0   |d krd}| j |||ƒ tjt| |||gdƒS )Nr#   r$   )r'   r   r,   r   )r   r    r!   r"   r   r   r   r-   Ó   s    zAESGCM.decryptNc             C   sH   t jd|ƒ t jd|ƒ t jd|ƒ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr    r!   r"   r;   rC   z%Nonce must be between 8 and 128 bytes)r   r   r   r   )r   r    r!   r"   r   r   r   r'   ß   s
    zAESGCM._check_paramsl        iÿÿÿ)r/   r0   r1   r%   r2   r   r3   r?   r   r4   r5   r+   r-   r'   r   r   r   r   rK   ­   s    	rK   c               @   sz   e Zd ZdZedœdd„Zeeedœdd	„ƒZeee	j
e ed
œdd„Zeee	j
e ed
œdd„Zeeedd
œdd„ZdS )ÚAESOCB3r   r	   r
   )r   c             C   sD   t jd|ƒ t|ƒdkr tdƒ‚|| _tj| ƒs@tjdtj	j
ƒ‚d S )Nr   r$   r8   r   z*AESOCB3 key must be 128, 192, or 256 bits.z0OCB3 is not supported by this version of OpenSSL)r$   r8   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   ï   s    
zAESOCB3.__init__)rB   r   c             C   s0   t |tƒstdƒ‚|dkr"tdƒ‚tj|d ƒS )Nzbit_length must be an integerrC   rD   rE   z#bit_length must be 128, 192, or 256r;   )rC   rD   rE   )r>   r?   r@   r   r   r   )r   rB   r   r   r   r   ü   s
    
zAESOCB3.generate_key)r    r!   r"   r   c             C   sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚| j|||ƒ tjt| |||gdƒS )Nr#   z5Data or associated data too long. Max 2**31 - 1 bytesr$   )r   r%   r&   r'   r   r)   r   )r   r    r!   r"   r   r   r   r+     s    zAESOCB3.encryptc             C   s0   |d krd}| j |||ƒ tjt| |||gdƒS )Nr#   r$   )r'   r   r,   r   )r   r    r!   r"   r   r   r   r-     s    zAESOCB3.decryptNc             C   sH   t jd|ƒ t jd|ƒ t jd|ƒ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr    r!   r"   r.   rH   z%Nonce must be between 12 and 15 bytes)r   r   r   r   )r   r    r!   r"   r   r   r   r'   $  s
    zAESOCB3._check_paramsl        iÿÿÿ)r/   r0   r1   r%   r2   r   r3   r?   r   r4   r5   r+   r-   r'   r   r   r   r   rL   ì   s    	rL   c               @   s†   e Zd ZdZedœdd„Zeeedœdd	„ƒZee	j
e	je  ed
œdd„Zee	j
e	je  ed
œdd„Zee	je dd
œdd„ZdS )ÚAESSIVr   r	   r
   )r   c             C   sD   t jd|ƒ t|ƒdkr tdƒ‚|| _tj| ƒs@tjdtj	j
ƒ‚d S )Nr   r   é0   é@   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSL)r   rN   rO   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   r   4  s    
zAESSIV.__init__)rB   r   c             C   s0   t |tƒstdƒ‚|dkr"tdƒ‚tj|d ƒS )Nzbit_length must be an integerrE   é€  é   z#bit_length must be 256, 384, or 512r;   )rE   rP   rQ   )r>   r?   r@   r   r   r   )r   rB   r   r   r   r   A  s
    
zAESSIV.generate_key)r!   r"   r   c                sX   |d krg }ˆ j ||ƒ t|ƒˆ jks<t‡ fdd„|D ƒƒrDtdƒ‚tjtˆ d||dƒS )Nc             3   s   | ]}t |ƒˆ jkV  qd S )N)r   r%   )Ú.0Úad)r   r   r   ú	<genexpr>V  s    z!AESSIV.encrypt.<locals>.<genexpr>z5Data or associated data too long. Max 2**31 - 1 bytesr#   r$   )r'   r   r%   Úanyr&   r   r)   r   )r   r!   r"   r   )r   r   r+   K  s    zAESSIV.encryptc             C   s,   |d krg }| j ||ƒ tjt| d||dƒS )Nr#   r$   )r'   r   r,   r   )r   r!   r"   r   r   r   r-   _  s    zAESSIV.decryptNc             C   sP   t jd|ƒ t|ƒdkr tdƒ‚t|tƒs2tdƒ‚x|D ]}t jd|ƒ q8W d S )Nr!   r   zdata must not be zero lengthz<associated_data must be a list of bytes-like objects or Nonezassociated_data elements)r   r   r   r   r>   Úlistr@   )r   r!   r"   Úxr   r   r   r'   k  s    

zAESSIV._check_paramsl        iÿÿÿ)r/   r0   r1   r%   r2   r   r3   r?   r   r4   r5   ÚListr+   r-   r'   r   r   r   r   rM   1  s   
rM   )r   r4   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   r   r6   rK   rL   rM   r   r   r   r   Ú<module>   s   IU?E