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)Nz|s zAESCCM._validate_lengthscCsLtjd|ƒtjd|ƒtjd|ƒdt|ƒko:dknsHtdƒ‚dS)Nr#r$r%éé z$Nonce must be between 7 and 13 bytes)rrr*rr)rr#r$r%rrrr!ƒs    zAESCCM._check_paramsNl)r) r+r,r-rrr.rr&r(r>r!rrrrr/Bs   r/c@s<eZdZdZdd„Zedd„ƒZdd„Zd d „Zd d „Z d S)ÚAESGCMr r cCs*tjd|ƒt|ƒdkr tdƒ‚||_dS)Nr rr0r z)AESGCM key must be 128, 192, or 256 bits.)rr0r )rrrrr)rr rrrrŽs  zAESGCM.__init__cCs0t|tƒstdƒ‚|dkr"tdƒ‚tj|dƒS)Nzbit_length must be an integerr:r;r<z#bit_length must be 128, 192, or 256r3)r:r;r<)r6r7r8rrr)rr=rrrr•s  zAESGCM.generate_keycCsR|dkr d}t|ƒ|jks(t|ƒ|jkr0tdƒ‚|j|||ƒtjt||||dƒS)Nrz1Data or associated data too long. Max 2**32 bytesr)rrr r!rr"r)rr#r$r%rrrr&ŸszAESGCM.encryptcCs.|dkr d}|j|||ƒtjt||||dƒS)Nrr)r!rr'r)rr#r$r%rrrr(®s zAESGCM.decryptcCs<tjd|ƒtjd|ƒtjd|ƒt|ƒdkr8tdƒ‚dS)Nr#r$r%rzNonce must be at least 1 byte)rrr*rr)rr#r$r%rrrr!·s     zAESGCM._check_paramsNl) r+r,r-rrr.rr&r(r!rrrrrB‹s   rB)Ú __future__rrrrZ cryptographyrrZ$cryptography.hazmat.backends.opensslrZ,cryptography.hazmat.backends.openssl.backendrÚobjectr r/rBrrrrÚs  4I