o
    CZh                     @  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                   @  sR   e Zd ZdZddddZedddZdddZdddZd ddZ	d!ddZ
dS )"r	      keybytes
tag_lengthintc                 C  sl   t d| t|dvrtd|| _t|tstd|dvr$td|| _t	
| s4t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%   b/var/www/html/lang_env/lib/python3.10/site-packages/cryptography/hazmat/primitives/ciphers/aead.py__init__    s   

zAESCCM.__init__
bit_lengthreturnc                 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 256r   r!   r   r"   r   osurandomclsr(   r%   r%   r&   generate_key4   
   
zAESCCM.generate_keynoncedataassociated_databytes | Nonec                 C  sf   |d u rd}t || jkst || jkrt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$   r6   r7   r8   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data_lenNonec                 C  s(   dt | }dd|  |k rtdd S )N      r   zData too long for nonce)r   r   )r$   r6   rE   Zl_valr%   r%   r&   r?   a   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 )Nr6   r7   r8         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   )r   r   r   r   r(   r   r)   r   r6   r   r7   r   r8   r9   r)   r   )r6   r   rE   r   r)   rF   r6   r   r7   r   r8   r   r)   rF   )__name__
__module____qualname__r<   r'   classmethodr4   rB   rD   r?   r>   r%   r%   r%   r&   r	      s    
	

r	   c                   @  sF   e Zd ZdZdddZedd	d
ZdddZdddZ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   r)   c                 C  r*   r+   r/   r2   r%   r%   r&   r4   |   r5   zAESGCM.generate_keyr6   r7   r8   r9   c                 C  sT   |d u rd}t || jkst || jkrt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.decryptrF   c                 C  sH   t d| t d| t d| t|dk st|dkr"tdd S )Nr6   r7   r8   r   r,   z%Nonce must be between 8 and 128 bytesrK   rA   r%   r%   r&   r>      s   zAESGCM._check_paramsN)r   r   rL   rM   rN   )
rO   rP   rQ   r<   r'   rR   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