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