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 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)backendc                   @   s   e Zd ZdZdefddZ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 )ChaCha20Poly1305keyc                 C   sD   t | stdtjjtd| t|dkrt	d|| _
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_keyselfr    r   Ousr/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_keynoncedataassociated_datac                 C   T   |d u rd}t || jkst || jkrtd| ||| tt| |||gdS N    5Data or associated data too long. Max 2**31 - 1 bytes   r   	_MAX_SIZEOverflowError_check_paramsr   _encryptr   r   r   r   r   r   r   r   encrypt"      zChaCha20Poly1305.encryptc                 C   0   |d u rd}|  ||| tt| |||gdS Nr!   r#   r'   r   _decryptr   r)   r   r   r   decrypt4      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'   @   s   zChaCha20Poly1305._check_params)__name__
__module____qualname__r%   bytesr   classmethodr   typingOptionalr*   r0   r'   r   r   r   r   r      s@    

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)         
   r2      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   P   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 256rB   rE   rF   rG   r   r   r   r   rI   r   r   r   r   d   
   
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   rH   r)   r   r   r   r*   n   s   zAESCCM.encryptc                 C   s2   |d u rd}|  ||| tt| |||g| jS )Nr!   )r'   r   r/   r   rH   r)   r   r   r   r0      s   zAESCCM.decryptdata_lenNc                 C   s(   dt | }dd|  |k rtdd S )N      rB   zData too long for nonce)r   r   )r   r   rT   Zl_valr   r   r   rS      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 bytesr3   r)   r   r   r   r'      s   zAESCCM._check_params)r#   )r5   r6   r7   r%   r8   rF   r   r9   r   r:   r;   r*   r0   rS   r'   r   r   r   r   r<   M   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   r>   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r      s   
zAESGCM.__init__rI   r   c                 C   rJ   rK   rP   rQ   r   r   r   r      rR   zAESGCM.generate_keyr   r   r   c                 C   r   r    r$   r)   r   r   r   r*      r+   zAESGCM.encryptc                 C   r,   r-   r.   r)   r   r   r   r0      r1   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   rB   rM   z%Nonce must be between 8 and 128 bytesr3   r)   r   r   r   r'         zAESGCM._check_paramsr5   r6   r7   r%   r8   r   r9   rF   r   r:   r;   r*   r0   r'   r   r   r   r   rZ      s@    	

rZ   c                   @   rY   )AESOCB3r   r   c                 C   D   t d| t|dvrtd|| _t| s tdtj	j
d S )Nr   r>   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__rI   r   c                 C   rJ   rK   rP   rQ   r   r   r   r      rR   zAESOCB3.generate_keyr   r   r   c                 C   r   r    r$   r)   r   r   r   r*      r+   zAESOCB3.encryptc                 C   r,   r-   r.   r)   r   r   r   r0     r1   zAESOCB3.decryptNc                 C   r[   )Nr   r   r   r2   rU   z%Nonce must be between 12 and 15 bytesr3   r)   r   r   r   r'     r\   zAESOCB3._check_paramsr]   r   r   r   r   r^      s@    	

r^   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ddfddZdS )AESSIVr   r   c                 C   r_   )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   )  ra   zAESSIV.__init__rI   r   c                 C   rJ   )NrL   )rO   i  i   z#bit_length must be 256, 384, or 512rB   rP   rQ   r   r   r   r   6  rR   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 N)r   r%   ).0adr   r   r   	<genexpr>J  s    
z!AESSIV.encrypt.<locals>.<genexpr>r"   r!   r#   )r'   r   r%   anyr&   r   r(   r   r   r   r   r   rh   r   r*   @  s   zAESSIV.encryptc                 C   s,   |d u rg }|  || tt| d||dS r-   r.   rk   r   r   r   r0   T  s   zAESSIV.decryptNc                 C   s4   t d| t|trtdd |D stdd S )Nr   c                 s   s    | ]}t |tV  qd S re   )rE   r8   )rf   xr   r   r   ri   f  s    

z'AESSIV._check_params.<locals>.<genexpr>z/associated_data must be a list of bytes or None)r   r4   rE   listallrG   rk   r   r   r   r'   `  s   zAESSIV._check_params)r5   r6   r7   r%   r8   r   r9   rF   r   r:   r;   Listr*   r0   r'   r   r   r   r   rb   &  s4    	

rb   )r   r:   cryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   r   r<   rZ   r^   objectrb   r   r   r   r   <module>   s   ?U?E