
    _f$                       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dS )    )annotationsN)utils)AlreadyFinalized
InvalidKeyUnsupportedAlgorithm_Reasons)cipherscmacconstant_timehasheshmac)KeyDerivationFunctionc                      e Zd ZdZdS )ModectrN)__name__
__module____qualname__CounterMode     Z/var/www/html/env/lib/python3.11/site-packages/cryptography/hazmat/primitives/kdf/kbkdf.pyr   r      s        KKKr   r   c                      e Zd ZdZdZdZdS )CounterLocationbefore_fixedafter_fixedmiddle_fixedN)r   r   r   BeforeFixed
AfterFixedMiddleFixedr   r   r   r   r      s         KJ KKKr   r   c                  >    e Zd ZddZedd            ZddZddZdS ) _KBKDFDeriverprftyping.Callablemoder   lengthintrlenllentyping.Optional[int]locationr   break_locationlabeltyping.Optional[bytes]contextfixedc                   t          |          sJ t          |t                    st          d          t          |t                    st          d          ||t          j        u rt          d          ||t          j        k    rt          d          |$t          |t                    st          d          ||dk     rt          d          |s|	r|
rt          d          ||                     |          st          d	          ||
t          d
          |$t          |t                    st          d          |d}|	d}	t          j
        d|           t          j
        d|	           || _        || _        || _        || _        || _        || _        || _        || _        |	| _        d| _        |
| _        d S )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   r-   r/   F)callable
isinstancer   	TypeErrorr   r    
ValueErrorr'   _valid_byte_lengthr   _check_bytes_prf_mode_length_rlen_llen	_location_break_location_label_context_used_fixed_data)selfr#   r%   r&   r(   r)   r+   r,   r-   r/   r0   s              r   __init__z_KBKDFDeriver.__init__%   s
    }}}$%% 	97888(O44 	HFGGG!h/2M&M&M>??? &O777/  
 %j.M.M%?@@@%.1*<*<HIII 	W 	% 	N   <t66t<<<;<<<<EM5666JtS$9$95666=E?G7E***9g...	


!-
 r   valuereturnboolc                    t          | t                    st          d          t          j        d|           }dt          |          cxk    rdk    sn dS dS )Nzvalue must be of type int      FT)r3   r'   r4   r   int_to_byteslen)rE   	value_bins     r   r6   z _KBKDFDeriver._valid_byte_lengthn   sd    %%% 	97888&q%00	C	NN''''a''''5tr   key_materialbytesprf_output_sizec                   | j         rt          t          j        d|           d| _         | j         |z   }dg}t          j        d| j                  }|t          dt          |          dz            dz
  k    rt          d          | 
                                }| j        t          j        k    rd}|}ny| j        t          j        k    r|}d}n_t          | j        t"                    r'| j        t          |          k    rt          d          |d | j                 }|| j        d          }t%          d|dz             D ]u}	|                     |          }
t          j        |	| j                  }||z   |z   }|
                    |           |                    |
                                           vd                    |          d | j                 S )	NrN   Tr   rI         zThere are too many iterations.z"break_location offset > len(fixed))rA   r   r   _check_bytesliker:   rK   r;   powrL   r5   _generate_fixed_inputr=   r   r   r   r3   r>   r'   ranger8   updateappendfinalizejoin)rC   rN   rP   roundsoutputr_binr0   data_before_ctrdata_after_ctrihcounter
input_datas                r   derivez_KBKDFDeriver.derivex   s   : 	#""~|<<<
 L=O34 "1dj11C3u::>**Q...=>>>**,,>_888!O"NN^999#O NN$c  G&U33 !EFFF#$:d&:$:;O"4#7#9#9:Nq&1*%% 	( 	(A		,''A(DJ7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        d| j	        |g          S )NrS   r       )
