a
    ݌xd /                     @   s   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 d dl	m
Z
 G dd dZG dd	 d	ZG d
d dZG dd dZG dd dZdS )    N)
exceptionsutils)aead)backend)	FixedPoolc                   @   s   e Zd ZdZedddZeedddZdd	 Zeee	j
e ed
ddZeee	j
e ed
ddZeeedd
ddZdS )ChaCha20Poly1305keyc                 C   sP   t | stdtjjtd| t|dkr:t	d|| _
t| j| _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_keyr   
_create_fn_poolselfr
    r   c/var/www/html/Ranjet/env/lib/python3.9/site-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_keyc                 C   s   t t| | jS N)r   Z_aead_create_ctxr   r   r   r   r   r   r   $   s    zChaCha20Poly1305._create_fnnoncedataassociated_datar   c              
   C   s   |d u rd}t || jks(t || jkr0td| ||| | j (}tt| |||gd|W  d    S 1 sv0    Y  d S N    5Data or associated data too long. Max 2**31 - 1 bytes   )	r   	_MAX_SIZEOverflowError_check_paramsr   acquirer   _encryptr   r   r#   r$   r%   ctxr   r   r   encrypt'   s    zChaCha20Poly1305.encryptc              
   C   s`   |d u rd}|  ||| | j (}tt| |||gd|W  d    S 1 sR0    Y  d S Nr'   r)   )r,   r   r-   r   _decryptr   r/   r   r   r   decrypt<   s    zChaCha20Poly1305.decryptNc                 C   s<   t d| t d| t d| t|dkr8tdd S )Nr#   r$   r%      zNonce must be 12 bytesr   r   r   r   r   r#   r$   r%   r   r   r   r,   K   s
    zChaCha20Poly1305._check_params)__name__
__module____qualname__r*   bytesr   classmethodr   r   typingOptionalr1   r4   r,   r   r   r   r   r      s(   r   c                   @   s   e Zd ZdZdeedddZeeedddZeee	j
e ed	d
dZeee	j
e ed	ddZeeddddZeeedd	ddZdS )AESCCMr   r)   )r
   
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)      r   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)         
   r5      r)   zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)r   r   r   r   r   
isinstanceint	TypeError_tag_lengthr   r   r   r   r   r   )r   r
   r@   r   r   r   r   [   s    

zAESCCM.__init__
bit_lengthr   c                 C   s0   t |tstd|dvr"tdt|d S Nbit_length must be an integer)         z#bit_length must be 128, 192, or 256rE   rH   rI   rJ   r   r   r   r   rM   r   r   r   r   o   s
    
zAESCCM.generate_keyr"   c                 C   sf   |d u rd}t || jks(t || jkr0td| ||| | |t | tt| |||g| jS )Nr'   r(   )	r   r*   r+   r,   _validate_lengthsr   r.   r   rK   r7   r   r   r   r1   y   s    zAESCCM.encryptc                 C   s2   |d u rd}|  ||| tt| |||g| jS )Nr'   )r,   r   r3   r   rK   r7   r   r   r   r4      s    zAESCCM.decryptN)r#   data_lenr   c                 C   s(   dt | }dd|  |k r$tdd S )N      rE   zData too long for nonce)r   r   )r   r#   rV   Zl_valr   r   r   rU      s    zAESCCM._validate_lengthsc                 C   sJ   t d| t d| t d| dt|  kr<dksFn tdd S )Nr#   r$   r%         z$Nonce must be between 7 and 13 bytesr6   r7   r   r   r   r,      s
    zAESCCM._check_params)r)   )r8   r9   r:   r*   r;   rI   r   r<   r   r=   r>   r1   r4   rU   r,   r   r   r   r   r?   X   s$   r?   c                   @   sz   e Zd ZdZedddZeeedddZeee	j
e edd	d
Zeee	j
e edddZeeeddddZdS )AESGCMr   r	   c                 C   s*   t d| t|dvr td|| _d S )Nr
   rA   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r      s    zAESGCM.__init__rL   c                 C   s0   t |tstd|dvr"tdt|d S rN   rS   rT   r   r   r   r      s
    
zAESGCM.generate_keyr"   c                 C   sT   |d u rd}t || jks(t || jkr0td| ||| tt| |||gdS r&   r   r*   r+   r,   r   r.   r   r7   r   r   r   r1      s    zAESGCM.encryptc                 C   s0   |d u rd}|  ||| tt| |||gdS r2   r,   r   r3   r   r7   r   r   r   r4      s    zAESGCM.decryptNc                 C   sH   t d| t d| t d| t|dk s<t|dkrDtdd S )Nr#   r$   r%   rE   rP   z%Nonce must be between 8 and 128 bytesr6   r7   r   r   r   r,      s
    zAESGCM._check_paramsr8   r9   r:   r*   r;   r   r<   rI   r   r=   r>   r1   r4   r,   r   r   r   r   r[      s&   r[   c                   @   sz   e Zd ZdZedddZeeedddZeee	j
e edd	d
Zeee	j
e edddZeeeddddZdS )AESOCB3r   r	   c                 C   sD   t d| t|dvr td|| _t| s@tdtj	j
d S )Nr
   rA   z*AESOCB3 key must be 128, 192, or 256 bits.z0OCB3 is not supported by this version of OpenSSLr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    
zAESOCB3.__init__rL   c                 C   s0   t |tstd|dvr"tdt|d S rN   rS   rT   r   r   r   r      s
    
zAESOCB3.generate_keyr"   c                 C   sT   |d u rd}t || jks(t || jkr0td| ||| tt| |||gdS r&   r\   r7   r   r   r   r1     s    zAESOCB3.encryptc                 C   s0   |d u rd}|  ||| tt| |||gdS r2   r]   r7   r   r   r   r4     s    zAESOCB3.decryptNc                 C   sH   t d| t d| t d| t|dk s<t|dkrDtdd S )Nr#   r$   r%   r5   rW   z%Nonce must be between 12 and 15 bytesr6   r7   r   r   r   r,   $  s
    zAESOCB3._check_paramsr^   r   r   r   r   r_      s&   r_   c                   @   s   e Zd ZdZedddZeeedddZee	j
e	je  edd	d
Zee	j
e	je  edddZee	je ddddZdS )AESSIVr   r	   c                 C   sD   t d| t|dvr td|| _t| s@tdtj	j
d S )Nr
   )r   0   @   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLr`   r   r   r   r   r   4  s    
