U
    *”}fÛ  ã                   @   sx   d dl mZmZmZ d dlZd dlmZmZ d dlm	Z	 d dl
mZ G dd„ deƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Ú
exceptionsÚutils)Úaead)Úbackendc                   @   s<   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
d„ Z	dS )ÚChaCha20Poly1305ì        c                 C   sD   t  | ¡st dtjj¡‚t d|¡ t|ƒdkr:t	dƒ‚|| _
d S )Nz<ChaCha20Poly1305 is not supported by this version of OpenSSLÚkeyé    z&ChaCha20Poly1305 key must be 32 bytes.)r   Zaead_cipher_supportedr   ZUnsupportedAlgorithmZ_ReasonsZUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_key©Úselfr   © r   úO/tmp/pip-unpacked-wheel-x36vw73o/cryptography/hazmat/primitives/ciphers/aead.pyÚ__init__   s    
þzChaCha20Poly1305.__init__c                 C   s
   t  d¡S )Nr   )ÚosÚurandom)Úclsr   r   r   Úgenerate_key   s    zChaCha20Poly1305.generate_keyc                 C   sR   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||d¡S ©Nó    ú1Data or associated data too long. Max 2**32 bytesé   ©r   Ú	_MAX_SIZEÚOverflowErrorÚ_check_paramsr   Ú_encryptr   ©r   ÚnonceÚdataÚassociated_datar   r   r   Úencrypt"   s    ÿzChaCha20Poly1305.encryptc                 C   s.   |d krd}|   |||¡ t t| |||d¡S ©Nr   r   ©r!   r   Ú_decryptr   r#   r   r   r   Údecrypt/   s    zChaCha20Poly1305.decryptc                 C   s<   t  d|¡ t  d|¡ t  d|¡ t|ƒdkr8tdƒ‚d S )Nr$   r%   r&   é   zNonce must be 12 bytes©r   r   Ú_check_bytesr   r   r#   r   r   r   r!   6   s
    zChaCha20Poly1305._check_paramsN©
Ú__name__Ú
__module__Ú__qualname__r   r   Úclassmethodr   r'   r+   r!   r   r   r   r   r	      s   
r	   c                   @   sF   e Zd ZdZddd„Zedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚAESCCMr
   r   c                 C   sR   t  d|¡ t|ƒdkr tdƒ‚|| _t|tƒs8tdƒ‚|dkrHtdƒ‚|| _d S )Nr   ©r   é   r   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)é   é   é   é
   r,   é   r   zInvalid tag_length)	r   r   r   r   r   Ú
isinstanceÚintÚ	TypeErrorÚ_tag_length)r   r   Z
tag_lengthr   r   r   r   A   s    
zAESCCM.__init__c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S ©Nzbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256r9   ©r<   r=   r>   r   r   r   ©r   Ú
bit_lengthr   r   r   r   O   s
    
zAESCCM.generate_keyc                 C   sd   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||| j¡S )Nr   r   )	r   r   r    r!   Ú_validate_lengthsr   r"   r   r?   r#   r   r   r   r'   Y   s     ÿ     ÿzAESCCM.encryptc                 C   s0   |d krd}|   |||¡ t t| |||| j¡S )Nr   )r!   r   r*   r   r?   r#   r   r   r   r+   i   s         ÿzAESCCM.decryptc                 C   s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   é   r9   zData too long for nonce)r   r   )r   r$   Zdata_lenZl_valr   r   r   rG   r   s    zAESCCM._validate_lengthsc                 C   sJ   t  d|¡ t  d|¡ t  d|¡ dt|ƒ  kr<dksFn tdƒ‚d S )Nr$   r%   r&   é   é   z$Nonce must be between 7 and 13 bytesr-   r#   r   r   r   r!   y   s
    zAESCCM._check_paramsN)r   )r0   r1   r2   r   r   r3   r   r'   r+   rG   r!   r   r   r   r   r4   >   s   

		r4   c                   @   s<   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
d„ Z	dS )ÚAESGCMr
   c                 C   s*   t  d|¡ t|ƒdkr tdƒ‚|| _d S )Nr   r5   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r   „   s    zAESGCM.__init__c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S r@   rD   rE   r   r   r   r   ‹   s
    
zAESGCM.generate_keyc                 C   sR   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||d¡S r   r   r#   r   r   r   r'   •   s    ÿzAESGCM.encryptc                 C   s.   |d krd}|   |||¡ t t| |||d¡S r(   r)   r#   r   r   r   r+   ¢   s    zAESGCM.decryptc                 C   s<   t  d|¡ t  d|¡ t  d|¡ t|ƒdkr8tdƒ‚d S )Nr$   r%   r&   r   zNonce must be at least 1 byter-   r#   r   r   r   r!   ©   s
    zAESGCM._check_paramsNr/   r   r   r   r   rL      s   
	rL   )Ú
__future__r   r   r   r   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Úobjectr	   r4   rL   r   r   r   r   Ú<module>   s   0C