a
    ϏPf                     @  s   d dl m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ZejjZejjZejjZejjZG dd	 d	ZG d
d dZdS )    )annotationsN)
exceptionsutils)aead)backend)openssl)ChaCha20Poly1305AESCCMAESGCM	AESGCMSIVAESOCB3AESSIVc                   @  s   e Zd ZdZddddddZedddd	d
ZdddddddZdddddddZddddddZ	dddddddZ
dS )r	      bytesint)key
tag_lengthc                 C  sl   t d| t|dvr td|| _t|ts8td|dvrHtd|| _t	
| shtdtjjd S )Nr   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   _check_byteslikelen
ValueError_key
isinstancer   	TypeError_tag_lengthr   Zaead_cipher_supportedr   ZUnsupportedAlgorithmZ_ReasonsZUNSUPPORTED_CIPHER)selfr   r    r%   l/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/primitives/ciphers/aead.py__init__    s    

zAESCCM.__init__
bit_lengthreturnc                 C  s0   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 256r   r!   r   r"   r   osurandomclsr)   r%   r%   r&   generate_key4   s
    
zAESCCM.generate_keybytes | Nonenoncedataassociated_datar*   c                 C  sf   |d u rd}t || jks(t || jkr0td| ||| | |t | tt| |||g| jS )N    5Data or associated data too long. Max 2**31 - 1 bytes)	r   	_MAX_SIZEOverflowError_check_params_validate_lengthsr   _encryptr   r#   r$   r7   r8   r9   r%   r%   r&   encrypt>   s    zAESCCM.encryptc                 C  s2   |d u rd}|  ||| tt| |||g| jS )Nr:   )r>   r   _decryptr   r#   rA   r%   r%   r&   decryptS   s    zAESCCM.decryptNone)r7   data_lenr*   c                 C  s(   dt | }dd|  |k r$tdd S )N      r   zData too long for nonce)r   r   )r$   r7   rF   Zl_valr%   r%   r&   r?   a   s    zAESCCM._validate_lengthsc                 C  sJ   t d| t d| t d| dt|  kr<dksFn tdd S )Nr7   r8   r9         z$Nonce must be between 7 and 13 bytesr   r   r   r   rA   r%   r%   r&   r>   h   s
    zAESCCM._check_paramsN)r   )__name__
__module____qualname__r<   r'   classmethodr4   rB   rD   r?   r>   r%   r%   r%   r&   r	      s   	r	   c                   @  sn   e Zd ZdZddddZeddddd	Zddd
ddddZddd
ddddZdddddddZ	dS )r
   r   r   )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&   r'   u   s    zAESGCM.__init__r   r(   c                 C  s0   t |tstd|dvr"tdt|d S r+   r/   r2   r%   r%   r&   r4   |   s
    
zAESGCM.generate_keyr5   r6   c                 C  sT   |d u rd}t || jks(t || jkr0td| ||| tt| |||gdS )Nr:   r;   r   )r   r<   r=   r>   r   r@   r   rA   r%   r%   r&   rB      s    zAESGCM.encryptc                 C  s0   |d u rd}|  ||| tt| |||gdS )Nr:   r   )r>   r   rC   r   rA   r%   r%   r&   rD      s    zAESGCM.decryptrE   c                 C  sH   t d| t d| t d| t|dk s<t|dkrDtdd S )Nr7   r8   r9   r   r,   z%Nonce must be between 8 and 128 bytesrK   rA   r%   r%   r&   r>      s
    zAESGCM._check_paramsN)
rL   rM   rN   r<   r'   rO   r4   rB   rD   r>   r%   r%   r%   r&   r
   r   s   	r
   )
__future__r   r0   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   Zrust_openssl__all__r   r   r   r   r	   r
   r%   r%   r%   r&   <module>   s   	U