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<