U
    öEZh /  ã                   @   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 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ƒZdS )é    N)Ú
exceptionsÚutils)Úaead)Úbackend)Ú	FixedPoolc                   @   s€   e Zd ZdZedœdd„Zeedœdd„ƒZ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   sP   t  | ¡st dtjj¡‚t d|¡ t|ƒdkr:t	dƒ‚|| _
t| jƒ| _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Ú_keyr   Ú
_create_fnÚ_pool©Úselfr
   © r   úr/home/aprabhat/apps/x.techxrdev.in/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_keyc                 C   s   t  t| | j¡S ©N)r   Z_aead_create_ctxr   r   ©r   r   r   r   r   $   s    zChaCha20Poly1305._create_fn©ÚnonceÚdataÚassociated_datar   c              
   C   sx   |d krd}t |ƒ| jks(t |ƒ| jkr0tdƒ‚|  |||¡ | j ¡ &}t t| |||gd|¡W  5 Q R £ S Q R X d S ©Nó    ú5Data or associated data too long. Max 2**31 - 1 bytesé   )	r   Ú	_MAX_SIZEÚOverflowErrorÚ_check_paramsr   Úacquirer   Ú_encryptr   ©r   r#   r$   r%   Úctxr   r   r   Úencrypt'   s"    ÿ      ÿzChaCha20Poly1305.encryptc              
   C   sT   |d krd}|   |||¡ | j ¡ &}t t| |||gd|¡W  5 Q R £ S Q R X d S ©Nr'   r)   )r,   r   r-   r   Ú_decryptr   r/   r   r   r   Údecrypt<   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   r   r   ©r   r#   r$   r%   r   r   r   r,   K   s
    zChaCha20Poly1305._check_params)Ú__name__Ú
__module__Ú__qualname__r*   Úbytesr   Úclassmethodr   r   ÚtypingÚOptionalr1   r4   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)é   é   é   é
   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
   r@   r   r   r   r   [   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 256rE   ©rH   rI   rJ   r   r   r   ©r   rM   r   r   r   r   o   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   rK   r7   r   r   r   r1   y   s     ÿ     ÿzAESCCM.encryptc                 C   s2   |d krd}|   |||¡ t t| |||g| j¡S )Nr'   )r,   r   r3   r   rK   r7   r   r   r   r4   Ž   s         ÿzAESCCM.decryptN)r#   Údata_lenr   c                 C   s(   dt |ƒ }dd|  |k r$tdƒ‚d S )Né   é   rE   zData too long for nonce)r   r   )r   r#   rV   Zl_valr   r   r   rU   œ   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 bytesr6   r7   r   r   r   r,   £   s
    zAESCCM._check_params)r)   )r8   r9   r:   r*   r;   rI   r   r<   r   r=   r>   r1   r4   rU   r,   r   r   r   r   r?   X   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
   rA   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r   °   s    zAESGCM.__init__rL   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rN   rS   rT   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.   r   r7   r   r   r   r1   Á   s    ÿzAESGCM.encryptc                 C   s0   |d krd}|   |||¡ t t| |||gd¡S r2   ©r,   r   r3   r   r7   r   r   r   r4   Ó   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%   rE   rP   z%Nonce must be between 8 and 128 bytesr6   r7   r   r   r   r,   ß   s
    zAESGCM._check_params©r8   r9   r:   r*   r;   r   r<   rI   r   r=   r>   r1   r4   r,   r   r   r   r   r[   ­   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 )ÚAESOCB3r   r	   c                 C   sD   t  d|¡ t|ƒdkr tdƒ‚|| _t | ¡s@t dtj	j
¡‚d S )Nr
   rA   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__rL   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S rN   rS   rT   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\   r7   r   r   r   r1     s    ÿzAESOCB3.encryptc                 C   s0   |d krd}|   |||¡ t t| |||gd¡S r2   r]   r7   r   r   r   r4     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%   r5   rW   z%Nonce must be between 12 and 15 bytesr6   r7   r   r   r   r,   $  s
    zAESOCB3._check_paramsr^   r   r   r   r   r_   ì   s&   ûûûr_   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e 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 OpenSSLr`   r   r   r   r   r   4  s    
þzAESSIV.__init__rL   c                 C   s0   t |tƒstdƒ‚|dkr"tdƒ‚t |d ¡S )NrO   )rR   i€  i   z#bit_length must be 256, 384, or 512rE   rS   rT   r   r   r   r   A  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 r    )r   r*   )Ú.0Úadr!   r   r   Ú	<genexpr>U  s    z!AESSIV.encrypt.<locals>.<genexpr>r(   r'   r)   )r,   r   r*   Úanyr+   r   r.   r   ©r   r$   r%   r   r!   r   r1   K  s    ÿÿzAESSIV.encryptc                 C   s,   |d krg }|   ||¡ t t| d||d¡S r2   r]   rh   r   r   r   r4   _  s    zAESSIV.decryptNc                 C   sL   t  d|¡ t|ƒdkr tdƒ‚t|tƒs2tdƒ‚|D ]}t  d|¡ q6d S )Nr$   r   zdata must not be zero lengthz<associated_data must be a list of bytes-like objects or Nonezassociated_data elements)r   r   r   r   rH   ÚlistrJ   )r   r$   r%   Úxr   r   r   r,   k  s    
ÿzAESSIV._check_params)r8   r9   r:   r*   r;   r   r<   rI   r   r=   r>   ÚListr1   r4   r,   r   r   r   r   ra   1  s    üüüra   )r   r=   Zcryptographyr   r   Z$cryptography.hazmat.backends.opensslr   Z,cryptography.hazmat.backends.openssl.backendr   Z"cryptography.hazmat.bindings._rustr   r   r?   r[   r_   ra   r   r   r   r   Ú<module>   s   IU?E