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„ deƒZG dd „ d eƒZe jeƒG dd„ deƒƒZdS )é )Úabsolute_importÚdivisionÚprint_function)ÚEnum)Úrange)Úutils)ÚAlreadyFinalizedÚ InvalidKeyÚUnsupportedAlgorithmÚ_Reasons)Ú_get_backend)ÚHMACBackend)Ú constant_timeÚhashesÚhmac)Ú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 Zddd„Zdd„ Zdd„ Zdd „ Zd d„ ZdS ) Ú KBKDFHMACNc C sJ t | ƒ} t| tƒstdtjƒ‚t|tjƒs6tdtjƒ‚| j |ƒsLtdtjƒ‚t|t ƒs^tdƒ‚t|tƒsptdƒ‚|sx|r„| r„t dƒ‚|d ks˜| j|ƒ r t dƒ‚|d kr¸| d kr¸t dƒ‚|d k rÔt|tƒ rÔtd ƒ‚|d kràd }|d krìd }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ó ÚlabelÚcontextF)r Ú isinstancer r r ZBACKEND_MISSING_INTERFACEr Z HashAlgorithmZUNSUPPORTED_HASHZhmac_supportedr Ú TypeErrorr Ú ValueErrorÚ_valid_byte_lengthÚintr Ú_check_bytesÚ _algorithmÚ_modeÚ_lengthÚ_rlenÚ_llenÚ _locationÚ_labelÚ_contextÚ_backendÚ_usedÚ_fixed_data)ÚselfÚ algorithmÚmodeZlengthZrlenZllenÚlocationr r ZfixedÚbackendr r r Ú__init__# sV zKBKDFHMAC.__init__c C sB t |tƒstdƒ‚tjd|ƒ}dt|ƒ ko4dkn s>dS dS )Nzvalue must be of type inté é FT)r r# r r Úint_to_bytesÚlen)r0 ÚvalueZ value_binr r r r" k s zKBKDFHMAC._valid_byte_lengthc C sú | j r t‚tjd|ƒ d| _ | j | jj }dg}tjd| jƒ}|t dt |ƒd ƒd krdtdƒ‚x€td|d ƒD ]n}t j|| j| jd�}tj|| jƒ}| jtjkr°|j|ƒ |j| jƒ ƒ | jtjkrÔ|j|ƒ |j|jƒ ƒ qtW dj|ƒd | j… S ) NÚkey_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 ÚappendÚfinalizeÚjoin)r0 r; ÚroundsÚoutputZr_binÚiÚhZcounterr r r Úderivet s&