
    +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  G d de      Z G d	 d
e      Zy)    )annotationsN)utils)AlreadyFinalized
InvalidKey)constant_timehasheshmac)KeyDerivationFunctionc                  B    e Zd Z	 d	 	 	 	 	 	 	 	 	 ddZddZddZd	dZy)
HKDFNc                    || _         |d| j                   j                  z  }nt        j                  d|       || _        t        | j                   ||      | _        y )N    salt)
_algorithmdigest_sizer   _check_bytes_salt
HKDFExpand_hkdf_expand)self	algorithmlengthr   infobackends         Z/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/hkdf.py__init__zHKDF.__init__   sP     $<T__888Dvt,
&tE    c                    t        j                  | j                  | j                        }|j	                  |       |j                         S N)r	   HMACr   r   updatefinalize)r   key_materialhs      r   _extractzHKDF._extract#   s2    IIdjj$//2	zz|r   c                    t        j                  d|       | j                  j                  | j	                  |            S )Nr#   )r   _check_bytesliker   deriver%   r   r#   s     r   r(   zHKDF.derive(   s2    ~|<  ''l(CDDr   c                Z    t        j                  | j                  |      |      st        y r   r   bytes_eqr(   r   r   r#   expected_keys      r   verifyzHKDF.verify,   '    %%dkk,&?N Or   r   )
r   hashes.HashAlgorithmr   intr   typing.Optional[bytes]r   r3   r   
typing.Anyr#   bytesreturnr6   r#   r6   r.   r6   r7   None)__name__
__module____qualname__r   r%   r(   r/    r   r   r   r      sR     #F'F F %	F
 %F F&
Er   r   c                  >    e Zd Z	 d	 	 	 	 	 	 	 ddZddZddZd	dZy)
r   Nc                    || _         d|j                  z  }||kD  rt        d| d      || _        |d}nt	        j
                  d|       || _        d| _        y )N   zCannot derive keys larger than z octets.r   r   F)r   r   
ValueError_lengthr   r   _info_used)r   r   r   r   r   
max_lengths         r   r   zHKDFExpand.__init__2   sm     $9000
J1*XF  <Dvt,

r   c                .   dg}d}| j                   j                  t        |      dz
  z  | j                  k  rt	        j
                  || j                         }|j                  |d          |j                  | j                         |j                  t        |g             |j                  |j                                |dz  }| j                   j                  t        |      dz
  z  | j                  k  rdj                  |      d | j                   S )Nr      )r   r   lenrB   r	   r    r!   rC   r6   appendr"   join)r   r#   outputcounterr$   s        r   _expandzHKDFExpand._expandM   s    oo))S[1_=L		,8AHHVBZ HHTZZ HHUG9%&MM!**,'qLG oo))S[1_=L xx$,,//r   c                    t        j                  d|       | j                  rt        d| _        | j	                  |      S )Nr#   T)r   r'   rD   r   rN   r)   s     r   r(   zHKDFExpand.derive[   s5    ~|<::""
||L))r   c                Z    t        j                  | j                  |      |      st        y r   r+   r-   s      r   r/   zHKDFExpand.verifyc   r0   r   r   )r   r1   r   r2   r   r3   r   r4   r5   r8   )r:   r;   r<   r   rN   r(   r/   r=   r   r   r   r   1   sA     #'  %	
 60*r   r   )
__future__r   typingcryptographyr   cryptography.exceptionsr   r   cryptography.hazmat.primitivesr   r   r	   "cryptography.hazmat.primitives.kdfr
   r   r   r=   r   r   <module>rW      s7   
 #   @ F F D  D4& 4r   