3 L] @sddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZmZddlmZejeGdd d eZejeGd d d eZdS) )absolute_importdivisionprint_functionN)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) HMACBackend) constant_timehmac)KeyDerivationFunctionc@s,eZdZddZddZddZddZd S) HKDFcCs`t|tstdtj||_|dkr2d|jj}n tjd|||_ ||_ t |j||||_ dS)Nz.Backend object does not implement HMACBackend.salt) isinstancer rr BACKEND_MISSING_INTERFACE _algorithm digest_sizer _check_bytes_salt_backend HKDFExpand _hkdf_expand)self algorithmlengthrinfobackendrQ/tmp/pip-install-wfra5znf/cryptography/cryptography/hazmat/primitives/kdf/hkdf.py__init__s  z HKDF.__init__cCs(tj|j|j|jd}|j||jS)N)r)r HMACrrrupdatefinalize)r key_materialhrrr _extract(s z HKDF._extractcCstjd||jj|j|S)Nr%)r_check_byteslikerderiver')rr%rrr r)-s z HKDF.derivecCstj|j||stdS)N)r bytes_eqr)r)rr% expected_keyrrr verify1sz HKDF.verifyN)__name__ __module__ __qualname__r!r'r)r,rrrr rsrc@s,eZdZddZddZddZddZd S) rcCsrt|tstdtj||_||_d|j}||krBtdj |||_ |dkrVd}n t j d|||_ d|_dS)Nz.Backend object does not implement HMACBackend.z*Can not derive keys larger than {} octets.rF)rr rr rrrr ValueErrorformat_lengthrr_info_used)rrrrr max_lengthrrr r!8s"   zHKDFExpand.__init__cCsdg}d}xr|jjt|d|jkr|tj||j|jd}|j|d|j|j|jt j ||j |j |d7}q Wdj |d|jS)Nr1)r)rrlenr4r r"rr#r5sixint2byteappendr$join)rr%outputcounterr&rrr _expandVs  zHKDFExpand._expandcCs&tjd||jrtd|_|j|S)Nr%T)rr(r6rrA)rr%rrr r)ds  zHKDFExpand.derivecCstj|j||stdS)N)r r*r)r)rr%r+rrr r,lszHKDFExpand.verifyN)r-r.r/r!rAr)r,rrrr r6sr) __future__rrrr;Z cryptographyrZcryptography.exceptionsrrrr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesr r Z"cryptography.hazmat.primitives.kdfr Zregister_interfaceobjectrrrrrr s   #