o
    þÑÐbÏ  ã                   @   sl   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e	ƒZ
G dd„ de	ƒ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   Zaead_cipher_supportedr   ZUnsupportedAlgorithmZ_ReasonsZUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_key©Úselfr   © r   új/var/www/secure340b-portal/env/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   ó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   r   r   r   r   r   r   Úencrypt"   ó   ÿzChaCha20Poly1305.encryptc                 C   ó.   |d u rd}|   |||¡ t t| |||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&   r,   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   sR   t  d|¡ t|ƒdvrtdƒ‚|| _t|tƒstdƒ‚|dvr$tdƒ‚|| _d S )Nr   ©r   é   r	   z)AESCCM key must be 128, 192, or 256 bits.ztag_length must be an integer)é   é   é   é
   r.   é   r   zInvalid tag_length)	r   r
   r   r   r   Ú
isinstanceÚintÚ	TypeErrorÚ_tag_length)r   r   r9   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 ©Nzbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256r>   ©rA   rB   rC   r   r   r   ©r   rE   r   r   r   r   ^   ó
   
zAESCCM.generate_keyr   r   r   c                 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   rD   r%   r   r   r   r&   h   s   ÿÿzAESCCM.encryptc                 C   s0   |d u rd}|   |||¡ t t| |||| j¡S )Nr   )r#   r   r+   r   rD   r%   r   r   r   r,   }   s   ÿzAESCCM.decryptÚdata_lenNc                 C   s(   dt |ƒ }dd|  |k rtdƒ‚d S )Né   é   r>   zData too long for nonce)r   r   )r   r   rO   Zl_valr   r   r   rN   ‹   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 bytesr/   r%   r   r   r   r#   ’   s   ÿÿzAESCCM._check_params)r   )r1   r2   r3   r!   r4   rB   r   r5   r   r6   r7   r&   r,   rN   r#   r   r   r   r   r8   M   sB    	þýü
ûþýü
ûÿÿÿþr8   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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__rE   r   c                 C   rF   rG   rK   rL   r   r   r   r   ¦   rM   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   r,   Â   r-   zAESGCM.decryptNc                 C   sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk st|ƒdkr"tdƒ‚d S )Nr   r   r   r>   rH   z%Nonce must be between 8 and 128 bytesr/   r%   r   r   r   r#   Î   s   ÿzAESGCM._check_params)r1   r2   r3   r!   r4   r   r5   rB   r   r6   r7   r&   r,   r#   r   r   r   r   rT   œ   s@    	þýü
ûþýü
ûþýüûrT   )r   r6   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Úobjectr   r8   rT   r   r   r   r   Ú<module>   s   ?O