
    .Ph#                       d dl mZ d dlZd dlm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)Callable)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     h/var/www/html/test/jupyter/venv/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prfr   moder   lengthintrlenllen
int | Nonelocationr   break_locationlabelbytes | None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k    r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 integerzllen must be non-zeror   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 	% 	K   <t66t<<<;<<<<EM5666JtS$9$956661994555=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_lengthr   sd    %%% 	97888&q%00	C	NN''''a''''5tr   key_materialutils.Bufferprf_output_sizebytesc                   | 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.derive|   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 )NrT   r       )
rB   r3   rQ   r   rK   r:   r<   r\   r?   r@   )rC   l_vals     r   rW   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   rQ   )rF   rQ   )r   r   r   rD   staticmethodr6   rf   rW   r   r   r   r#   r#   %   s|        J! J! J! J!X    \00 00 00 00d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   rp   z5Algorithm supplied is not a supported hmac algorithm.)r3   r   HashAlgorithmr   r	   UNSUPPORTED_HASH,cryptography.hazmat.backends.openssl.backendrp   hmac_supported
_algorithmr#   r8   _deriver)rC   rn   r%   r&   r(   r)   r+   r-   r/   r0   rp   r,   ossls                r   rD   zKBKDFHMAC.__init__   s     )V%9:: 	&G)  
	
 	
 	
 	
 	
 	
 ""9-- 	&G)  
 $%I
 
r   rN   rQ   rF   	hmac.HMACc                6    t          j        || j                  S N)r   HMACrx   rC   rN   s     r   r8   zKBKDFHMAC._prf   s    yt777r   rO   c                L    | j                             || j        j                  S r}   )ry   rf   rx   digest_sizer   s     r   rf   zKBKDFHMAC.derive   s    }##L$/2MNNNr   expected_keyNonec                d    t          j        |                     |          |          st          d S r}   r   bytes_eqrf   r   rC   rN   r   s      r   verifyzKBKDFHMAC.verify   3    %dkk,&?&?NN 		 	r   r}   )rn   ro   r%   r   r&   r'   r(   r'   r)   r*   r+   r   r-   r.   r/   r.   r0   r.   rp   rq   r,   r*   )rN   rQ   rF   r{   rN   rO   rF   rQ   rN   rQ   r   rQ   rF   r   r   r   r   rD   r8   rf   r   r   r   r   rl   rl      s         #,
 &*,
 ,
 ,
 ,
 ,
 ,
\8 8 8 8O O O O     r   rl   c                  8    e Zd Z	 dddd dZd!dZd"dZd#dZdS )$	KBKDFCMACNrm   r%   r   r&   r'   r(   r)   r*   r+   r   r-   r.   r/   r0   rp   rq   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_CIPHERrx   _cipherr#   r8   ry   )rC   rn   r%   r&   r(   r)   r+   r-   r/   r0   rp   r,   s               r   rD   zKBKDFCMAC.__init__   s     w3
 
 	Iw'>??	 'I+  
 $<@%I
 
r   _rQ   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   rO   c                   |                      |          | _        | j        J ddlm} |                    | j                  st          dt          j                  | j        	                    || j        j
        dz            S )Nr   rs   r   rT   )rx   r   rv   rp   cmac_algorithm_supportedr   r	   r   ry   rf   
block_size)rC   rN   rz   s      r   rf   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.   rp   rq   r,   r*   )r   rQ   rF   r   r   r   r   r   r   r   r   r      s         #%
 &*%
 %
 %
 %
 %
 %
N' ' ' '
P P P 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#   rl   r   r   r   r   <module>r      s  
 # " " " " "  $ $ $ $ $ $                               E D D D D D    5:   ! ! ! ! !ej ! ! !OF OF OF OF OF OF OF OFd7 7 7 7 7% 7 7 7t@ @ @ @ @% @ @ @ @ @r   