U q`@sddlZddlmZddlmZmZmZmZddlm Z ddl m Z ddl m Z mZmZddlmZGdd d eZGd d d eZdS) N)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend) constant_timehasheshmac)KeyDerivationFunctionc@sbeZdZd ejeejeejedddZ eedddZ eeddd Z eedd d d Z dS)HKDFN) algorithmlengthsaltinfocCsht|}t|tstdtj||_|dkr:d|jj}n t d|||_ ||_ t |j||||_ dS)N.Backend object does not implement HMACBackend.r)r isinstancerrrBACKEND_MISSING_INTERFACE _algorithm digest_sizer _check_bytes_salt_backend HKDFExpand _hkdf_expand)selfrrrrbackendrN/tmp/pip-target-nv4zd3e_/lib/python/cryptography/hazmat/primitives/kdf/hkdf.py__init__s  z HKDF.__init__ key_materialreturncCs(tj|j|j|jd}|||S)Nr)r HMACrrrupdatefinalize)rr#hrrr _extract2s z HKDF._extractcCstd||j||S)Nr#)r_check_byteslikerderiver*rr#rrr r,7s z HKDF.deriver# expected_keyr$cCst|||stdSNr Zbytes_eqr,rrr#r/rrr verify;sz HKDF.verify)N) __name__ __module__ __qualname__r HashAlgorithminttypingOptionalbytesr!r*r,r3rrrr r s r c@sZeZdZd ejeejedddZ eedddZ eeddd Z eedd d d Z dS)rN)rrrcCszt|}t|tstdtj||_||_d|j}||krJt d |||_ |dkr^d}n t d|||_d|_dS)Nrz*Can not derive keys larger than {} octets.rF)rrrrrrrrr ValueErrorformat_lengthrr_info_used)rrrrr max_lengthrrr r!As&   zHKDFExpand.__init__r"cCsdg}d}|jjt|d|jkrztj||j|jd}||d||j|t |g| | |d7}q d |d|jS)Nr=r%) rrlenr@r r&rr'rAr;appendr(join)rr#outputcounterr)rrr _expandes  zHKDFExpand._expandcCs&td||jrtd|_||S)Nr#T)rr+rBrrKr-rrr r,ss  zHKDFExpand.deriver.cCst|||stdSr0r1r2rrr r3{szHKDFExpand.verify)N) r4r5r6r r7r8r9r:r;r!rKr,r3rrrr r@s $r)r9Z cryptographyrZcryptography.exceptionsrrrrZcryptography.hazmat.backendsrZ'cryptography.hazmat.backends.interfacesrZcryptography.hazmat.primitivesr r r Z"cryptography.hazmat.primitives.kdfr r rrrrr s    +