U
    §òccà,  ã                   @   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                   @   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   Úaead_cipher_supportedr   ÚUnsupportedAlgorithmÚ_ReasonsÚUNSUPPORTED_CIPHERr   Ú_check_byteslikeÚlenÚ
ValueErrorÚ_key©Úselfr	   © r   úe/var/www/html/project/venv/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   sT   |d krd}t |ƒ| jks(t |ƒ| jkr0t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"   s    ÿzChaCha20Poly1305.encryptc                 C   s0   |d krd}|   |||¡ t t| |||g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d„Zeeedd	œdd„ZdS )ÚAESCCMr   r$   )r	   Ú
tag_lengthc                 C   sl   t  d|¡ t|ƒdkr tdƒ‚|| _t|tƒs8tdƒ‚|dkrHtdƒ‚|| _t	 
| ¡sht 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)é   é   é   é
   r0   é   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   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S ©Núbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256r@   ©rC   rD   rE   r   r   r   ©r   rH   r   r   r   r   d   s
    
zAESCCM.generate_keyr   c                 C   sf   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||g| j¡S )Nr"   r#   )	r   r&   r'   r(   Ú_validate_lengthsr   r)   r   rF   r*   r   r   r   r+   n   s     ÿ     ÿzAESCCM.encryptc                 C   s2   |d krd}|   |||¡ t t| |||g| j¡S )Nr"   )r(   r   r.   r   rF   r*   r   r   r   r/   ƒ   s         ÿzAESCCM.decryptN)r   Údata_lenr   c                 C   s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   é   r@   zData too long for nonce)r   r   )r   r   rQ   Zl_valr   r   r   rP   ‘   s    zAESCCM._validate_lengthsc                 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 bytesr1   r*   r   r   r   r(   ˜   s
    zAESCCM._check_params)r$   )r3   r4   r5   r&   r6   rD   r   r7   r   r8   r9   r+   r/   rP   r(   r   r   r   r   r:   M   s(   ûû  þr:   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	   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__rG   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rI   rN   rO   r   r   r   r   ¬   s
    
zAESGCM.generate_keyr   c                 C   sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||gd¡S r!   r%   r*   r   r   r   r+   ¶   s    ÿzAESGCM.encryptc                 C   s0   |d krd}|   |||¡ t t| |||g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@   rK   z%Nonce must be between 8 and 128 bytesr1   r*   r   r   r   r(   Ô   s
    zAESGCM._check_params©r3   r4   r5   r&   r6   r   r7   rD   r   r8   r9   r+   r/   r(   r   r   r   r   rV   ¢   s&   ûûûrV   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 )ÚAESOCB3r   r   c                 C   sD   t  d|¡ t|ƒdk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   ä   s    
þzAESOCB3.__init__rG   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rI   rN   rO   r   r   r   r   ñ   s
    
zAESOCB3.generate_keyr   c                 C   sT   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ t t| |||gd¡S r!   r%   r*   r   r   r   r+   û   s    ÿzAESOCB3.encryptc                 C   s0   |d krd}|   |||¡ t t| |||gd¡S r,   r-   r*   r   r   r   r/     s    zAESOCB3.decryptNc                 C   sH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk s<t|ƒdkrDtdƒ‚d S )Nr   r   r    r0   rR   z%Nonce must be between 12 and 15 bytesr1   r*   r   r   r   r(     s
    zAESOCB3._check_paramsrW   r   r   r   r   rX   á   s&   ûûûrX   c                   @   s‚   e Zd ZdZedœdd„Zeeedœdd„ƒZee	j
e	je  edœd	d
„Zee	j
e	je  edœdd„Zee	jddœdd„ZdS )ÚAESSIVr   r   c                 C   sD   t  d|¡ t|ƒdkr tdƒ‚|| _t | ¡s@t dtj	j
¡‚d S )Nr	   )r
   é0   é@   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLrY   r   r   r   r   r   )  s    
þzAESSIV.__init__rG   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S )NrJ   )rM   i€  i   z#bit_length must be 256, 384, or 512r@   rN   rO   r   r   r   r   6  s
    
zAESSIV.generate_key)r   r    r   c                    sX   |d krg }ˆ   ||¡ t|ƒˆ jks<t‡ fdd„|D ƒƒrDt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   r`   r   r+   @  s    ÿÿzAESSIV.encryptc                 C   s,   |d krg }|   ||¡ t t| d||d¡S r,   r-   rc   r   r   r   r/   T  s    zAESSIV.decryptNc                 C   s4   t  d|¡ t|tƒr(tdd„ |D ƒƒs0tdƒ‚d S )Nr   c                 s   s   | ]}t |tƒV  qd S r]   )rC   r6   )r^   Úxr   r   r   ra   f  s    z'AESSIV._check_params.<locals>.<genexpr>z/associated_data must be a list of bytes or None)r   r2   rC   ÚlistÚallrE   rc   r   r   r   r(   `  s
    ÿzAESSIV._check_params)r3   r4   r5   r&   r6   r   r7   rD   r   r8   r9   ÚListr+   r/   r(   r   r   r   r   rZ   &  s    üüürZ   )r   r8   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   r   r:   rV   rX   ÚobjectrZ   r   r   r   r   Ú<module>   s   ?U?E