o
    >e                     @  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)   l/var/www/html/humari/django-venv/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