
    +h$                        d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	 d dl
mZmZmZmZmZ d dlmZ  G d dej$                        Z G d	 d
ej$                        Z G d d      Z G d de      Z G d de      Zy)    )annotationsN)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)cipherscmacconstant_timehasheshmac)KeyDerivationFunctionc                      e Zd ZdZy)ModectrN)__name__
__module____qualname__CounterMode     [/var/www/html/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s    Kr   r   c                      e Zd ZdZdZdZy)CounterLocationbefore_fixedafter_fixedmiddle_fixedN)r   r   r   BeforeFixed
AfterFixedMiddleFixedr   r   r   r   r      s     KJ Kr   r   c                  ^    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZedd       ZddZd	dZy)
_KBKDFDeriverc                   t        |      sJ t        |t              st        d      t        |t              st        d      ||t        j
                  u rt        d      ||t        j
                  k7  rt        d      |t        |t              st        d      ||dk  rt        d      |s|	r|
rt        d      || j                  |      st        d	      ||
t        d
      |t        |t              st        d      |d}|	d}	t        j                  d|       t        j                  d|	       || _        || _        || _        || _        || _        || _        || _        || _        |	| _        d| _        |
| _        y )Nzmode must be of type Modez(location must be of type CounterLocationzPlease specify a break_locationzJbreak_location is ignored when location is not CounterLocation.MiddleFixedz!break_location must be an integerr   z)break_location must be a positive integerz9When supplying fixed data, label and context are ignored.zrlen must be between 1 and 4zPlease specify an llenzllen must be an integerr   labelcontextF)callable
isinstancer   	TypeErrorr   r    
ValueErrorint_valid_byte_lengthr   _check_bytes_prf_mode_length_rlen_llen	_location_break_location_label_context_used_fixed_data)selfprfmodelengthrlenllenlocationbreak_locationr$   r%   fixeds              r   __init__z_KBKDFDeriver.__init__%   s    }}$%788(O4FGG!h/2M2M&M>?? &O777/ 
 %j.M?@@%.1*<HIIW%N  <t66t<;<<<EM566JtS$9566=E?G7E*9g.	


!-
 r   c                    t        | t              st        d      t        j                  d|       }dt        |      cxk  rdk  sy yy)Nzvalue must be of type int      FT)r'   r*   r(   r   int_to_byteslen)value	value_bins     r   r+   z _KBKDFDeriver._valid_byte_lengthn   sI    %%788&&q%0	C	N'a' (r   c                   | j                   rt        t        j                  d|       d| _         | j                   |z   }dg}t        j
                  d| j                        }|t        dt        |      dz        dz
  kD  rt        d      | j                         }| j                  t        j                  k(  rd}|}n}| j                  t        j                  k(  r|}d}n[t        | j                   t"              r#| j                   t        |      kD  rt        d      |d | j                    }|| j                   d  }t%        d|dz         D ]k  }	| j'                  |      }
t        j
                  |	| j                        }||z   |z   }|
j)                  |       |j+                  |
j-                                m dj/                  |      d | j                   S )	Nkey_materialTr   rC         zThere are too many iterations.z"break_location offset > len(fixed))r6   r   r   _check_bytesliker/   rE   r0   powrF   r)   _generate_fixed_inputr2   r   r   r   r'   r3   r*   ranger-   updateappendfinalizejoin)r8   rJ   prf_output_sizeroundsoutputr_binr@   data_before_ctrdata_after_ctrihcounter
input_datas                r   derivez_KBKDFDeriver.derivex   s   ::""~|<
 LL=O34 ""1djj1C3u:>*Q..=>>**,>>_888!O"N^^999#O N$$c&&U3 !EFF#$:d&:&:;O"4#7#7#9:Nq&1*% 	(A		,'A((DJJ7G(72^CJHHZ MM!**,'	( xx$,,//r   c                   | j                   r&t        | j                   t              r| j                   S t        j                  | j
                  dz  | j                        }dj                  | j                  d| j                  |g      S )NrL   r       )
