3 l�_��@sxddlmZmZmZddlZddlmZmZddlm Z ddl m Z Gdd�de �Z Gdd �d e �ZGd d �d e �ZdS) �)�absolute_import�division�print_functionN)� exceptions�utils)�aead)�backendc@s<eZdZdZdd�Zedd��Zdd�Zd d �Zd d �Z d S)�ChaCha20Poly1305�� cCsDtj|�stjdtjj��tjd|�t|�dkr:t d��||_ dS)Nzs   r+c@s<eZdZdZdd�Zedd��Zdd�Zd d �Zd d �Z d S)�AESGCMr r cCs*tjd|�t|�dkr td��||_dS)Nr rr,r z)AESGCM key must be 128, 192, or 256 bits.)rr,r )rr rrr)rr rrrr�s  zAESGCM.__init__cCs0t|t�std��|dkr"td��tj|d�S)Nzbit_length must be an integerr6r7r8z#bit_length must be 128, 192, or 256r/)r6r7r8)r2r3r4rrr)rr9rrrr�s  zAESGCM.generate_keycCsR|dkr d}t|�|jks(t|�|jkr0td��|j|||�tjt||||d�S)Nrz1Data or associated data too long. Max 2**32 bytesr)rrrrrrr)rrr r!rrrr"�szAESGCM.encryptcCs.|dkr d}|j|||�tjt||||d�S)Nrr)rrr#r)rrr r!rrrr$�szAESGCM.decryptcCs<tjd|�tjd|�tjd|�t|�dkr8td��dS)Nrr r!rzNonce must be at least 1 byte)rr r&rr)rrr r!rrrr�s     zAESGCM._check_paramsNl) r'r(r)rrr*rr"r$rrrrrr>�s   r>)Z __future__rrrrZ cryptographyrrZ$cryptography.hazmat.backends.opensslrZ,cryptography.hazmat.backends.openssl.backendr�objectr r+r>rrrr�s  0C