3 l�_��@s�ddlmZmZmZddlZddlmZddlmZm Z m Z m Z ddl m Z ddlmZddlmZddlmZmZmZdd lmZd d �Zd d �Zdd�Zeje�Gdd�de��Zeje�Gdd�de��ZdS)�)�absolute_import�division�print_functionN)�utils)�AlreadyFinalized� InvalidKey�UnsupportedAlgorithm�_Reasons)� _get_backend)� HMACBackend)� HashBackend)� constant_time�hashes�hmac)�KeyDerivationFunctioncCs tjd|�S)Nz>I)�struct�pack)�n�r�!/usr/lib64/python3.6/concatkdf.py� _int_to_u32besrcCs8|jd}||kr tdj|���|dk r4tjd|�dS)N�� �z(Can not derive keys larger than {} bits.� otherinfoll��)Z digest_size� ValueError�formatr� _check_bytes)� algorithm�lengthrZ max_lengthrrr�_common_args_checkss   r cCs�tjd|�dg}d}d}xZ||krt|�}|jt|��|j|�|j|�|j|j��|t|d�7}|d7}qWdj|�d|�S)N� key_material�rr�����)rZ_check_byteslike�updater�append�finalize�len�join)r!rZauxfnr�outputZoutlenZcounter�hrrr�_concatkdf_derive%s     r+c@s.eZdZd dd�Zdd�Zdd�Zdd �ZdS) � ConcatKDFHashNcCs\t|�}t|||�||_||_||_|jdkr6d|_t|t�sLtdtj ��||_ d|_ dS)Nr"z.Backend object does not implement HashBackend.F) r r � _algorithm�_length� _otherinfo� isinstancer rr �BACKEND_MISSING_INTERFACE�_backend�_used)�selfrrr�backendrrr�__init__9s   zConcatKDFHash.__init__cCstj|j|j�S)N)rZHashr-r2)r4rrr�_hashKszConcatKDFHash._hashcCs$|jr t�d|_t||j|j|j�S)NT)r3rr+r.r7r/)r4r!rrr�deriveNs zConcatKDFHash.derivecCstj|j|�|�st�dS)N)r �bytes_eqr8r)r4r!� expected_keyrrr�verifyVszConcatKDFHash.verify)N)�__name__� __module__� __qualname__r6r7r8r;rrrrr,7s r,c@s.eZdZd dd�Zdd�Zdd�Zdd �ZdS) � ConcatKDFHMACNcCs�t|�}t|||�||_||_||_|jdkr6d|_|dkrJd|j}n tjd|�||_t |t �srt dt j ��||_d|_dS)Nr"��saltz.Backend object does not implement HMACBackend.F)r r r-r.r/Z block_sizerr�_saltr0r rr r1r2r3)r4rrrArr5rrrr6]s"     zConcatKDFHMAC.__init__cCstj|j|j|j�S)N)rZHMACrBr-r2)r4rrr�_hmacvszConcatKDFHMAC._hmaccCs$|jr t�d|_t||j|j|j�S)NT)r3rr+r.rCr/)r4r!rrrr8ys zConcatKDFHMAC.derivecCstj|j|�|�st�dS)N)r r9r8r)r4r!r:rrrr;�szConcatKDFHMAC.verify)N)r<r=r>r6rCr8r;rrrrr?[s r?)Z __future__rrrrZ cryptographyrZcryptography.exceptionsrrrr Zcryptography.hazmat.backendsr Z'cryptography.hazmat.backends.interfacesr r Zcryptography.hazmat.primitivesr rrZ"cryptography.hazmat.primitives.kdfrrr r+Zregister_interface�objectr,r?rrrr�s      #