3 l_ @ s d dl mZmZmZ d dlmZ d dlmZ d dlm Z d dl mZmZm Z mZ d dlmZ d dlmZ d dlmZmZmZ d d lmZ G d d deZG dd d eZe jeG dd deZdS ) )absolute_importdivisionprint_function)Enum)range)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons)_get_backend)HMACBackend) constant_timehasheshmac)KeyDerivationFunctionc @ s e Zd ZdZdS )ModeZctrN)__name__ __module____qualname__ZCounterMode r r /usr/lib64/python3.6/kbkdf.pyr s r c @ s e Zd ZdZdZdS )CounterLocationZbefore_fixedZafter_fixedN)r r r BeforeFixed AfterFixedr r r r r s r c @ s6 e Zd ZdddZdd Zdd Zdd Zd d ZdS ) KBKDFHMACNc C sJ t | } t| tstdtjt|tjs6tdtj| j |sLtdtjt|t s^tdt|tsptd|sx|r| rt d|d ks| j| rt d|d kr| d krt d|d k rt|t rtd |d krd }|d krd }tjd| tjd| || _|| _|| _|| _|| _|| _|| _|| _| | _d | _| | _d S )Nz.Backend object does not implement HMACBackend.z5Algorithm supplied is not a supported hash algorithm.z5Algorithm supplied is not a supported hmac algorithm.zmode must be of type Modez(location must be of type CounterLocationz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integer labelcontextF)r isinstancer r r ZBACKEND_MISSING_INTERFACEr Z HashAlgorithmZUNSUPPORTED_HASHZhmac_supportedr TypeErrorr ValueError_valid_byte_lengthintr _check_bytes _algorithm_mode_length_rlen_llen _location_label_context_backend_used_fixed_data)self algorithmmodeZlengthZrlenZllenlocationr r Zfixedbackendr r r __init__# sV zKBKDFHMAC.__init__c C sB t |tstdtjd|}dt| ko4dkn s>dS dS )Nzvalue must be of type int FT)r r# r r int_to_byteslen)r0 valueZ value_binr r r r" k s zKBKDFHMAC._valid_byte_lengthc C s | j r ttjd| d| _ | j | jj }dg}tjd| j}|t dt |d d krdtdxtd|d D ]n}t j|| j| jd}tj|| j}| jtjkr|j| |j| j | jtjkr|j| |j|j qtW dj|d | j S ) Nkey_materialTr r6 zThere are too many iterations.)r4 )r. r r Z_check_bytesliker' r% Zdigest_sizer8 r( powr9 r! r r ZHMACr- r* r r update_generate_fixed_inputr appendfinalizejoin)r0 r; roundsoutputZr_binihZcounterr r r derivet s&