
    (ph#                       S SK Jr  S SKrS SKJr  S SKJr  S SKJrJ	r	J
r
Jr  S SKJrJrJrJrJr  S SKJr   " S S	\R(                  5      r " S
 S\R(                  5      r " S S5      r " S S\5      r " S S\5      rg)    )annotationsN)Callable)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)cipherscmacconstant_timehasheshmac)KeyDerivationFunctionc                      \ rS rSrSrSrg)Mode   ctr N)__name__
__module____qualname____firstlineno__CounterMode__static_attributes__r       [/var/www/html/venv/lib/python3.13/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s    Kr   r   c                       \ rS rSrSrSrSrSrg)CounterLocation   before_fixedafter_fixedmiddle_fixedr   N)r   r   r   r   BeforeFixed
AfterFixedMiddleFixedr   r   r   r   r   r      s     KJ Kr   r   c                  z    \ rS rSr                    SS jr\S	S j5       r      S
S jrSS jrSr	g)_KBKDFDeriver%   c                   [        U5      (       d   e[        U[        5      (       d  [        S5      e[        U[        5      (       d  [        S5      eUc  U[        R
                  L a  [        S5      eUb  U[        R
                  :w  a  [        S5      eUb   [        U[        5      (       d  [        S5      eUb  US:  a  [        S5      eU(       d  U	(       a  U
(       a  [        S5      eUb  U R                  U5      (       d  [        S	5      eUc  U
c  [        S
5      eUb   [        U[        5      (       d  [        S5      eUS:X  a  [        S5      eUc  SnU	c  Sn	[        R                  " SU5        [        R                  " SU	5        Xl        X l        X0l        X@l        XPl        X`l        Xpl        Xl        Xl        SU l        Xl        g )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 integerzllen must be non-zeror   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___KBKDFDeriver.__init__&   s    }}}$%%788(O44FGG!h/2M2M&M>?? &O777/ 
 %j.M.M?@@%.1*<HIIW%K  <t66t<<;<<<EM566JtS$9$956619455=E?G7E*9g.	


!-
 r   c                    [        U [        5      (       d  [        S5      e[        R                  " SU 5      nS[        U5      s=::  a  S::  d   g  gg)Nzvalue must be of type int      FT)r-   r0   r.   r   int_to_byteslen)value	value_bins     r   r1    _KBKDFDeriver._valid_byte_lengthr   sL    %%%788&&q%0	C	N'a' (r   c                   U R                   (       a  [        e[        R                  " SU5        SU l         U R                  * U-  * nS/n[        R
                  " SU R                  5      nU[        S[        U5      S-  5      S-
  :  a  [        S5      eU R                  5       nU R                  [        R                  :X  a  SnUnOU R                  [        R                  :X  a  UnSnO`[        U R                   ["        5      (       a$  U R                   [        U5      :  a  [        S5      eUS U R                    nX`R                   S  n[%        SUS-   5       Hk  n	U R'                  U5      n
[        R
                  " XR                  5      nX{-   U-   nU
R)                  U5        UR+                  U
R-                  5       5        Mm     SR/                  U5      S U R                   $ )	Nkey_materialTr   rJ         zThere are too many iterations.z"break_location offset > len(fixed))r<   r   r   _check_bytesliker5   rL   r6   powrM   r/   _generate_fixed_inputr8   r   r#   r$   r-   r9   r0   ranger3   updateappendfinalizejoin)r>   rR   prf_output_sizeroundsoutputr_binrF   data_before_ctrdata_after_ctrihcounter
input_datas                r   derive_KBKDFDeriver.derive|   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"#7#7#9:Nq&1*%A		,'A((JJ7G(2^CJHHZ MM!**,' & xx$,,//r   c                (   U R                   (       a+  [        U R                   [        5      (       a  U R                   $ [        R                  " U R
                  S-  U R                  5      nSR                  U R                  SU R                  U/5      $ )NrT   r       )
r=   r-   bytesr   rL   r5   r7   r\   r:   r;   )r>   l_vals     r   rW   #_KBKDFDeriver._generate_fixed_input   sh    
4+;+;U C C###""4<<!#3TZZ@xxgt}}eDEEr   )r9   r;   r=   r:   r5   r7   r8   r4   r3   r6   r<   N)r?   r   r@   r   rA   r0   rB   r0   rC   
int | NonerD   r   rE   rn   r*   bytes | Noner+   ro   rF   ro   )rN   r0   returnbool)rR   utils.Bufferr]   r0   rp   rk   )rp   rk   )
r   r   r   r   rG   staticmethodr1   rg   rW   r   r   r   r   r'   r'   %   s    J!J! J! 	J!
 J! J! "J! #J! J! J! J!X  00(00;>00	00dFr   r'   c                  t    \ rS rSr S	SS.                     S
S jjjrSS jrSS jrSS jrSrg)	KBKDFHMAC   NrE   c               4   [        U[        R                  5      (       d  [        S[        R
                  5      eSSKJn  UR                  U5      (       d  [        S[        R
                  5      eXl	        [        U R                  UUUUUUUUU	5
      U l        g )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.backendrz   hmac_supported
_algorithmr'   r3   _deriver)r>   	algorithmr@   rA   rB   rC   rD   r*   r+   rF   rz   rE   ossls                r   rG   KBKDFHMAC.__init__   s     )V%9%9::&G)) 
	
 ""9--&G)) 
 $%II
r   c                B    [         R                  " XR                  5      $ N)r   HMACr   r>   rR   s     r   r3   KBKDFHMAC._prf   s    yy77r   c                `    U R                   R                  XR                  R                  5      $ r   )r   rg   r   digest_sizer   s     r   rg   KBKDFHMAC.derive   s!    }}##L//2M2MNNr   c                f    [         R                  " U R                  U5      U5      (       d  [        eg r   r   bytes_eqrg   r   r>   rR   expected_keys      r   verifyKBKDFHMAC.verify   *    %%dkk,&?NN Or   )r   r   r   )r   zhashes.HashAlgorithmr@   r   rA   r0   rB   r0   rC   rn   rD   r   r*   ro   r+   ro   rF   ro   rz   
typing.AnyrE   rn   )rR   rk   rp   z	hmac.HMACrR   rr   rp   rk   rR   rk   r   rk   rp   None	r   r   r   r   rG   r3   rg   r   r   r   r   r   ru   ru      s     #,
 &*,
',
 ,
 	,

 ,
 ,
 ",
 ,
 ,
 ,
 ,
 #,
\8Or   ru   c                  p    \ rS rSr S	SS.                   S
S jjjrSS jrSS jrSS jrSrg)	KBKDFCMAC   Nrw   c                  [        U[        R                  5      (       a  [        U[        R                  5      (       d  [	        S[
        R                  5      eXl        S U l        [        U R                  UUUUUUUUU	5
      U l        g )N7Algorithm supplied is not a supported cipher algorithm.)
issubclassr
   BlockCipherAlgorithmCipherAlgorithmr   r	   UNSUPPORTED_CIPHERr   _cipherr'   r3   r   )r>   r   r@   rA   rB   rC   rD   r*   r+   rF   rz   rE   s               r   rG   KBKDFCMAC.__init__   s     w33
 
Iw'>'>??&I++ 
 $<@%II
r   c                `    U R                   c   e[        R                  " U R                   5      $ r   )r   r   CMAC)r>   _s     r   r3   KBKDFCMAC._prf  s%    ||'''yy&&r   c                0   U R                  U5      U l        U R                  c   eSSKJn  UR	                  U R                  5      (       d  [        S[        R                  5      eU R                  R                  XR                  R                  S-  5      $ )Nr   ry   r   rT   )r   r   r}   rz   cmac_algorithm_supportedr   r	   r   r   rg   
block_size)r>   rR   r   s      r   rg   KBKDFCMAC.derive  s}    |4||'''	
 ,,T\\::&I++ 
 }}##L,,2I2IQ2NOOr   c                f    [         R                  " U R                  U5      U5      (       d  [        eg r   r   r   s      r   r   KBKDFCMAC.verify/  r   r   )r   r   r   r   )r@   r   rA   r0   rB   r0   rC   rn   rD   r   r*   ro   r+   ro   rF   ro   rz   r   rE   rn   )r   rk   rp   z	cmac.CMACr   r   r   r   r   r   r   r      s     #%
 &*%
 %
 	%

 %
 %
 "%
 %
 %
 %
 %
 #%
N'
P"r   r   )
__future__r   typingcollections.abcr   cryptographyr   cryptography.exceptionsr   r   r   r	   cryptography.hazmat.primitivesr
   r   r   r   r   "cryptography.hazmat.primitives.kdfr   Enumr   r   r'   ru   r   r   r   r   <module>r      sy   
 #  $    E5:: !ejj !OF OFd7% 7t@% @r   