a ¹aeã@sPddlmZdZdZdd„Zdd„Zdd„Zd d „Zd d „Zd d„Z dd„Z dS)é)Ú InvalidTagécCsšddlm}m}m}m}t||ƒr&dSt||ƒrJd t|jƒd¡  d¡St||ƒrnd t|jƒd¡  d¡St||ƒs|J‚d t|jƒd¡  d¡SdS) Nr)ÚAESCCMÚAESGCMÚAESOCB3ÚChaCha20Poly1305schacha20-poly1305z aes-{}-ccméÚasciiz aes-{}-ocbz aes-{}-gcm) Ú+cryptography.hazmat.primitives.ciphers.aeadrrrrÚ isinstanceÚformatÚlenÚ_keyÚencode)Úcipherrrrr©rúO/usr/lib64/python3.9/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name s   rc Cst|j |¡}| ||jjk¡|j ¡}|j ||jj¡}|j |||jj|jj|jjt |t kƒ¡} | | dk¡|j  |t |ƒ¡} | | dk¡|j  ||jjt |ƒ|jj¡} | | dk¡|tkrð|j  ||jjt |ƒ|¡} | | dk¡n4| d¡r$|j  ||jj||jj¡} | | dk¡|j |¡} |j |¡} |j ||jj|jj| | t |t kƒ¡} | | dk¡|S)Nrs-ccm)Ú_libZEVP_get_cipherbynameÚopenssl_assertÚ_ffiÚNULLZEVP_CIPHER_CTX_newÚgcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exÚintÚ_ENCRYPTZEVP_CIPHER_CTX_set_key_lengthr ÚEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENÚ_DECRYPTZEVP_CTRL_AEAD_SET_TAGÚendswithZ from_buffer) ÚbackendÚ cipher_nameÚkeyÚnonceÚtagZtag_lenZ operationZ evp_cipherÚctxÚresZ nonce_ptrZkey_ptrrrrÚ _aead_setup sX   úüÿ ÿ   úr%cCs:|j d¡}|j ||jj||jj|¡}| |dk¡dS©Núint *r)rÚnewrÚEVP_CipherUpdaterr)rr#Zdata_lenZintptrr$rrrÚ _set_lengthPs  ÿr*cCs:|j d¡}|j ||jj||t|ƒ¡}| |dk¡dSr&)rr(rr)rr r)rr#Úassociated_dataÚoutlenr$rrrÚ _process_aadXs  ÿr-cCs^|j d¡}|j dt|ƒ¡}|j ||||t|ƒ¡}| |dk¡|j ||d¡dd…S)Nr'úunsigned char[]r)rr(r rr)rÚbuffer)rr#Údatar,Úbufr$rrrÚ _process_data`s  r2cCsddlm}t|ƒ}t|||j|d|tƒ}t||ƒrDt||t|ƒƒt |||ƒt |||ƒ} |j   d¡} |j   dd¡} |j  || | ¡} | | dk¡| |j  | | d¡dd…7} |j   d|¡} |j  ||j j|| ¡} | | dk¡|j  | ¡dd…}| |S)Nr©rr'r.é)r rrr%rrr r*r r-r2rr(rÚEVP_CipherFinal_exrr/rZEVP_CTRL_AEAD_GET_TAG)rrr!r0r+Ú tag_lengthrrr#Úprocessed_datar,r1r$Ztag_bufr"rrrÚ_encrypths* ÿ     ÿr8cCsZddlm}t|ƒ|krt‚|| d…}|d| …}t|ƒ}t|||j|||tƒ} t||ƒrpt || t|ƒƒt || |ƒt||ƒrì|j   d¡} |j   dt|ƒ¡} |j  | | | |t|ƒ¡} | dkrÐ| ¡t‚|j  | | d¡dd…} njt|| |ƒ} |j   d¡} |j   dd¡} |j  | | | ¡} | |j  | | d¡dd…7} | dkrV| ¡t‚| S)Nrr3r'r.rr4)r rr rrr%rrr r*r-rr(rr)Z_consume_errorsr/r2r5)rrr!r0r+r6rr"rr#r,r1r$r7rrrÚ_decryptˆs:  ÿ       r9N) Zcryptography.exceptionsrrrrr%r*r-r2r8r9rrrrÚs 0