o
    )%a                     @   sl   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 G dd de	Z
G dd de	ZG d	d
 d
e	ZdS )    N)
exceptionsutils)aead)backendc                   @   s   e Zd ZdZdefddZedefddZded	ed
ej	e defddZ
ded	ed
ej	e defddZded	ed
eddfddZdS )ChaCha20Poly1305        keyc                 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 OpenSSLr       z&ChaCha20Poly1305 key must be 32 bytes.)r   aead_cipher_supportedr   UnsupportedAlgorithm_ReasonsUNSUPPORTED_CIPHERr   _check_byteslikelen
ValueError_keyselfr    r   M/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/ciphers/aead.py__init__   s   

zChaCha20Poly1305.__init__returnc                 C   s
   t dS )Nr	   )osurandom)clsr   r   r   generate_key   s   
zChaCha20Poly1305.generate_keynoncedataassociated_datac                 C   R   |d u rd}t || jkst || jkrtd| ||| tt| |||dS N    1Data or associated data too long. Max 2**32 bytes   r   	_MAX_SIZEOverflowError_check_paramsr   _encryptr   r   r   r   r   r   r   r   encrypt"      zChaCha20Poly1305.encryptc                 C   .   |d u rd}|  ||| tt| |||dS Nr!   r#   r'   r   _decryptr   r)   r   r   r   decrypt4      zChaCha20Poly1305.decryptNc                 C   s<   t d| t d| t d| t|dkrtdd S )Nr   r   r      zNonce must be 12 bytesr   r   _check_bytesr   r   r)   r   r   r   r'   @   s   zChaCha20Poly1305._check_params)__name__
__module____qualname__r%   bytesr   classmethodr   typingOptionalr*   r0   r'   r   r   r   r   r      s@    

r   c                   @   s   e Zd ZdZddedefddZededefd	d
Zdedede	j
e defddZdedede	j
e defddZdedefddZdededefddZdS )AESCCMr   r#   r   
tag_lengthc                 C   sR   t d| t|dvrtd|| _t|tstd|dvr$td|| _d S )Nr   r#      r	   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)         
   r2      r#   zInvalid tag_length)	r   r   r   r   r   
isinstanceint	TypeError_tag_length)r   r   r=   r   r   r   r   P   s   

zAESCCM.__init__
bit_lengthr   c                 C   0   t |ts	td|dvrtdt|d S Nzbit_length must be an integer)         z#bit_length must be 128, 192, or 256rB   rE   rF   rG   r   r   r   r   rI   r   r   r   r   ^   
   
zAESCCM.generate_keyr   r   r   c                 C   sd   |d u rd}t || jkst || jkrtd| ||| | |t | tt| |||| jS )Nr!   r"   )	r   r%   r&   r'   _validate_lengthsr   r(   r   rH   r)   r   r   r   r*   h   s   zAESCCM.encryptc                 C   s0   |d u rd}|  ||| tt| |||| jS )Nr!   )r'   r   r/   r   rH   r)   r   r   r   r0   }   s   zAESCCM.decryptdata_lenc                 C   s(   dt | }dd|  |k rtdd S )N      rB   zData too long for nonce)r   r   )r   r   rS   l_valr   r   r   rR      s   zAESCCM._validate_lengthsc                 C   sP   t d| t d| t d| dt|  kr!dks&td tdd S )Nr   r   r         z$Nonce must be between 7 and 13 bytesr3   r)   r   r   r   r'      s   zAESCCM._check_paramsN)r#   )r5   r6   r7   r%   r8   rF   r   r9   r   r:   r;   r*   r0   rR   r'   r   r   r   r   r<   M   s2    	

r<   c                   @   s   e Zd ZdZdefddZededefddZd	ed
ede	j
e defddZd	ed
ede	j
e defddZd	ed
ededdfddZdS )AESGCMr   r   c                 C   s*   t d| t|dvrtd|| _d S )Nr   r>   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r      s   
zAESGCM.__init__rI   r   c                 C   rJ   rK   rO   rP   r   r   r   r      rQ   zAESGCM.generate_keyr   r   r   c                 C   r   r    r$   r)   r   r   r   r*      r+   zAESGCM.encryptc                 C   r,   r-   r.   r)   r   r   r   r0      r1   zAESGCM.decryptNc                 C   sH   t d| t d| t d| t|dk st|dkr"tdd S )Nr   r   r   rB   rL   z%Nonce must be between 8 and 128 bytesr3   r)   r   r   r   r'      s   zAESGCM._check_params)r5   r6   r7   r%   r8   r   r9   rF   r   r:   r;   r*   r0   r'   r   r   r   r   rY      s@    	

rY   )r   r:   cryptographyr   r   $cryptography.hazmat.backends.opensslr   ,cryptography.hazmat.backends.openssl.backendr   objectr   r<   rY   r   r   r   r   <module>   s   ?M