3 lá˜_ã@s¬ddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZddlmZmZddlmZejeƒGd d „d eƒƒZejeƒGd d „d eƒƒZdS) é)Úabsolute_importÚdivisionÚprint_functionN)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú _get_backend)Ú HMACBackend)Ú constant_timeÚhmac)ÚKeyDerivationFunctionc@s.eZdZd dd„Zdd„Zdd„Zdd „ZdS) ÚHKDFNcCsht|ƒ}t|tƒstdtjƒ‚||_|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Ú algorithmÚlengthrÚinfoÚbackend©r ú/usr/lib64/python3.6/hkdf.pyÚ__init__s  z HKDF.__init__cCs(tj|j|j|jd�}|j|ƒ|jƒS)N)r)r ÚHMACrrrÚupdateÚfinalize)rÚ key_materialÚhr r r!Ú_extract-s z HKDF._extractcCstjd|ƒ|jj|j|ƒƒS)Nr&)rÚ_check_byteslikerÚderiver()rr&r r r!r*2s z HKDF.derivecCstj|j|ƒ|ƒst‚dS)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 dd„Zdd„Zdd„Zdd „ZdS) rNcCszt|ƒ}t|tƒstdtjƒ‚||_||_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Ú ValueErrorÚformatÚ_lengthrrÚ_infoÚ_used)rrrrrZ max_lengthr r r!r"=s"    zHKDFExpand.__init__cCs’dg}d}xr|jjt|ƒd|jkr|tj||j|jd�}|j|dƒ|j|jƒ|jt j |ƒƒ|j |j ƒƒ|d7}q Wdj |ƒd|j…S)Nr2é)réÿÿÿÿ)rrÚlenr5r r#rr$r6ÚsixZint2byteÚappendr%Újoin)rr&ÚoutputZcounterr'r r r!Ú_expand[s  zHKDFExpand._expandcCs&tjd|ƒ|jrt‚d|_|j|ƒS)Nr&T)rr)r7rr?)rr&r r r!r*is  zHKDFExpand.derivecCstj|j|ƒ|ƒst‚dS)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_interfaceÚobjectrrr r r r!Ús    $