r7   r'   bytesr   rE   r/   r1   rT   r4   r5   )r8   l_vals     r   rO   z#_KBKDFDeriver._generate_fixed_input   se    
4+;+;U C###""4<<!#3TZZ@xxgt}}eDEEr   N)r9   ztyping.Callabler:   r   r;   r*   r<   r*   r=   typing.Optional[int]r>   r   r?   rd   r$   typing.Optional[bytes]r%   re   r@   re   )rG   r*   returnbool)rJ   rb   rU   r*   rf   rb   )rf   rb   )r   r   r   rA   staticmethodr+   r_   rO   r   r   r   r"   r"   $   s    G!G! G! 	G!
 G! #G! "G! -G! &G! (G! &G!R  .0`Fr   r"   c                  `    e Zd Z	 ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZy)	KBKDFHMACNr?   c               "   t        |t        j                        st        dt        j
                        ddlm} |j                  |      st        dt        j
                        || _	        t        | j                  |||||||||	
      | _        y )Nz5Algorithm supplied is not a supported hash algorithm.r   backendz5Algorithm supplied is not a supported hmac algorithm.)r'   r   HashAlgorithmr   r   UNSUPPORTED_HASH,cryptography.hazmat.backends.openssl.backendrn   hmac_supported
_algorithmr"   r-   _deriver)r8   	algorithmr:   r;   r<   r=   r>   r$   r%   r@   rn   r?   ossls                r   rA   zKBKDFHMAC.__init__   s     )V%9%9:&G)) 
	
 ""9-&G)) 
 $%II
r   c                B    t        j                  || j                        S N)r   HMACrs   r8   rJ   s     r   r-   zKBKDFHMAC._prf   s    yyt77r   c                b    | j                   j                  || j                  j                        S rx   )rt   r_   rs   digest_sizerz   s     r   r_   zKBKDFHMAC.derive   s#    }}##L$//2M2MNNr   c                Z    t        j                  | j                  |      |      st        y rx   r   bytes_eqr_   r   r8   rJ   expected_keys      r   verifyzKBKDFHMAC.verify   '    %%dkk,&?N Or   rx   )ru   zhashes.HashAlgorithmr:   r   r;   r*   r<   r*   r=   rd   r>   r   r$   re   r%   re   r@   re   rn   
typing.Anyr?   rd   )rJ   rb   rf   z	hmac.HMACrJ   rb   rf   rb   rJ   rb   r   rb   rf   Noner   r   r   rA   r-   r_   r   r   r   r   rj   rj      s     #,
 04,
',
 ,
 	,

 ,
 #,
 ",
 &,
 (,
 &,
 ,
 -,
\8Or   rj   c                  \    e Zd Z	 ddd	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZd	dZd
dZddZy)	KBKDFCMACNrk   c                  t        |t        j                        rt        |t        j                        st	        dt
        j                        || _        d | _        t        | j                  |||||||||	
      | _        y )N7Algorithm supplied is not a supported cipher algorithm.)
issubclassr	   BlockCipherAlgorithmCipherAlgorithmr   r   UNSUPPORTED_CIPHERrs   _cipherr"   r-   rt   )r8   ru   r:   r;   r<   r=   r>   r$   r%   r@   rn   r?   s               r   rA   zKBKDFCMAC.__init__   s~     w33
Iw'>'>?&I++ 
 $FJ%II
r   c                \    | j                   J t        j                  | j                         S rx   )r   r
   CMAC)r8   _s     r   r-   zKBKDFCMAC._prf  s%    ||'''yy&&r   c                &   | j                  |      | _        | j                  J ddlm} |j	                  | j                        st        dt        j                        | j                  j                  || j                  j                  dz        S )Nr   rm   r   rL   )rs   r   rq   rn   cmac_algorithm_supportedr   r   r   rt   r_   
block_size)r8   rJ   rv   s      r   r_   zKBKDFCMAC.derive  s|    |4||'''	
 ,,T\\:&I++ 
 }}##L$,,2I2IQ2NOOr   c                Z    t        j                  | j                  |      |      st        y rx   r~   r   s      r   r   zKBKDFCMAC.verify)  r   r   rx   )r:   r   r;   r*   r<   r*   r=   rd   r>   r   r$   re   r%   re   r@   re   rn   r   r?   rd   )r   rb   rf   z	cmac.CMACr   r   r   r   r   r   r   r      s     #%
 04%
 %
 	%

 %
 #%
 "%
 &%
 (%
 &%
 %
 -%
N'
P"r   r   )
__future__r   typingcryptographyr   cryptography.exceptionsr   r   r   r   cryptography.hazmat.primitivesr	   r
   r   r   r   "cryptography.hazmat.primitives.kdfr   Enumr   r   r"   rj   r   r   r   r   <module>r      sv   
 #     E5:: !ejj !JF JFZ7% 7t@% @r   