o
    ä›e#/  ã                   @  sš   d dl mZ 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 )é    )ÚannotationsN)Ú
exceptionsÚutils)Úaead)Úbackend)Ú	FixedPoolc                   @  sN   e Zd ZdZddd„Zeddd„ƒZd	d
„ Zddd„Zddd„Z	ddd„Z
dS )ÚChaCha20Poly1305éÿÿÿÚkeyÚbytesc                 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   ú^/var/www/html/venv/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_keyc                 C  s   t  t| | j¡S ©N)r   Ú_aead_create_ctxr   r   ©r   r   r   r   r   %   s   zChaCha20Poly1305._create_fnÚnonceÚdataÚassociated_dataútyping.Optional[bytes]c              
   C  s„   |d u rd}t |ƒ| jkst |ƒ| jkrtdƒ‚|  |||¡ | j ¡ }t t| |||gd|¡W  d   ƒ S 1 s;w   Y  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  s`   |d u rd}|   |||¡ | j ¡ }t t| |||gd|¡W  d   ƒ S 1 s)w   Y  d S ©Nr)   r+   )r.   r   r/   r   Ú_decryptr   r1   r   r   r   Údecrypt=   s   ÿ$ÿzChaCha20Poly1305.decryptÚNonec                 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   r   r   ©r   r$   r%   r&   r   r   r   r.   L   s   ÿzChaCha20Poly1305._check_paramsN©r
   r   )r   r   ©r$   r   r%   r   r&   r'   r   r   ©r$   r   r%   r   r&   r   r   r7   )Ú__name__Ú
__module__Ú__qualname__r,   r   Úclassmethodr    r   r3   r6   r.   r   r   r   r   r      s    


r   c                   @  sR   e Zd ZdZdddd„Zeddd„ƒZddd„Zddd„Zd dd„Z	d!dd„Z
dS )"ÚAESCCMr	   r+   r
   r   Ú
tag_lengthÚintc                 C  sl   t  d|¡ t|ƒdvrtdƒ‚|| _t|tƒstdƒ‚|dvr$tdƒ‚|| _t	 
| ¡s4t 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)é   é   é   é
   r8   é   r+   zInvalid tag_lengthz2AESCCM is not supported by this version of OpenSSL)r   r   r   r   r   Ú
isinstancerD   Ú	TypeErrorÚ_tag_lengthr   r   r   r   r   r   )r   r
   rC   r   r   r   r   \   s   

þÿzAESCCM.__init__Ú
bit_lengthr   c                 C  ó0   t |tƒs	tdƒ‚|dvrtdƒ‚t |d ¡S ©Núbit_length must be an integer)é€   éÀ   é   z#bit_length must be 128, 192, or 256rI   ©rL   rD   rM   r   r   r   ©r   rO   r   r   r   r    p   ó
   
zAESCCM.generate_keyr$   r%   r&   r'   c                 C  sf   |d u rd}t |ƒ| jkst |ƒ| jkrtdƒ‚|  |||¡ |  |t |ƒ¡ t t| |||g| j¡S )Nr)   r*   )	r   r,   r-   r.   Ú_validate_lengthsr   r0   r   rN   r:   r   r   r   r3   z   s   ÿÿzAESCCM.encryptc                 C  s2   |d u rd}|   |||¡ t t| |||g| j¡S )Nr)   )r.   r   r5   r   rN   r:   r   r   r   r6      s   ÿzAESCCM.decryptÚdata_lenr7   c                 C  s(   dt |ƒ }dd|  |k rtdƒ‚d S )Né   é   rI   zData too long for nonce)r   r   )r   r$   rZ   Úl_valr   r   r   rY      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 bytesr9   r:   r   r   r   r.   ¤   s   ÿÿzAESCCM._check_paramsN)r+   )r
   r   rC   rD   ©rO   rD   r   r   r<   )r$   r   rZ   rD   r   r7   r=   )r>   r?   r@   r,   r   rA   r    r3   r6   rY   r.   r   r   r   r   rB   Y   s    
	

rB   c                   @  óF   e Zd ZdZddd„Zedd	d
„ƒZddd„Zddd„Zddd„Z	dS )ÚAESGCMr	   r
   r   c                 C  s*   t  d|¡ t|ƒdvrtdƒ‚|| _d S )Nr
   rE   z)AESGCM key must be 128, 192, or 256 bits.)r   r   r   r   r   r   r   r   r   r   ±   s   
zAESGCM.__init__rO   rD   r   c                 C  rP   rQ   rV   rW   r   r   r   r    ¸   rX   zAESGCM.generate_keyr$   r%   r&   r'   c                 C  óT   |d u rd}t |ƒ| jkst |ƒ| jkrtdƒ‚|  |||¡ t t| |||gd¡S r(   ©r   r,   r-   r.   r   r0   r   r:   r   r   r   r3   Â   ó   ÿzAESGCM.encryptc                 C  ó0   |d u rd}|   |||¡ t t| |||gd¡S r4   ©r.   r   r5   r   r:   r   r   r   r6   Ô   ó   zAESGCM.decryptr7   c                 C  óH   t  d|¡ t  d|¡ t  d|¡ t|ƒdk st|ƒdkr"tdƒ‚d S )Nr$   r%   r&   rI   rS   z%Nonce must be between 8 and 128 bytesr9   r:   r   r   r   r.   à   ó   ÿzAESGCM._check_paramsNr;   r`   r<   r=   ©
r>   r?   r@   r,   r   rA   r    r3   r6   r.   r   r   r   r   rb   ®   s    

	
rb   c                   @  ra   )ÚAESOCB3r	   r
   r   c                 C  óD   t  d|¡ t|ƒdvrtdƒ‚|| _t | ¡s t dtj	j
