o )%a @sddlZddlZddlmZddlmZmZmZmZddl m Z ddl m Z ddl m Z ddlmZmZmZddlmZd ed efd d Zd ejdedejefddZdededejgejfded ef ddZGdddeZGdddeZdS)N)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend) HashBackend) constant_timehasheshmac)KeyDerivationFunctionnreturncCs td|S)Nz>I)structpack)rrN/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/concatkdf.py _int_to_u32bes r algorithmlength otherinfocCs<|jd}||krtd||durtd|dSdS)Nlz(Can not derive keys larger than {} bits.r) digest_size ValueErrorformatr _check_bytes)rrr max_lengthrrr_common_args_checkss r key_materialauxfncCstd|dg}d}d}||kr<|}|t||||||||t|d7}|d7}||ksd|d|S)Nrr)r_check_byteslikeupdaterappendfinalizelenjoin)rrrroutputoutlencounterhrrr_concatkdf_derive)s    r-c@sfeZdZ ddejdedejefddZ dej fdd Z d edefd d Z d ed eddfddZ dS) ConcatKDFHashNrrrcCsXt|}t|||||_||_|dur|nd|_t|ts$tdtj ||_ d|_ dS)Nr z.Backend object does not implement HashBackend.F) rr _algorithm_length _otherinfo isinstancer rrBACKEND_MISSING_INTERFACE_backend_used)selfrrrbackendrrr__init__As   zConcatKDFHash.__init__rcCst|j|jSN)r Hashr/r4r6rrr_hashWszConcatKDFHash._hashrcC$|jrtd|_t||j|j|jSNT)r5rr-r0r<r1r6rrrrderiveZ zConcatKDFHash.derive expected_keycCt|||s tdSr9r bytes_eqr@rr6rrBrrrverifybzConcatKDFHash.verifyr9)__name__ __module__ __qualname__r HashAlgorithminttypingOptionalbytesr8r:r<r@rGrrrrr.@s r.c @speZdZ ddejdedejedejefddZ de j fd d Z d edefd d Z d ededdfddZdS) ConcatKDFHMACNrrsaltrcCst|}t|||||_||_|dur|nd|_|jdur&td|j|dur0d|j}nt d|||_ t |t sDtdtj||_d|_dS)Nr z{} is unsupported for ConcatKDFrRz.Backend object does not implement HMACBackend.F)rrr/r0r1 block_size TypeErrorrnamerr_saltr2rrrr3r4r5)r6rrrRrr7rrrr8hs(       zConcatKDFHMAC.__init__rcCst|j|j|jSr9)r HMACrWr/r4r;rrr_hmacszConcatKDFHMAC._hmacrcCr=r>)r5rr-r0rYr1r?rrrr@rAzConcatKDFHMAC.deriverBcCrCr9rDrFrrrrGrHzConcatKDFHMAC.verifyr9)rIrJrKr rLrMrNrOrPr8r rXrYr@rGrrrrrQgs #rQ)rrN cryptographyrcryptography.exceptionsrrrrcryptography.hazmat.backendsr'cryptography.hazmat.backends.interfacesrr cryptography.hazmat.primitivesr r r "cryptography.hazmat.primitives.kdfr rMrPrrLrOrCallable HashContextr-r.rQrrrrs<       '