o
    ÖèFh¤  ã                   @  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   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHER)Úselfr   r   © r)   úd/var/www/html/loop/nvenv/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(   r:   r;   r<   r)   r)   r*   Úencrypt>   s   ÿÿzAESCCM.encryptc                 C  s2   |d u rd}|   |||¡ t t| |||g| j¡S )Nr>   )rB   r   Ú_decryptr   r#   rE   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(   r:   rI   Úl_valr)   r)   r*   rC   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 )Nr:   r;   r<   é   é   z$Nonce must be between 7 and 13 bytes©r   r   r   r   rE   r)   r)   r*   rB   h   s   ÿÿzAESCCM._check_paramsN)r   )r   r   r   r   ©r,   r   r-   r   ©r:   r   r;   r   r<   r=   r-   r   )r:   r   rI   r   r-   rJ   ©r:   r   r;   r   r<   r   r-   rJ   )Ú__name__Ú
__module__Ú__qualname__r@   r+   Úclassmethodr8   rF   rH   rC   rB   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/   r3   r6   r)   r)   r*   r8   |   r9   zAESGCM.generate_keyr:   r;   r<   r=   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@   rA   rB   r   rD   r   rE   r)   r)   r*   rF   †   s   ÿzAESGCM.encryptc                 C  s0   |d u rd}|   |||¡ t t| |||gd¡S )Nr>   r   )rB   r   rG   r   rE   r)   r)   r*   rH   ˜   s   zAESGCM.decryptrJ   c                 C  sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk st|ƒdkr"tdƒ‚d S )Nr:   r;   r<   r   r0   z%Nonce must be between 8 and 128 bytesrP   rE   r)   r)   r*   rB   ¤   s   ÿzAESGCM._check_paramsN)r   r   rQ   rR   rS   )
rT   rU   rV   r@   r+   rW   r8   rF   rH   rB   r)   r)   r)   r*   r
   r   s    

	
r
   )Ú
__future__r   r4   Úcryptographyr   r   Ú$cryptography.hazmat.backends.opensslr   Ú,cryptography.hazmat.backends.openssl.backendr   Ú"cryptography.hazmat.bindings._rustr   Úrust_opensslÚ__all__r   r   r   r   r	   r
   r)   r)   r)   r*   Ú<module>   s   	U