a b @sddlZddlmZejrVddlmZddlmZmZm Z m Z m Z ej eee e e fZ dZdZdeddd Zed d d d Zd eeeejeeedddZd eddddZd eddddZd eedddZd deeejeeedddZd deeejeeedddZdS)N) InvalidTag)BackendAESCCMAESGCMAESOCB3AESSIVChaCha20Poly1305 _AEAD_TYPES)cipherreturncCsddlm}m}m}m}m}t||r*dSt||rPdt|jdd dSt||rvdt|jdd dSt||rdt|jdd d  dSt||sJdt|jdd  dSdS) Nrrschacha20-poly1305zaes-z-ccmasciiz-ocbz-sivz-gcm) +cryptography.hazmat.primitives.ciphers.aeadrrrrr isinstancelen_keyencode)r rrrrr rP/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/backends/openssl/aead.py_aead_cipher_names     rr) cipher_namebackendcCsj|drH|j|jj||jj}|||jjk|j||jj}n|j|}|||jjk|S)Ns-siv) endswith_libZEVP_CIPHER_fetch_ffiNULLopenssl_assertgcZEVP_CIPHER_freeZEVP_get_cipherbyname)rr evp_cipherrrr _evp_cipher2s  r")rrkeynoncetagtag_len operationc Cslt||}|j}|j||jj}|j|||jj|jj|jjt|t k} | | dk|j |t |} | | dk|j ||jjt ||jj} | | dk|tkr|dusJ|j ||jjt ||} | | dkn4|dr|j ||jj||jj} | | dk|j|} |j|} |j||jj|jj| | t|t k} | | dk|S)Nrs-ccm)r"rZEVP_CIPHER_CTX_newrr ZEVP_CIPHER_CTX_freeZEVP_CipherInit_exrint_ENCRYPTrZEVP_CIPHER_CTX_set_key_lengthrEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLEN_DECRYPTZEVP_CTRL_AEAD_SET_TAGr from_buffer) rrr#r$r%r&r'r!ctxresZ nonce_ptrZkey_ptrrrr _aead_setupBsX        r/)rdata_lenr cCs:|jd}|j||jj||jj|}||dkdSNint *r)rnewrEVP_CipherUpdaterr)rr-r0Zintptrr.rrr _set_lengthzs  r5)rassociated_datar cCs:|jd}|j||jj||t|}||dkdSr1)rr3rr4rrr)rr-r6outlenr.rrr _process_aads  r8)rdatar cCsd|jd}|jdt|}|j||||t|}|dkrJ|t|j||dddS)Nr2unsigned char[]r)rr3rrr4_consume_errorsrbuffer)rr-r9r7bufr.rrr _process_datas r>)rr r$r9r6 tag_lengthr cCs8ddlm}m}t|}t|||j|d|t} t||rHt|| t ||D]} t || | qLt || |} |j d} |j dd} |j| | | }||dk| |j | | ddd7} |j d|}|j| |jj||}||dk|j |dd}t||r,|t |dk|| S| |SdS)Nrrrr2r:)rrrrr/rr)rr5rr8r>rr3rEVP_CipherFinal_exrr<r*ZEVP_CTRL_AEAD_GET_TAG)rr r$r9r6r?rrrr-adprocessed_datar7r=r.Ztag_bufr%rrr_encrypts2     rEcCsddlm}m}t||kr tt||rD|d|}||d}n|| d}|d| }t|} t|| |j|||t } t||rt || t||D]} t || | qt||r"|j d} |j dt|} |j| | | |t|}|dkr|t|j | | ddd}njt|| |}|j d} |j dd} |j| | | }||j | | ddd7}|dkr|t|S)Nrr@r2r:r rA)rrrrrrrr/rr+r5r8rr3rr4r;r<r>rB)rr r$r9r6r?rrr%rr-rCr7r=r.rDrrr_decryptsB          rF)typingZcryptography.exceptionsr TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.backendrrrrrrr Unionr r)r+bytesrr"Optionalr(r/r5r8r>ListrErFrrrrsL    8  0