3 l�_� � @ s� d dl mZmZmZ d dlZd dlmZ d dlmZm Z m Z mZ d dlm Z d dlmZ d dlmZ d dlmZmZmZ d d lmZ d d� Zdd � Zdd� Zeje�G dd� de��Zeje�G dd� de��ZdS )� )�absolute_import�division�print_functionN)�utils)�AlreadyFinalized� InvalidKey�UnsupportedAlgorithm�_Reasons)�_get_backend)�HMACBackend)�HashBackend)� constant_time�hashes�hmac)�KeyDerivationFunctionc C s t jd| �S )Nz>I)�struct�pack)�n� r �!/usr/lib64/python3.6/concatkdf.py� _int_to_u32be s r c C s8 | j d }||kr tdj|���|d k r4tjd|� d S )N� � � z(Can not derive keys larger than {} bits.� otherinfol l �� )Zdigest_size� ValueError�formatr �_check_bytes)� algorithm�lengthr Z max_lengthr r r �_common_args_checks s r c C s� t jd| � dg}d}d}xZ||krt|� }|jt|�� |j| � |j|� |j|j� � |t|d �7 }|d7 }qW dj|�d |� S )N�key_material� r r �����)r Z_check_byteslike�updater �append�finalize�len�join)r! r Zauxfnr �outputZoutlenZcounter�hr r r �_concatkdf_derive% s r+ c @ s. e Zd Zd dd�Zdd� Zdd� Zdd � ZdS )� ConcatKDFHashNc C s\ t |�}t|||� || _|| _|| _| jd kr6d| _t|t�sLtdtj ��|| _ d| _d S )Nr" z.Backend object does not implement HashBackend.F)r r � _algorithm�_length� _otherinfo� isinstancer r r �BACKEND_MISSING_INTERFACE�_backend�_used)�selfr r r �backendr r r �__init__9 s zConcatKDFHash.__init__c C s t j| j| j�S )N)r ZHashr- r2 )r4 r r r �_hashK s zConcatKDFHash._hashc C s$ | j r t�d| _ t|| j| j| j�S )NT)r3 r r+ r. r7 r/ )r4 r! r r r �deriveN s zConcatKDFHash.derivec C s t j| j|�|�st�d S )N)r �bytes_eqr8 r )r4 r! �expected_keyr r r �verifyV s zConcatKDFHash.verify)N)�__name__� __module__�__qualname__r6 r7 r8 r; r r r r r, 7 s r, c @ s. e Zd Zd dd�Zdd� Zdd� Zdd � ZdS )� ConcatKDFHMACNc C s� t |�}t|||� || _|| _|| _| jd kr6d| _|d krJd|j }ntjd|� || _t |t �srtdtj ��|| _d| _d S )Nr" � �saltz.Backend object does not implement HMACBackend.F)r r r- r. r/ Z block_sizer r �_saltr0 r r r r1 r2 r3 )r4 r r rA r r5 r r r r6 ] s" zConcatKDFHMAC.__init__c C s t j| j| j| j�S )N)r ZHMACrB r- r2 )r4 r r r �_hmacv s zConcatKDFHMAC._hmacc C s$ | j r t�d| _ t|| j| j| j�S )NT)r3 r r+ r. rC r/ )r4 r! r r r r8 y s zConcatKDFHMAC.derivec C s t j| j|�|�st�d S )N)r r9 r8 r )r4 r! r: r r r r; � s zConcatKDFHMAC.verify)N)r<