o -&%aDã@sPddlmZdZdZdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)é)Ú InvalidTagécCsnddlm}m}m}t||ƒrdSt||ƒr#d t|jƒd¡ d¡St||ƒs*J‚d t|jƒd¡ d¡S)Nr)ÚAESCCMÚAESGCMÚChaCha20Poly1305schacha20-poly1305z aes-{}-ccméÚasciiz aes-{}-gcm) Ú+cryptography.hazmat.primitives.ciphers.aeadrrrÚ isinstanceÚformatÚlenÚ_keyÚencode)Úcipherrrr©rúK/usr/lib/python3/dist-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name s  rc Csr|j |¡}| ||jjk¡|j ¡}|j ||jj¡}|j |||jj|jj|jjt |t kƒ¡} | | dk¡|j  |t |ƒ¡} | | dk¡|j  ||jjt |ƒ|jj¡} | | dk¡|tkrx|j  ||jjt |ƒ|¡} | | dk¡n| d¡r‘|j  ||jj||jj¡} | | dk¡|j |¡} |j |¡} |j ||jj|jj| | t |t kƒ¡} | | dk¡|S)Nrs-ccm)Ú_libÚEVP_get_cipherbynameÚopenssl_assertÚ_ffiÚNULLÚEVP_CIPHER_CTX_newÚgcÚEVP_CIPHER_CTX_freeÚEVP_CipherInit_exÚintÚ_ENCRYPTÚEVP_CIPHER_CTX_set_key_lengthr ÚEVP_CIPHER_CTX_ctrlÚEVP_CTRL_AEAD_SET_IVLENÚ_DECRYPTÚEVP_CTRL_AEAD_SET_TAGÚendswithÚ from_buffer) ÚbackendÚ cipher_nameÚkeyÚnonceÚtagÚtag_lenÚ operationÚ evp_cipherÚctxÚresÚ nonce_ptrÚkey_ptrrrrÚ _aead_setupsX   úüÿ ÿ   úr1cCs:|j d¡}|j ||jj||jj|¡}| |dk¡dS©Núint *r)rÚnewrÚEVP_CipherUpdaterr)r%r-Údata_lenÚintptrr.rrrÚ _set_lengthMó ÿr8cCs:|j d¡}|j ||jj||t|ƒ¡}| |dk¡dSr2)rr4rr5rr r)r%r-Úassociated_dataÚoutlenr.rrrÚ _process_aadUr9r<cCs^|j d¡}|j dt|ƒ¡}|j ||||t|ƒ¡}| |dk¡|j ||d¡dd…S)Nr3úunsigned char[]r)rr4r rr5rÚbuffer)r%r-Údatar;Úbufr.rrrÚ _process_data]s rAcCsêddlm}t|ƒ}t|||j|d|tƒ}t||ƒr"t||t|ƒƒt |||ƒt |||ƒ} |j   d¡} |j  ||j j| ¡} | | dk¡| | ddk¡|j   d|¡} |j  ||j j|| ¡} | | dk¡|j  | ¡dd…} | | S)Nr©rr3r=)r rrr1r rr r8r r<rArr4rÚEVP_CipherFinal_exrrrÚEVP_CTRL_AEAD_GET_TAGr>)r%rr(r?r:Ú tag_lengthrr&r-Úprocessed_datar;r.Útag_bufr)rrrÚ_encryptes( ÿ     ÿrHcCs2ddlm}t|ƒ|krt‚|| d…}|d| …}t|ƒ}t|||j|||tƒ} t||ƒr8t || t|ƒƒt || |ƒt||ƒrw|j   d¡} |j   dt|ƒ¡} |j  | | | |t|ƒ¡} | dkrh| ¡t‚|j  | | d¡dd…} | St|| |ƒ} |j   d¡} |j  | |j j| ¡} | dkr—| ¡t‚| S)NrrBr3r=r)r rr rrr1r r!r r8r<rr4rr5Ú_consume_errorsr>rArCr)r%rr(r?r:rErr)r&r-r;r@r.rFrrrÚ_decrypts8  ÿ     ù rJN) Úcryptography.exceptionsrrr!rr1r8r<rArHrJrrrrÚs 0