o
    �)%a±  ã                   @   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   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_key©Úselfr   © r   úM/usr/lib/python3/dist-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*   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fdd„Zdedede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)é   é   é   é
   r2   é   r#   zInvalid tag_length)	r   r   r   r   r   Ú
isinstanceÚintÚ	TypeErrorÚ_tag_length)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 ©Nz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   ^   ó
   
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   rH   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   rH   r)   r   r   r   r0   }   s   ÿzAESCCM.decryptÚdata_lenc                 C   s(   dt |ƒ }dd|  |k rtdƒ‚d S )Né   é   rB   zData too long for nonce)r   r   )r   r   rS   Úl_valr   r   r   rR   ‹   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_paramsN)r#   )r5   r6   r7   r%   r8   rF   r   r9   r   r:   r;   r*   r0   rR   r'   r   r   r   r   r<   M   s2    	þýü
ûþýü
û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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   rO   rP   r   r   r   r   ¤   rQ   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   sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk st|ƒdkr"tdƒ‚d S )Nr   r   r   rB   rL   z%Nonce must be between 8 and 128 bytesr3   r)   r   r   r   r'   Ì   s   ÿzAESGCM._check_params)r5   r6   r7   r%   r8   r   r9   rF   r   r:   r;   r*   r0   r'   r   r   r   r   rY   š   s@    	þýü
ûþýü
ûþýüûrY   )r   r:   Úcryptographyr   r   Ú$cryptography.hazmat.backends.opensslr   Ú,cryptography.hazmat.backends.openssl.backendr   Úobjectr   r<   rY   r   r   r   r   Ú<module>   s   ?M