
    +h                        d dl mZ d dlZd dlmZ d dlmZmZ d dlm	Z	m
Z
mZ d dlmZ ddZ	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 	 	 dd	Z G d
 de      Z G d de      Zy)    )annotationsN)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunctionc                (    | j                  dd      S )N   big)length	byteorder)to_bytes)ns    _/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/concatkdf.py_int_to_u32ber      s    ::Q%:00    c                |    | j                   dz  }||kD  rt        d| d      |t        j                  d|       y y )Nl    zCannot derive keys larger than z bits.	otherinfo)digest_size
ValueErrorr   _check_bytes)	algorithmr   r   
max_lengths       r   _common_args_checksr      sL    
 &&)4J
::,fMNN;	2 r   c                j   t        j                  d|        dg}d}d}||kD  r~ |       }|j                  t        |             |j                  |        |j                  |       |j	                  |j                                |t        |d         z  }|dz  }||kD  r~dj                  |      d | S )Nkey_materialr   r      )r   _check_byteslikeupdater   appendfinalizelenjoin)r   r   auxfnr   outputoutlencounterhs           r   _concatkdf_deriver,      s     
><8UFFG
6/G	w'(		ajjl##fRj/!1 6/ 88FGV$$r   c                  >    e Zd Z	 d	 	 	 	 	 	 	 ddZddZd	dZd
dZy)ConcatKDFHashNc                ^    t        |||       || _        || _        ||nd| _        d| _        y )Nr   F)r   
_algorithm_length
_otherinfo_used)selfr   r   r   backends        r   __init__zConcatKDFHash.__init__7   s3     	Ivy9#.7.C
r   c                @    t        j                  | j                        S N)r   Hashr0   r4   s    r   _hashzConcatKDFHash._hashE   s    {{4??++r   c                    | j                   rt        d| _         t        || j                  | j                  | j
                        S NT)r3   r   r,   r1   r;   r2   r4   r   s     r   derivezConcatKDFHash.deriveH   8    ::""
 $,,

DOO
 	
r   c                Z    t        j                  | j                  |      |      st        y r8   r   bytes_eqr?   r   r4   r   expected_keys      r   verifyzConcatKDFHash.verifyP   '    %%dkk,&?N Or   r8   )r   hashes.HashAlgorithmr   intr   typing.Optional[bytes]r5   
typing.Any)returnzhashes.Hashr   bytesrL   rN   r   rN   rE   rN   rL   None)__name__
__module____qualname__r6   r;   r?   rF    r   r   r.   r.   6   sA     #'  *	
 ,
r   r.   c                  B    e Zd Z	 d	 	 	 	 	 	 	 	 	 ddZddZd	dZd
dZy)ConcatKDFHMACNc                   t        |||       || _        || _        ||nd| _        |j                  t        |j                   d      |d|j                  z  }nt        j                  d|       || _	        d| _
        y )Nr   z is unsupported for ConcatKDF    saltF)r   r0   r1   r2   
block_size	TypeErrornamer   r   _saltr3   )r4   r   r   rY   r   r5   s         r   r6   zConcatKDFHMAC.__init__V   s     	Ivy9#.7.C'y~~..KLMM<Y111Dvt,

r   c                V    t        j                  | j                  | j                        S r8   )r	   HMACr]   r0   r:   s    r   _hmaczConcatKDFHMAC._hmaco   s    yyT__55r   c                    | j                   rt        d| _         t        || j                  | j                  | j
                        S r=   )r3   r   r,   r1   r`   r2   r>   s     r   r?   zConcatKDFHMAC.deriver   r@   r   c                Z    t        j                  | j                  |      |      st        y r8   rB   rD   s      r   rF   zConcatKDFHMAC.verifyz   rG   r   r8   )
r   rH   r   rI   rY   rJ   r   rJ   r5   rK   )rL   z	hmac.HMACrM   rO   )rQ   rR   rS   r6   r`   r?   rF   rT   r   r   rV   rV   U   sK     #'  %	
 * 26
r   rV   )r   rI   rL   rN   )r   rH   r   rI   r   rJ   rL   rP   )
r   rN   r   rI   r'   z'typing.Callable[[], hashes.HashContext]r   rN   rL   rN   )
__future__r   typingcryptographyr   cryptography.exceptionsr   r   cryptography.hazmat.primitivesr   r   r	   "cryptography.hazmat.primitives.kdfr
   r   r   r,   r.   rV   rT   r   r   <module>ri      s   
 #   @ F F D1	3#	3	3 &	3 
		3%%% 3% 	%
 %.) >') 'r   