o
    
c.                     @   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eZdS )    N)
exceptionsutils)aead)backend)	FixedPoolc                   @   s   e Zd ZdZdefddZedefddZdd	 Zd
edede	j
e defddZd
edede	j
e defddZd
edededdf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   X/opt/certbot/lib/python3.10/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   _aead_create_ctxr   r   r   r   r   r   r   $   s   zChaCha20Poly1305._create_fnnoncedataassociated_datac              
   C   s   |d u rd}t || jkst || jkrtd| ||| | j }tt| |||gd|W  d    S 1 s;w   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 s)w   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rtdd S )Nr"   r#   r$      zNonce must be 12 bytesr   r   _check_bytesr   r   r   r"   r#   r$   r   r   r   r+   K   s   zChaCha20Poly1305._check_params)__name__
__module____qualname__r)   bytesr   classmethodr   r   typingOptionalr0   r3   r+   r   r   r   r   r      sB    

r   c                   @   s   e Zd ZdZddedefddZededefd	d
Zdedede	j
e defddZdedede	j
e defddZdededdfddZdedededdfddZdS )AESCCMr   r(   r	   
tag_lengthc                 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(      r
   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)         
   r4      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   0   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   rL   r   r   r   r   o   
   
zAESCCM.generate_keyr"   r#   r$   c                 C   sf   |d u rd}t || jkst || jkrtd| ||| | |t | tt| |||g| jS )Nr&   r'   )	r   r)   r*   r+   _validate_lengthsr   r-   r   rK   r7   r   r   r   r0   y   s   zAESCCM.encryptc                 C   s2   |d u rd}|  ||| tt| |||g| jS )Nr&   )r+   r   r2   r   rK   r7   r   r   r   r3      s   zAESCCM.decryptdata_lenNc                 C   s(   dt | }dd|  |k rtdd S )N      rE   zData too long for nonce)r   r   )r   r"   rW   l_valr   r   r   rV      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 bytesr5   r7   r   r   r   r+      s   zAESCCM._check_params)r(   )r8   r9   r:   r)   r;   rI   r   r<   r   r=   r>   r0   r3   rV   r+   r   r   r   r   r?   X   sB    	

r?   c                   @      e Zd ZdZdefddZededefddZd	ed
ede	j
e defddZd	ed
ede	j
e defddZd	ed
ededdf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   r   c                 C   rM   rN   rS   rT   r   r   r   r      rU   zAESGCM.generate_keyr"   r#   r$   c                 C   T   |d u rd}t || jkst || jkrtd| ||| tt| |||gdS r%   r   r)   r*   r+   r   r-   r   r7   r   r   r   r0         zAESGCM.encryptc                 C   0   |d u rd}|  ||| tt| |||gdS r1   r+   r   r2   r   r7   r   r   r   r3         zAESGCM.decryptNc                 C   H   t d| t d| t d| t|dk st|dkr"tdd S )Nr"   r#   r$   rE   rP   z%Nonce must be between 8 and 128 bytesr5   r7   r   r   r   r+         zAESGCM._check_paramsr8   r9   r:   r)   r;   r   r<   rI   r   r=   r>   r0   r3   r+   r   r   r   r   r^      s@    	

r^   c                   @   r]   )AESOCB3r   r	   c                 C   D   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         
zAESOCB3.__init__rL   r   c                 C   rM   rN   rS   rT   r   r   r   r      rU   zAESOCB3.generate_keyr"   r#   r$   c                 C   r_   r%   r`   r7   r   r   r   r0     ra   zAESOCB3.encryptc                 C   rb   r1   rc   r7   r   r   r   r3     rd   zAESOCB3.decryptNc                 C   re   )Nr"   r#   r$   r4   rX   z%Nonce must be between 12 and 15 bytesr5   r7   r   r   r   r+   $  rf   zAESOCB3._check_paramsrg   r   r   r   r   rh      s@    	

rh   c                   @   s   e Zd ZdZdefddZededefddZd	ed
e	j
e	je  defddZd	ed
e	j
e	je  defddZd	ed
e	je ddfddZdS )AESSIVr   r	   c                 C   ri   )Nr	   )r
   0   @   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLrj   r   r   r   r   r   4  rk   zAESSIV.__init__rL   r   c                 C   rM   )NrO   )rR   i  i   z#bit_length must be 256, 384, or 512rE   rS   rT   r   r   r   r   A  rU   zAESSIV.generate_keyr#   r$   c                    sX   |d u rg }  || t| jkst fdd|D r"t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   r0   K  s   zAESSIV.encryptc                 C   s,   |d u rg }|  || tt| d||dS r1   rc   rs   r   r   r   r3   _  s   zAESSIV.decryptNc                 C   sH   t d| t|dkrtdt|trtdd |D s"tdd S )Nr#   r   zdata must not be zero lengthc                 s   s    | ]}t |tV  qd S r   )rH   r;   )ro   xr   r   r   rq   s  s    

z'AESSIV._check_params.<locals>.<genexpr>z/associated_data must be a list of bytes or None)r   r6   r   r   rH   listallrJ   rs   r   r   r   r+   k  s   zAESSIV._check_params)r8   r9   r:   r)   r;   r   r<   rI   r   r=   r>   Listr0   r3   r+   r   r   r   r   rl   1  s4    	

rl   )r   r=   cryptographyr   r   $cryptography.hazmat.backends.opensslr   ,cryptography.hazmat.backends.openssl.backendr   "cryptography.hazmat.bindings._rustr   r   r?   r^   rh   objectrl   r   r   r   r   <module>   s   IU?E