a b; @s:ddlZddlZddlmZmZmZddlmZddlm Z ej rNddl m Z GdddejdZGd d d eejdZGd d d eejdZGd ddeejdZejdeje jddZGdddejeZeeje je jde je jfZGdddeZ GdddeZGdddeeZGdddeeZ dS)N)AlreadyFinalizedAlreadyUpdatedNotYetFinalized)CipherAlgorithm)modes)_CipherContextc@sNeZdZejeedddZejeeedddZejeddd Z d S) CipherContextdatareturncCsdS)zk Processes the provided bytes through the cipher and returns the results as bytes. Nselfr r r R/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/ciphers/base.pyupdateszCipherContext.updater bufr cCsdS)z Processes the provided bytes and writes the resulting data into the provided buffer. Returns the number of bytes written. Nr rr rr r r update_into szCipherContext.update_intor cCsdS)zM Returns the results of processing the final block as bytes. Nr rr r rfinalize'szCipherContext.finalizeN) __name__ __module__ __qualname__abcabstractmethodbytesrintrrr r r rrs r) metaclassc@s"eZdZejeddddZdS)AEADCipherContextNr cCsdS)z3 Authenticates the provided bytes. Nr r r r rauthenticate_additional_data/sz.AEADCipherContext.authenticate_additional_data)rrrrrrr!r r r rr .sr c@s"eZdZejeedddZdS)AEADDecryptionContexttagr cCsdS)z Returns the results of processing the final block as bytes and allows delayed passing of the authentication tag. Nr )rr$r r rfinalize_with_tag7sz'AEADDecryptionContext.finalize_with_tagN)rrrrrrr%r r r rr"6sr"c@s eZdZejedddZdS)AEADEncryptionContextrcCsdS)zb Returns tag bytes. This is only available after encryption is finalized. Nr rr r rr$@szAEADEncryptionContext.tagN)rrrrabstractpropertyrr$r r r rr&?sr&ModeT)bound covariantc@seZdZdeeejdddZejde dddZ ejd e dd dZ d dZ ejde dd d Z ejd e ddd Z dd Z deeje e e fdddZdS)CipherN) algorithmmodebackendcCsDt|tstd|dur4t|tjs*J||||_||_dS)Nz&Expected interface of CipherAlgorithm.) isinstancer TypeErrorrr(Zvalidate_for_algorithmr,r-)rr,r-r.r r r__init__Ns  zCipher.__init__z'Cipher[modes.ModeWithAuthenticationTag])rr cCsdSNr rr r r encryptoraszCipher.encryptor _CIPHER_TYPEcCsdSr2r rr r rr3gscCsLt|jtjr"|jjdur"tdddlm}||j |j}|j |ddS)Nz0Authentication tag must be None when encrypting.rr.Tencrypt) r/r-rModeWithAuthenticationTagr$ ValueError,cryptography.hazmat.backends.openssl.backendr.Zcreate_symmetric_encryption_ctxr, _wrap_ctxrr.ctxr r rr3ms  cCsdSr2r rr r r decryptorzszCipher.decryptorcCsdSr2r rr r rr>scCs*ddlm}||j|j}|j|ddS)Nrr5Fr6)r:r.Zcreate_symmetric_decryption_ctxr,r-r;r<r r rr>s  _BackendCipherContext)r=r7r cCs0t|jtjr$|rt|St|Snt|SdSr2)r/r-rr8_AEADEncryptionContext_AEADDecryptionContextr)rr=r7r r rr;s  zCipher._wrap_ctx)N)rrrrr(typingAnyr1overloadr&r3rr"r>boolUnionr;r r r rr+Ms:   r+c@s\eZdZUejded<dddddZeeddd Zeee d d d Z ed ddZ dS)rr?_ctxNr=r cCs ||_dSr2)rGrr=r r rr1sz_CipherContext.__init__r cCs|jdurtd|j|SNContext was already finalized.)rGrrr r r rrs z_CipherContext.updatercCs |jdurtd|j||SrJ)rGrrrr r rrs z_CipherContext.update_intorcCs&|jdurtd|j}d|_|SrJ)rGrrr r r rrs   z_CipherContext.finalize) rrrrBOptional__annotations__r1rrrrrr r r rrs rc@seZdZUejded<ejeed<dddddZeddd d Z eed d d Z eeedddZ edddZ edd ddZ dS)_AEADCipherContextr?rG_tagNrHcCs"||_d|_d|_d|_d|_dS)NrF)rG_bytes_processed_aad_bytes_processedrO_updatedrIr r rr1s z_AEADCipherContext.__init__) data_sizer cCsV|jdurtdd|_|j|7_|j|jjjkrRtd|jjj|jjjdS)NrKTz+{} has a maximum encrypted byte limit of {}) rGrrRrP_modeZ_MAX_ENCRYPTED_BYTESr9formatname)rrSr r r _check_limits z_AEADCipherContext._check_limitr cCs(|t||jdusJ|j|Sr2)rWlenrGrr r r rrsz_AEADCipherContext.updatercCs*|t||jdusJ|j||Sr2)rWrXrGrrr r rrsz_AEADCipherContext.update_intorcCs0|jdurtd|j}|jj|_d|_|SrJ)rGrrr$rOr r r rrs    z_AEADCipherContext.finalizecCsn|jdurtd|jr td|jt|7_|j|jjjkr^td |jjj |jjj|j |dS)NrKz'Update has been called on this context.z%{} has a maximum AAD byte limit of {}) rGrrRrrQrXrTZ_MAX_AAD_BYTESr9rUrVr!r r r rr!s z/_AEADCipherContext.authenticate_additional_data)rrrrBrLrMrr1rrWrrrr!r r r rrNs  rNc@seZdZeedddZdS)rAr#cCs2|jdurtd|j|}|jj|_d|_|SrJ)rGrr%r$rO)rr$r r r rr%s    z(_AEADDecryptionContext.finalize_with_tagN)rrrrr%r r r rrAsrAc@seZdZeedddZdS)r@rcCs&|jdurtd|jdus J|jS)Nz4You must finalize encryption before getting the tag.)rGrrOrr r rr$s  z_AEADEncryptionContext.tagN)rrrpropertyrr$r r r rr@sr@)!rrBZcryptography.exceptionsrrrZ/cryptography.hazmat.primitives._cipheralgorithmrZ&cryptography.hazmat.primitives.ciphersr TYPE_CHECKINGZ,cryptography.hazmat.backends.openssl.ciphersrr?ABCMetarr r"r&TypeVarrLr(Genericr+rFZ ModeWithNonceZ ModeWithTweakZECBZModeWithInitializationVectorr4rNrAr@r r r rs8     O <