U §Ãq`àã@sèddlZddlZddlmZddlmZmZmZmZddl m Z ddl m Z ddl m Z ddlmZmZmZddlmZeed œd d „Zejeejed œd d„Zeeejgejfeedœdd„ZGdd„deƒZGdd„deƒZdS)éN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú _get_backend)Ú HMACBackend)Ú HashBackend)Ú constant_timeÚhashesÚhmac)ÚKeyDerivationFunction)ÚnÚreturncCs t d|¡S)Nz>I)ÚstructÚpack)r©rúS/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/primitives/kdf/concatkdf.pyÚ _int_to_u32besr©Ú algorithmÚlengthÚ otherinfocCs8|jd}||kr td |¡ƒ‚|dk r4t d|¡dS)Nlÿÿz(Can not derive keys larger than {} bits.r)Ú digest_sizeÚ ValueErrorÚformatrÚ _check_bytes)rrrÚ max_lengthrrrÚ_common_args_checkss ÿr)Ú key_materialrÚauxfnrrcCs„t d|¡dg}d}d}||krr|ƒ}| t|ƒ¡| |¡| |¡| | ¡¡|t|dƒ7}|d7}qd |¡d|…S)Nrórééÿÿÿÿ)rZ_check_byteslikeÚupdaterÚappendÚfinalizeÚlenÚjoin)rrr rÚoutputZoutlenÚcounterÚhrrrÚ_concatkdf_derive)s    r,c@sZeZdZdejeejedœdd„Z ej dœdd„Z eedœd d „Z eedd œd d „Z dS)Ú ConcatKDFHashNrcCsXt|ƒ}t|||ƒ||_||_|dk r,|nd|_t|tƒsHtdtj ƒ‚||_ d|_ dS)Nr!z.Backend object does not implement HashBackend.F) rrÚ _algorithmÚ_lengthÚ _otherinfoÚ isinstancer rrÚBACKEND_MISSING_INTERFACEÚ_backendÚ_used)ÚselfrrrÚbackendrrrÚ__init__As  þzConcatKDFHash.__init__©rcCst |j|j¡S©N)r ÚHashr.r3©r5rrrÚ_hashWszConcatKDFHash._hash©rrcCs$|jr t‚d|_t||j|j|jƒS©NT)r4rr,r/r<r0©r5rrrrÚderiveZsÿzConcatKDFHash.derive©rÚ expected_keyrcCst | |¡|¡st‚dSr9©r Zbytes_eqr@r©r5rrBrrrÚverifybszConcatKDFHash.verify)N)Ú__name__Ú __module__Ú __qualname__r Ú HashAlgorithmÚintÚtypingÚOptionalÚbytesr7r:r<r@rErrrrr-@sûü r-c@sbeZdZdejeejeejedœdd„Z e j dœdd„Z eedœd d „Z eedd œd d „ZdS)Ú ConcatKDFHMACN)rrÚsaltrcCs˜t|ƒ}t|||ƒ||_||_|dk r,|nd|_|jdkrLtd |j¡ƒ‚|dkr`d|j}n t   d|¡||_ t |t ƒsˆtdtjƒ‚||_d|_dS)Nr!z{} is unsupported for ConcatKDFórOz.Backend object does not implement HMACBackend.F)rrr.r/r0Ú block_sizeÚ TypeErrorrÚnamerrÚ_saltr1rrrr2r3r4)r5rrrOrr6rrrr7hs(   ÿ   þzConcatKDFHMAC.__init__r8cCst |j|j|j¡Sr9)r ÚHMACrTr.r3r;rrrÚ_hmac‹szConcatKDFHMAC._hmacr=cCs$|jr t‚d|_t||j|j|jƒSr>)r4rr,r/rVr0r?rrrr@ŽsÿzConcatKDFHMAC.deriverAcCst | |¡|¡st‚dSr9rCrDrrrrE–szConcatKDFHMAC.verify)N)rFrGrHr rIrJrKrLrMr7r rUrVr@rErrrrrNgsúû #rN)rrKZ cryptographyrZcryptography.exceptionsrrrrZcryptography.hazmat.backendsrZ'cryptography.hazmat.backends.interfacesrr Zcryptography.hazmat.primitivesr r r Z"cryptography.hazmat.primitives.kdfr rJrMrrIrLrÚCallableZ HashContextr,r-rNrrrrÚs*     ý û '