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 ZejeG dd deZejeG dd deZdS ) )absolute_importdivisionprint_functionN)utils)AlreadyFinalized InvalidKeyUnsupportedAlgorithm_Reasons)_get_backend)HMACBackend)HashBackend) constant_timehasheshmac)KeyDerivationFunctionc C s t jd| S )Nz>I)structpack)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 ValueErrorformatr _check_bytes) algorithmlengthr 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 )Nkey_material r r )r Z_check_byteslikeupdater appendfinalizelenjoin)r! r Zauxfnr outputZoutlenZcounterhr r r _concatkdf_derive% s r+ c @ s. e Zd Zd ddZdd Zdd Zdd ZdS ) ConcatKDFHashNc C s\ t |}t||| || _|| _|| _| jd kr6d| _t|tsLtdtj || _ 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| jS )N)r ZHashr- r2 )r4 r r r _hashK s zConcatKDFHash._hashc C s$ | j r td| _ t|| j| j| jS )NT)r3 r r+ r. r7 r/ )r4 r! r r r deriveN s zConcatKDFHash.derivec C s t j| j||std 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 ddZdd 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| jS )N)r ZHMACrB r- r2 )r4 r r r _hmacv s zConcatKDFHMAC._hmacc C s$ | j r td| _ t|| j| j| jS )NT)r3 r r+ r. rC r/ )r4 r! r r r r8 y s zConcatKDFHMAC.derivec C s t j| j||std S )N)r r9 r8 r )r4 r! r: r r r r; s zConcatKDFHMAC.verify)N)r<