3 l_@sxddlmZmZmZddlZddlmZmZddlm Z ddl m Z Gddde Z Gdd d e ZGd d d e ZdS) )absolute_importdivisionprint_functionN) exceptionsutils)aead)backendc@s<eZdZdZddZeddZddZd d Zd d Z d S)ChaCha20Poly1305 cCsDtj|stjdtjjtjd|t|dkr:t d||_ dS)Nzs   r+c@s<eZdZdZddZeddZddZd 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 rrrrs  zAESGCM.__init__cCs0t|tstd|dkr"tdtj|dS)Nzbit_length must be an integerr6r7r8z#bit_length must be 128, 192, or 256r/)r6r7r8)r2r3r4rrr)rr9rrrrs  zAESGCM.generate_keycCsR|dkr d}t||jks(t||jkr0td|j|||tjt||||dS)Nrz1Data or associated data too long. Max 2**32 bytesr)rrrrrrr)rrr r!rrrr"szAESGCM.encryptcCs.|dkr d}|j|||tjt||||dS)Nrr)rrr#r)rrr r!rrrr$szAESGCM.decryptcCs<tjd|tjd|tjd|t|dkr8tddS)Nrr r!rzNonce must be at least 1 byte)rr r&rr)rrr r!rrrrs     zAESGCM._check_paramsNl) r'r(r)rrr*rr"r$rrrrrr>s   r>)Z __future__rrrrZ cryptographyrrZ$cryptography.hazmat.backends.opensslrZ,cryptography.hazmat.backends.openssl.backendrobjectr r+r>rrrrs  0C