o
    )%a                     @   s   d dl Z d dlmZ d dlmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlmZ G dd	 d	eZG d
d deZdS )    N)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)_get_backend)HMACBackend)constant_timehasheshmac)KeyDerivationFunctionc                
   @   sr   e Zd Z	ddejdedeje deje fddZ	ded	efd
dZ
ded	efddZdeded	dfddZdS )HKDFN	algorithmlengthsaltinfoc                 C   sh   t |}t|tstdtj|| _|d u rd| jj }nt	d| || _
|| _t| j|||| _d S )N.Backend object does not implement HMACBackend.    r   )r   
isinstancer   r   r   BACKEND_MISSING_INTERFACE
_algorithmdigest_sizer   _check_bytes_salt_backend
HKDFExpand_hkdf_expand)selfr   r   r   r   backend r   I/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/hkdf.py__init__   s   
zHKDF.__init__key_materialreturnc                 C   s(   t j| j| j| jd}|| | S )Nr   )r   HMACr   r   r   updatefinalize)r   r"   hr   r   r    _extract2   s   
zHKDF._extractc                 C   s   t d| | j| |S )Nr"   )r   _check_bytesliker   deriver)   r   r"   r   r   r    r+   7   s   zHKDF.deriveexpected_keyc                 C      t | ||std S Nr	   bytes_eqr+   r   r   r"   r-   r   r   r    verify;      zHKDF.verifyr/   )__name__
__module____qualname__r
   HashAlgorithminttypingOptionalbytesr!   r)   r+   r3   r   r   r   r    r      s    
r   c                   @   sh   e Zd Z	ddejdedeje fddZ	dedefd	d
Z
dedefddZdededdfddZdS )r   Nr   r   r   c                 C   sz   t |}t|tstdtj|| _|| _d|j }||kr%t	d
||| _|d u r/d}ntd| || _d| _d S )Nr      z*Can not derive keys larger than {} octets.    r   F)r   r   r   r   r   r   r   r   r   
ValueErrorformat_lengthr   r   _info_used)r   r   r   r   r   
max_lengthr   r   r    r!   A   s&   


zHKDFExpand.__init__r"   r#   c                 C   s   dg}d}| j jt|d  | jk rItj|| j | jd}||d  || j |t	|g |
|  |d7 }| j jt|d  | jk sd|d | j S )Nr>      r$   )r   r   lenrA   r   r%   r   r&   rB   r<   appendr'   join)r   r"   outputcounterr(   r   r   r    _expande   s   zHKDFExpand._expandc                 C   s&   t d| | jrtd| _| |S )Nr"   T)r   r*   rC   r   rL   r,   r   r   r    r+   s   s
   
zHKDFExpand.deriver-   c                 C   r.   r/   r0   r2   r   r   r    r3   {   r4   zHKDFExpand.verifyr/   )r5   r6   r7   r
   r8   r9   r:   r;   r<   r!   rL   r+   r3   r   r   r   r    r   @   s    
$r   )r:   cryptographyr   cryptography.exceptionsr   r   r   r   cryptography.hazmat.backendsr   'cryptography.hazmat.backends.interfacesr   cryptography.hazmat.primitivesr	   r
   r   "cryptography.hazmat.primitives.kdfr   r   r   r   r   r   r    <module>   s   +