U
    e]                     @   s   d dl mZmZmZ 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mZ d dlmZ eeG dd	 d	eZeeG d
d deZdS )    )absolute_importdivisionprint_functionN)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)HMACBackend)constant_timehmac)KeyDerivationFunctionc                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
HKDFc                 C   s`   t |tstdtj|| _|d kr2d| jj }ntd| || _	|| _
t| j|||| _d S )N.Backend object does not implement HMACBackend.    salt)
isinstancer
   r   r	   BACKEND_MISSING_INTERFACE
_algorithmdigest_sizer   _check_bytes_salt_backend
HKDFExpand_hkdf_expand)self	algorithmlengthr   infobackend r    I/usr/lib/python3/dist-packages/cryptography/hazmat/primitives/kdf/hkdf.py__init__   s    
zHKDF.__init__c                 C   s(   t j| j| j| jd}|| | S )Nr   )r   HMACr   r   r   updatefinalize)r   key_material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    zHKDF.derivec                 C   s   t | ||std S Nr   Zbytes_eqr+   r   r   r'   Zexpected_keyr    r    r!   verify1   s    zHKDF.verifyN)__name__
__module____qualname__r"   r)   r+   r0   r    r    r    r!   r      s   r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
r   c                 C   sr   t |tstdtj|| _|| _d|j }||krBtd	||| _
|d krVd}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   
ValueErrorformat_lengthr   r   _info_used)r   r   r   r   r   Z
max_lengthr    r    r!   r"   8   s(    

zHKDFExpand.__init__c                 C   s   dg}d}| j jt|d  | jk rztj|| j | jd}||d  || j |t	
| ||  |d7 }q
d|d | j S )Nr5      r#   )r   r   lenr8   r   r$   r   r%   r9   sixZint2byteappendr&   join)r   r'   outputZcounterr(   r    r    r!   _expandV   s    
zHKDFExpand._expandc                 C   s&   t d| | jrtd| _| |S )Nr'   T)r   r*   r:   r   rB   r,   r    r    r!   r+   d   s
    zHKDFExpand.derivec                 C   s   t | ||std S r-   r.   r/   r    r    r!   r0   l   s    zHKDFExpand.verifyN)r1   r2   r3   r"   rB   r+   r0   r    r    r    r!   r   6   s   r   )Z
__future__r   r   r   r>   Zcryptographyr   Zcryptography.exceptionsr   r   r   r	   Z'cryptography.hazmat.backends.interfacesr
   Zcryptography.hazmat.primitivesr   r   Z"cryptography.hazmat.primitives.kdfr   Zregister_interfaceobjectr   r   r    r    r    r!   <module>   s   #