U
    ςd#/                     @  s   d dl mZ 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 )    )annotationsN)
exceptionsutils)aead)backend)	FixedPoolc                   @  st   e Zd ZdZddddZeddddZ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 )ChaCha20Poly1305bytes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   h/var/www/html/myproject/myenv/lib/python3.8/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typing.Optional[bytes]noncedataassociated_datar   c              
   C  sx   |d krd}t || jks(t || jkr0td| ||| | j &}tt| |||gd|W  5 Q R  S Q R X 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  sT   |d krd}|  ||| | j &}tt| |||gd|W  5 Q R  S Q R X d S Nr*   r,   )r/   r   r0   r   _decryptr   r2   r   r   r   decrypt=   s          zChaCha20Poly1305.decryptNonec                 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/   L   s
    zChaCha20Poly1305._check_paramsN)__name__
__module____qualname__r-   r   classmethodr!   r   r4   r7   r/   r   r   r   r   r      s   r   c                   @  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 )AESCCMr	   r,   r
   int)r   
tag_lengthc                 C  sl   t d| t|dkr td|| _t|ts8td|dk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)         
   r9      r,   zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)r   r   r   r   r   
isinstancerA   	TypeError_tag_lengthr   r   r   r   r   r   )r   r   rB   r   r   r   r   \   s    

zAESCCM.__init__
bit_lengthr   c                 C  s0   t |tstd|dkr"tdt|d S Nbit_length must be an integer)         z#bit_length must be 128, 192, or 256rG   rJ   rA   rK   r   r   r   r    rN   r   r   r   r!   p   s
    
zAESCCM.generate_keyr$   r%   c                 C  sf   |d k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   r1   r   rL   r;   r   r   r   r4   z   s          zAESCCM.encryptc                 C  s2   |d krd}|  ||| tt| |||g| jS )Nr*   )r/   r   r6   r   rL   r;   r   r   r   r7      s         zAESCCM.decryptr8   )r&   data_lenr   c                 C  s(   dt | }dd|  |k r$tdd S )N      rG   zData too long for nonce)r   r   )r   r&   rW   Zl_valr   r   r   rV      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 bytesr:   r;   r   r   r   r/      s
    zAESCCM._check_paramsN)r,   )r<   r=   r>   r-   r   r?   r!   r4   r7   rV   r/   r   r   r   r   r@   Y   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 )AESGCMr	   r
   r   c                 C  s*   t d| t|dkr td|| _d S )Nr   rC   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r      s    zAESGCM.__init__rA   rM   c                 C  s0   t |tstd|dkr"tdt|d S rO   rT   rU   r   r   r   r!      s
    
zAESGCM.generate_keyr$   r%   c                 C  sT   |d krd}t || jks(t || jkr0td| ||| tt| |||gdS r)   r   r-   r.   r/   r   r1   r   r;   r   r   r   r4      s    zAESGCM.encryptc                 C  s0   |d krd}|  ||| tt| |||gdS r5   r/   r   r6   r   r;   r   r   r   r7      s    zAESGCM.decryptr8   c                 C  sH   t d| t d| t d| t|dk s<t|dkrDtdd S )Nr&   r'   r(   rG   rQ   z%Nonce must be between 8 and 128 bytesr:   r;   r   r   r   r/      s
    zAESGCM._check_paramsN
r<   r=   r>   r-   r   r?   r!   r4   r7   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 )AESOCB3r	   r
   r   c                 C  sD   t d| t|dkr td|| _t| s@tdtj	j
d S )Nr   rC   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__rA   rM   c                 C  s0   t |tstd|dkr"tdt|d S rO   rT   rU   r   r   r   r!      s
    
zAESOCB3.generate_keyr$   r%   c                 C  sT   |d krd}t || jks(t || jkr0td| ||| tt| |||gdS r)   r]   r;   r   r   r   r4     s    zAESOCB3.encryptc                 C  s0   |d krd}|  ||| tt| |||gdS r5   r^   r;   r   r   r   r7     s    zAESOCB3.decryptr8   c                 C  sH   t d| t d| t d| t|dk s<t|dkrDtdd S )Nr&   r'   r(   r9   rX   z%Nonce must be between 12 and 15 bytesr:   r;   r   r   r   r/   %  s
    zAESOCB3._check_paramsNr_   r   r   r   r   r`      s   	r`   c                   @  sh   e Zd ZdZddddZeddddd	Zdd
ddddZdd
ddddZddddddZ	dS )AESSIVr	   r
   r   c                 C  sD   t d| t|dk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 OpenSSLra   r   r   r   r   r   5  s    
zAESSIV.__init__rA   rM   c                 C  s0   t |tstd|dkr"tdt|d S )NrP   )rS   i  i   z#bit_length must be 256, 384, or 512rG   rT   rU   r   r   r   r!   B  s
    
zAESSIV.generate_keyz#typing.Optional[typing.List[bytes]])r'   r(   r   c                   sX   |d k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>V  s    z!AESSIV.encrypt.<locals>.<genexpr>r+   r*   r,   )r/   r   r-   anyr.   r   r1   r   r   r'   r(   r   r#   r   r4   L  s    zAESSIV.encryptc                 C  s,   |d krg }|  || tt| d||dS r5   r^   ri   r   r   r   r7   `  s    zAESSIV.decryptztyping.List[bytes]r8   c                 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   rJ   listrK   )r   r'   r(   xr   r   r   r/   l  s    
zAESSIV._check_paramsNr_   r   r   r   r   rb   2  s   	rb   )
__future__r   r   typingZcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   r   r@   r\   r`   rb   r   r   r   r   <module>   s   IU?E