¡‚d S )Nr
   rE   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   ð   ó   
þÿzAESOCB3.__init__rO   rD   r   c                 C  rP   rQ   rV   rW   r   r   r   r    ý   rX   zAESOCB3.generate_keyr$   r%   r&   r'   c                 C  rc   r(   rd   r:   r   r   r   r3     re   zAESOCB3.encryptc                 C  rf   r4   rg   r:   r   r   r   r6     rh   zAESOCB3.decryptr7   c                 C  ri   )Nr$   r%   r&   r8   r[   z%Nonce must be between 12 and 15 bytesr9   r:   r   r   r   r.   %  rj   zAESOCB3._check_paramsNr;   r`   r<   r=   rk   r   r   r   r   rl   í   s    

	
rl   c                   @  sF   e Zd ZdZddd„Zedd	d
„ƒZddd„Zddd„Zddd„Z	dS )ÚAESSIVr	   r
   r   c                 C  rm   )Nr
   )r   é0   é@   z)AESSIV key must be 256, 384, or 512 bits.z3AES-SIV is not supported by this version of OpenSSLrn   r   r   r   r   r   5  ro   zAESSIV.__init__rO   rD   r   c                 C  rP   )NrR   )rU   i€  i   z#bit_length must be 256, 384, or 512rI   rV   rW   r   r   r   r    B  rX   zAESSIV.generate_keyr%   r&   ú#typing.Optional[typing.List[bytes]]c                   sX   |d u rg }ˆ   ||¡ t|ƒˆ jkst‡ fdd„|D ƒƒr"tdƒ‚t tˆ d||d¡S )Nc                 3  s    | ]
}t |ƒˆ jkV  qd S r!   )r   r,   )Ú.0Úadr#   r   r   Ú	<genexpr>V  s   € 
ÿz!AESSIV.encrypt.<locals>.<genexpr>r*   r)   r+   )r.   r   r,   Úanyr-   r   r0   r   ©r   r%   r&   r   r#   r   r3   L  s   ÿÿzAESSIV.encryptc                 C  s,   |d u rg }|   ||¡ t t| d||d¡S r4   rg   rx   r   r   r   r6   `  s   zAESSIV.decryptútyping.List[bytes]r7   c                 C  sL   t  d|¡ t|ƒdkrtdƒ‚t|tƒstdƒ‚|D ]}t  d|¡ qd 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   rL   ÚlistrM   )r   r%   r&   Úxr   r   r   r.   l  s   
ÿÿzAESSIV._check_paramsNr;   r`   )r%   r   r&   rs   r   r   )r%   r   r&   ry   r   r7   rk   r   r   r   r   rp   2  s    

	
rp   )Ú
__future__r   r   ÚtypingÚcryptographyr   r   Ú$cryptography.hazmat.backends.opensslr   Ú,cryptography.hazmat.backends.openssl.backendr   Ú"cryptography.hazmat.bindings._rustr   r   rB   rb   rl   rp   r   r   r   r   Ú<module>   s   IU?E