rB   r3   rO   r   rK   r:   r<   r[   r?   r@   )rC   l_vals     r   rV   z#_KBKDFDeriver._generate_fixed_input   sd     	$
4+;U C C 	$##"4<!#3TZ@@xxgt}eDEEEr   N)r#   r$   r%   r   r&   r'   r(   r'   r)   r*   r+   r   r,   r*   r-   r.   r/   r.   r0   r.   )rE   r'   rF   rG   )rN   rO   rP   r'   rF   rO   )rF   rO   )r   r   r   rD   staticmethodr6   re   rV   r   r   r   r"   r"   $   s|        G! G! G! G!R    \.0 .0 .0 .0`F F F F F Fr   r"   c                  8    e Zd Z	 dddd dZd!dZd"dZd#dZdS )$	KBKDFHMACNr,   	algorithmhashes.HashAlgorithmr%   r   r&   r'   r(   r)   r*   r+   r   r-   r.   r/   r0   backend
typing.Anyr,   c               *   t          |t          j                  st          dt          j                  ddlm} |                    |          st          dt          j                  || _	        t          | j        |||||||||	
  
        | _        d S )Nz5Algorithm supplied is not a supported hash algorithm.r   ro   z5Algorithm supplied is not a supported hmac algorithm.)r3   r   HashAlgorithmr   r   UNSUPPORTED_HASH,cryptography.hazmat.backends.openssl.backendro   hmac_supported
_algorithmr"   r8   _deriver)rC   rm   r%   r&   r(   r)   r+   r-   r/   r0   ro   r,   ossls                r   rD   zKBKDFHMAC.__init__   s     )V%9:: 	&G)  
	
 	
 	
 	
 	
 	
 ""9-- 	&G)  
 $%I
 
r   rN   rO   rF   	hmac.HMACc                6    t          j        || j                  S N)r   HMACrw   rC   rN   s     r   r8   zKBKDFHMAC._prf   s    yt777r   c                L    | j                             || j        j                  S r|   )rx   re   rw   digest_sizer~   s     r   re   zKBKDFHMAC.derive   s    }##L$/2MNNNr   expected_keyNonec                d    t          j        |                     |          |          st          d S r|   r   bytes_eqre   r   rC   rN   r   s      r   verifyzKBKDFHMAC.verify   3    %dkk,&?&?NN 		 	r   r|   )rm   rn   r%   r   r&   r'   r(   r'   r)   r*   r+   r   r-   r.   r/   r.   r0   r.   ro   rp   r,   r*   )rN   rO   rF   rz   rN   rO   rF   rO   rN   rO   r   rO   rF   r   r   r   r   rD   r8   re   r   r   r   r   rk   rk      s         #,
 04,
 ,
 ,
 ,
 ,
 ,
\8 8 8 8O O O O     r   rk   c                  8    e Zd Z	 dddddZd dZd!dZd"dZdS )#	KBKDFCMACNrl   r%   r   r&   r'   r(   r)   r*   r+   r   r-   r.   r/   r0   ro   rp   r,   c                  t          |t          j                  rt          |t          j                  st	          dt
          j                  || _        d | _        t          | j
        |||||||||	
  
        | _        d S )N7Algorithm supplied is not a supported cipher algorithm.)
issubclassr	   BlockCipherAlgorithmCipherAlgorithmr   r   UNSUPPORTED_CIPHERrw   _cipherr"   r8   rx   )rC   rm   r%   r&   r(   r)   r+   r-   r/   r0   ro   r,   s               r   rD   zKBKDFCMAC.__init__   s     w3
 
 	Iw'>??	 'I+  
 $FJ%I
 
r   _rO   rF   	cmac.CMACc                F    | j         J t          j        | j                   S r|   )r   r
   CMAC)rC   r   s     r   r8   zKBKDFCMAC._prf  s"    |'''y&&&r   rN   c                   |                      |          | _        | j        J ddlm} |                    | j                  st          dt          j                  | j        	                    || j        j
        dz            S )Nr   rr   r   rS   )rw   r   ru   ro   cmac_algorithm_supportedr   r   r   rx   re   
block_size)rC   rN   ry   s      r   re   zKBKDFCMAC.derive  s    |44|'''	
 	
 	
 	
 	
 	
 ,,T\:: 	&I+  
 }##L$,2IQ2NOOOr   r   r   c                d    t          j        |                     |          |          st          d S r|   r   r   s      r   r   zKBKDFCMAC.verify)  r   r   r|   )r%   r   r&   r'   r(   r'   r)   r*   r+   r   r-   r.   r/   r.   r0   r.   ro   rp   r,   r*   )r   rO   rF   r   r   r   r   r   r   r   r   r      s         #%
 04%
 %
 %
 %
 %
 %
N' ' ' '
P P P 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"   rk   r   r   r   r   <module>r      s  
 # " " " " "                                E D D D D D    5:   ! ! ! ! !ej ! ! !JF JF JF JF JF JF JF JFZ7 7 7 7 7% 7 7 7t@ @ @ @ @% @ @ @ @ @r   