zAESSIV.__init__rL   c                 C   s0   t |tstd|dvr"tdt|d S )NrO   )rR   i  i   z#bit_length must be 256, 384, or 512rE   rS   rT   r   r   r   r   A  s
    
zAESSIV.generate_key)r$   r%   r   c                    sX   |d u rg }  || t| jks<t fdd|D rDtdtt d||dS )Nc                 3   s   | ]}t | jkV  qd S r    )r   r*   ).0adr!   r   r   	<genexpr>U  s   z!AESSIV.encrypt.<locals>.<genexpr>r(   r'   r)   )r,   r   r*   anyr+   r   r.   r   r   r$   r%   r   r!   r   r1   K  s    zAESSIV.encryptc                 C   s,   |d u rg }|  || tt| d||dS r2   r]   rh   r   r   r   r4   _  s    zAESSIV.decryptNc                 C   sL   t d| t|dkr tdt|ts2td|D ]}t d| q6d S )Nr$   r   zdata must not be zero lengthz<associated_data must be a list of bytes-like objects or Nonezassociated_data elements)r   r   r   r   rH   listrJ   )r   r$   r%   xr   r   r   r,   k  s    
zAESSIV._check_params)r8   r9   r:   r*   r;   r   r<   rI   r   r=   r>   Listr1   r4   r,   r   r   r   r   ra   1  s    ra   )r   r=   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   r   r?   r[   r_   ra   r   r   r   r   <module>   s   IU?E