3 l_@sddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZddlmZmZddlmZejeGd d d eZejeGd d d eZdS) )absolute_importdivisionprint_functionN)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons) _get_backend) HMACBackend) constant_timehmac)KeyDerivationFunctionc@s.eZdZd ddZddZddZdd ZdS) HKDFNcCsht|}t|tstdtj||_|dkr:d|jj}n tj d|||_ ||_ t |j||||_ dS)Nz.Backend object does not implement HMACBackend.salt)r isinstancer rr BACKEND_MISSING_INTERFACE _algorithm digest_sizer _check_bytes_salt_backend HKDFExpand _hkdf_expand)self algorithmlengthrinfobackendr /usr/lib64/python3.6/hkdf.py__init__s  z HKDF.__init__cCs(tj|j|j|jd}|j||jS)N)r)r HMACrrrupdatefinalize)r key_materialhr r r!_extract-s z HKDF._extractcCstjd||jj|j|S)Nr&)r_check_byteslikerderiver()rr&r r r!r*2s z HKDF.derivecCstj|j||stdS)N)r bytes_eqr*r)rr& expected_keyr r r!verify6sz HKDF.verify)N)__name__ __module__ __qualname__r"r(r*r-r r r r!rs rc@s.eZdZd ddZddZddZdd ZdS) rNcCszt|}t|tstdtj||_||_d|j}||krJt dj |||_ |dkr^d}n t j d|||_d|_dS)Nz.Backend object does not implement HMACBackend.z*Can not derive keys larger than {} octets.rF)r rr rr rrrr ValueErrorformat_lengthrr_info_used)rrrrrZ max_lengthr r r!r"=s"    zHKDFExpand.__init__cCsdg}d}xr|jjt|d|jkr|tj||j|jd}|j|d|j|j|jt j ||j |j |d7}q Wdj |d|jS)Nr2)r)rrlenr5r r#rr$r6sixZint2byteappendr%join)rr&outputZcounterr'r r r!_expand[s  zHKDFExpand._expandcCs&tjd||jrtd|_|j|S)Nr&T)rr)r7rr?)rr&r r r!r*is  zHKDFExpand.derivecCstj|j||stdS)N)r r+r*r)rr&r,r r r!r-qszHKDFExpand.verify)N)r.r/r0r"r?r*r-r r r r!r;s r)Z __future__rrrr;Z cryptographyrZcryptography.exceptionsrrrr Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr Zcryptography.hazmat.primitivesr r Z"cryptography.hazmat.primitives.kdfrZregister_interfaceobjectrrr r r r!s    $