a a@sddlZddlZddlmZddlmZmZddlmZm Z m Z ddl m Z e edddZe je ejedd d d Zee ejge jfeed d dZGddde ZGddde ZdS)N)utils)AlreadyFinalized InvalidKey) constant_timehasheshmac)KeyDerivationFunction)nreturncCs td|S)Nz>I)structpack)r r R/usr/lib64/python3.9/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py _int_to_u32besr) algorithmlength otherinfor cCs8|jd}||kr td||dur4td|dS)Nlz'Cannot derive keys larger than {} bits.r)Z digest_size ValueErrorformatr _check_bytes)rrrZ max_lengthr r r_common_args_checkss r) key_materialrauxfnrr cCstd|dg}d}d}||krr|}|t||||||||t|d7}|d7}qd|d|S)Nrr)rZ_check_byteslikeupdaterappendfinalizelenjoin)rrrroutputZoutlenZcounterhr r r_concatkdf_derive$s    r#c@s^eZdZdejeejeej dddZ ej dddZ eedd d Z eedd d d ZdS) ConcatKDFHashN)rrrbackendcCs4t|||||_||_|dur$|nd|_d|_dS)NrF)r _algorithm_length _otherinfo_used)selfrrrr%r r r__init__<s  zConcatKDFHash.__init__r cCs t|jSN)rHashr&r*r r r_hashJszConcatKDFHash._hashrr cCs$|jr td|_t||j|j|jSNT)r)rr#r'r0r(r*rr r rderiveMs zConcatKDFHash.deriver expected_keyr cCst|||stdSr-rZbytes_eqr4rr*rr6r r rverifyUszConcatKDFHash.verify)N)__name__ __module__ __qualname__r HashAlgorithminttypingOptionalbytesAnyr+r.r0r4r9r r r rr$;s r$c@sfeZdZdejeejeejeej dddZ e j dddZ eedd d Zeedd d d ZdS) ConcatKDFHMACN)rrsaltrr%cCstt|||||_||_|dur$|nd|_|jdurDtd|j|durXd|j}n t d|||_ d|_ dS)Nrz{} is unsupported for ConcatKDFrDF) rr&r'r(Z block_size TypeErrorrnamerr_saltr))r*rrrDrr%r r rr+[s     zConcatKDFHMAC.__init__r,cCst|j|jSr-)rHMACrHr&r/r r r_hmacvszConcatKDFHMAC._hmacr1cCs$|jr td|_t||j|j|jSr2)r)rr#r'rJr(r3r r rr4ys zConcatKDFHMAC.deriver5cCst|||stdSr-r7r8r r rr9szConcatKDFHMAC.verify)N)r:r;r<rr=r>r?r@rArBr+rrIrJr4r9r r r rrCZs rC)r r?Z cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrrrZ"cryptography.hazmat.primitives.kdfrr>rArr=r@rCallableZ HashContextr#r$rCr r r rs&