a b@sddlZddlmZddlmZmZddlmZmZm Z ddl m Z e e dddZeje eje dd d d Ze e ejgejfe e d d dZGddde ZGddde ZdS)N)utils)AlreadyFinalized InvalidKey) constant_timehasheshmac)KeyDerivationFunction)nreturncCs|jdddS)Nbig)length byteorder)to_bytes)r rS/tmp/pip-target-98j97qn4/lib/python/cryptography/hazmat/primitives/kdf/concatkdf.py _int_to_u32besr) algorithmr otherinfor cCs8|jd}||kr td||dur4td|dS)Nlz'Cannot derive keys larger than {} bits.r) digest_size ValueErrorformatr _check_bytes)rr r max_lengthrrr_common_args_checkss r) key_materialr auxfnrr cCstd|dg}d}d}||krr|}|t||||||||t|d7}|d7}qd|d|S)Nrr)rZ_check_byteslikeupdaterappendfinalizelenjoin)rr rroutputZoutlencounterhrrr_concatkdf_derive#s    r(c@s^eZdZdejeejeej dddZ ej dddZ eedd d Z eedd d d ZdS) ConcatKDFHashN)rr rbackendcCs4t|||||_||_|dur$|nd|_d|_dS)NrF)r _algorithm_length _otherinfo_used)selfrr rr*rrr__init__;s  zConcatKDFHash.__init__r cCs t|jSN)rHashr+r/rrr_hashIszConcatKDFHash._hashrr cCs$|jr td|_t||j|j|jSNT)r.rr(r,r5r-r/rrrrderiveLs zConcatKDFHash.deriver expected_keyr cCst|||stdSr2rZbytes_eqr9rr/rr;rrrverifyTszConcatKDFHash.verify)N)__name__ __module__ __qualname__r HashAlgorithminttypingOptionalbytesAnyr0r3r5r9r>rrrrr):s r)c@sfeZdZdejeejeejeej dddZ e j dddZ eedd d Zeedd d d ZdS) ConcatKDFHMACN)rr saltrr*cCstt|||||_||_|dur$|nd|_|jdurDtd|j|durXd|j}n t d|||_ d|_ dS)Nrz{} is unsupported for ConcatKDFrIF) rr+r,r- block_size TypeErrorrnamerr_saltr.)r/rr rIrr*rrrr0Zs     zConcatKDFHMAC.__init__r1cCst|j|jSr2)rHMACrNr+r4rrr_hmacuszConcatKDFHMAC._hmacr6cCs$|jr td|_t||j|j|jSr7)r.rr(r,rPr-r8rrrr9xs zConcatKDFHMAC.deriver:cCst|||stdSr2r<r=rrrr>szConcatKDFHMAC.verify)N)r?r@rArrBrCrDrErFrGr0rrOrPr9r>rrrrrHYs rH)rDZ cryptographyrZcryptography.exceptionsrrZcryptography.hazmat.primitivesrrrZ"cryptography.hazmat.primitives.kdfrrCrFrrBrErCallableZ HashContextr(r)rHrrrrs$