o
    ™¨Êh  ã                   @   sx   d dl mZmZm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eƒZG dd	„ d	eƒZG d
d„ deƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Ú
exceptionsÚutils)Úaead)Úbackendc                   @   ó<   e Zd ZdZdd„ Zedd„ ƒZdd„ Zdd	„ Zd
d„ Z	dS )ÚChaCha20Poly1305ì        c                 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 OpenSSLÚkeyé    z&ChaCha20Poly1305 key must be 32 bytes.)r   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHERr   Ú_check_bytesÚlenÚ
ValueErrorÚ_key©Úselfr   © r   ú]/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/ciphers/aead.pyÚ__init__   s   
þ
zChaCha20Poly1305.__init__c                 C   s
   t  d¡S )Nr   )ÚosÚurandom)Úclsr   r   r   Úgenerate_key   s   
zChaCha20Poly1305.generate_keyc                 C   óR   |d u rd}t |ƒ| jkst |ƒ| jkrtdƒ‚|  |||¡ t t| |||d¡S ©Nó    ú1Data or associated data too long. Max 2**32 bytesé   ©r   Ú	_MAX_SIZEÚOverflowErrorÚ_check_paramsr   Ú_encryptr   ©r   ÚnonceÚdataÚassociated_datar   r   r   Úencrypt"   ó   ÿÿzChaCha20Poly1305.encryptc                 C   ó.   |d u rd}|   |||¡ t t| |||d¡S ©Nr!   r#   ©r'   r   Ú_decryptr   r)   r   r   r   Údecrypt1   ó   ÿzChaCha20Poly1305.decryptc                 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   r   r   r)   r   r   r   r'   :   ó   ÿzChaCha20Poly1305._check_paramsN©
Ú__name__Ú
__module__Ú__qualname__r%   r   Úclassmethodr   r-   r3   r'   r   r   r   r   r
      s    
	r
   c                   @   sF   e Zd ZdZddd„Zedd„ ƒZdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚAESCCMr   r#   c                 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)é   é   é   é
   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   Ú
tag_lengthr   r   r   r   E   s   

þÿzAESCCM.__init__c                 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 256rB   ©rE   rF   rG   r   r   r   ©r   Ú
bit_lengthr   r   r   r   Y   ó
   
zAESCCM.generate_keyc                 C   sd   |d u rd}t |ƒ| jkst |ƒ| jkrtdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||| j¡S )Nr!   r"   )	r   r%   r&   r'   Ú_validate_lengthsr   r(   r   rH   r)   r   r   r   r-   c   s   ÿÿzAESCCM.encryptc                 C   s0   |d u rd}|   |||¡ t t| |||| j¡S )Nr!   )r'   r   r2   r   rH   r)   r   r   r   r3   s   s   ÿzAESCCM.decryptc                 C   s(   dt |ƒ }dd|  |k rtdƒ‚d S )Né   é   rB   zNonce too long for data)r   r   )r   r*   Údata_lenÚ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 bytesr6   r)   r   r   r   r'   ƒ   s   ÿÿzAESCCM._check_paramsN)r#   )r9   r:   r;   r%   r   r<   r   r-   r3   rS   r'   r   r   r   r   r=   B   s    

		r=   c                   @   r	   )ÚAESGCMr   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__c                 C   rJ   rK   rO   rP   r   r   r   r   •   rR   zAESGCM.generate_keyc                 C   r   r    r$   r)   r   r   r   r-   Ÿ   r.   zAESGCM.encryptc                 C   r/   r0   r1   r)   r   r   r   r3   ®   r4   zAESGCM.decryptc                 C   s<   t  d|¡ t  d|¡ t  d|¡ t|ƒdkrtdƒ‚d S )Nr*   r+   r,   r   zNonce must be at least 1 byter6   r)   r   r   r   r'   ·   r7   zAESGCM._check_paramsNr8   r   r   r   r   rZ   ‹   s    
		rZ   )Ú
__future__r   r   r   r   Úcryptographyr   r   Ú$cryptography.hazmat.backends.opensslr   Ú,cryptography.hazmat.backends.openssl.backendr   Úobjectr
   r=   rZ   r   r   r   r   Ú<module>   s   4I