a ¹a× ã @ sh d dl Z d dlmZ d dlmZmZ d dlmZmZm Z d dl mZ G dd„ deƒZG dd „ d eƒZ dS ) é N)Úutils)ÚAlreadyFinalizedÚ InvalidKey)Ú constant_timeÚhashesÚhmac)ÚKeyDerivationFunctionc @ sf e Zd Zd ejeeje eje ej dœdd„Z eedœdd„Zeedœdd „Zeedd œdd„Z dS )ÚHKDFN)Ú algorithmÚlengthÚsaltÚinfoÚbackendc C sB || _ |d u rd| j j }nt d|¡ || _t| j ||ƒ| _d S )Nó r )Ú _algorithmÚdigest_sizer Ú_check_bytesÚ_saltÚ HKDFExpandÚ_hkdf_expand)Úselfr r r r r © r úM/usr/lib64/python3.9/site-packages/cryptography/hazmat/primitives/kdf/hkdf.pyÚ__init__ s z HKDF.__init__©Úkey_materialÚreturnc C s" t | j| j¡}| |¡ | ¡ S ©N)r ÚHMACr r ÚupdateÚfinalize)r r Úhr r r Ú_extract% s z HKDF._extractc C s t d|¡ | j | |¡¡S )Nr )r Ú_check_bytesliker Úderiver" ©r r r r r r$ * s zHKDF.derive©r Úexpected_keyr c C s t | |¡|¡st‚d S r ©r Zbytes_eqr$ r ©r r r' r r r Úverify. s zHKDF.verify)N)Ú__name__Ú __module__Ú__qualname__r Ú HashAlgorithmÚintÚtypingÚOptionalÚbytesÚAnyr r" r$ r* r r r r r s úúr c @ s^ e Zd Zd ejeeje ej dœdd„Z eedœdd„Zeedœdd „Zeedd œdd„Z dS )r N)r r r r c C sV || _ d|j }||kr&td |¡ƒ‚|| _|d u r:d}nt d|¡ || _d| _d S )Néÿ z)Cannot derive keys larger than {} octets.ó r F) r r Ú ValueErrorÚformatÚ_lengthr r Ú_infoÚ_used)r r r r r Z max_lengthr r r r 4 s ÿzHKDFExpand.__init__r c C sˆ dg}d}| j jt|ƒd | jk rtt || j ¡}| |d ¡ | | j¡ | t|gƒ¡ | | ¡ ¡ |d7 }q d |¡d | j… S )Nr5 é éÿÿÿÿ)r r Úlenr8 r r r r9 r2 Úappendr Újoin)r r ÚoutputZcounterr! r r r Ú_expandO s zHKDFExpand._expandc C s&