U
    ¶[Öe±  ã                   @   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                   @   sx   e Zd ZdZedœdd„Zeedœdd„ƒZeeej	e edœd	d
„Z
eeej	e edœdd„Zeeeddœ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   úm/var/www/html/services/stratfitenv/lib/python3.8/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_datar   c                 C   sR   |d krd}t |ƒ| jks(t |ƒ| jkr0t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"   s    ÿzChaCha20Poly1305.encryptc                 C   s.   |d krd}|   |||¡ t t| |||d¡S ©Nr   r    ©r$   r   Ú_decryptr   r&   r   r   r   Údecrypt4   s    zChaCha20Poly1305.decryptNc                 C   s<   t  d|¡ t  d|¡ t  d|¡ t|ƒdkr8t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eedœdd„Zeeedœdd„ƒZeee	j
e ed	œd
d„Zeee	j
e ed	œdd„Zeedœdd„Zeeedœdd„ZdS )ÚAESCCMr   r    )r	   Ú
tag_lengthc                 C   sR   t  d|¡ t|ƒdkr tdƒ‚|| _t|tƒs8tdƒ‚|dkrHt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	   r7   r   r   r   r   P   s    
zAESCCM.__init__©Ú
bit_lengthr   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S ©Nzbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256r<   ©r?   r@   rA   r   r   r   ©r   rD   r   r   r   r   ^   s
    
zAESCCM.generate_keyr   c                 C   sd   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||| j¡S )Nr   r   )	r   r"   r#   r$   Ú_validate_lengthsr   r%   r   rB   r&   r   r   r   r'   h   s     ÿ     ÿzAESCCM.encryptc                 C   s0   |d krd}|   |||¡ t t| |||| j¡S )Nr   )r$   r   r*   r   rB   r&   r   r   r   r+   }   s         ÿzAESCCM.decrypt)r   Údata_lenc                 C   s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   é   r<   zData too long for nonce)r   r   )r   r   rL   Zl_valr   r   r   rK   ‹   s    zAESCCM._validate_lengths)r   r   r   c                 C   sJ   t  d|¡ t  d|¡ t  d|¡ dt|ƒ  kr<dksFn 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_paramsN)r    )r/   r0   r1   r"   r2   r@   r   r3   r   r4   r5   r'   r+   rK   r$   r   r   r   r   r6   M   s    ûûr6   c                   @   sz   e Zd ZdZedœdd„Zeeedœdd„ƒZeee	j
e edœd	d
„Zeee	j
e edœdd„Zeeeddœdd„ZdS )ÚAESGCMr   r   c                 C   s*   t  d|¡ t|ƒdkr tdƒ‚|| _d S )Nr	   r8   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r      s    zAESGCM.__init__rC   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rE   rI   rJ   r   r   r   r   ¤   s
    
zAESGCM.generate_keyr   c                 C   sR   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||d¡S r   r!   r&   r   r   r   r'   ®   s    ÿzAESGCM.encryptc                 C   s.   |d krd}|   |||¡ t t| |||d¡S r(   r)   r&   r   r   r   r+   À   s    zAESGCM.decryptNc                 C   sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr   r   r   r<   rF   z%Nonce must be between 8 and 128 bytesr-   r&   r   r   r   r$   Ì   s
    zAESGCM._check_params)r/   r0   r1   r"   r2   r   r3   r@   r   r4   r5   r'   r+   r$   r   r   r   r   rQ   š   s&   ûûûrQ   )r   r4   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Úobjectr   r6   rQ   r   r   r   r   Ú<module>   s   ?M