o )%a@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 @sreZdZ ddejdedejedejefddZ ded efd d Z ded efd d Z deded dfddZ dS)HKDFN algorithmlengthsaltinfocCsht|}t|tstdtj||_|durd|jj}nt 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)selfrrrrbackendrI/usr/lib/python3/dist-packages/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.derive expected_keycCt|||s tdSNr bytes_eqr+rrr"r-rrr verify;z HKDF.verifyr/) __name__ __module__ __qualname__r HashAlgorithminttypingOptionalbytesr!r)r+r3rrrr r s r c@sheZdZ ddejdedejefddZ dedefd d Z dedefd d Z ded eddfddZ dS)rNrrrcCszt|}t|tstdtj||_||_d|j}||kr%t d |||_ |dur/d}nt 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"r#cCsdg}d}|jjt|d|jkrItj||j|jd}||d||j|t |g| | |d7}|jjt|d|jksd |d|jS)Nr>r$) rrlenrAr r%rr&rBr<appendr'join)rr"outputcounterr(rrr _expandes zHKDFExpand._expandcCs&td||jr td|_||S)Nr"T)rr*rCrrLr,rrr r+ss  zHKDFExpand.deriver-cCr.r/r0r2rrr r3{r4zHKDFExpand.verifyr/) r5r6r7r r8r9r:r;r<r!rLr+r3rrrr r@s $r)r: cryptographyrcryptography.exceptionsrrrrcryptography.hazmat.backendsr'cryptography.hazmat.backends.interfacesrcryptography.hazmat.primitivesr r r "cryptography.hazmat.primitives.kdfr r rrrrr s    +