
     h#                         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 )    N)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     d/var/www/html/Sam_Eipo/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ej        dedededej        e         dedej        e         dej        e	         d	ej        e	         d
ej        e	         fdZ
ededefd            Zde	dede	fdZde	fdZdS )_KBKDFDeriverprfmodelengthrlenllenlocationbreak_locationlabel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   
ValueErrorint_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*   r+   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returnc                     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)r.   r1   r/   r   int_to_byteslen)rA   	value_bins     r   r2   z _KBKDFDeriver._valid_byte_lengthl   sd    %%% 	97888&q%00	C	NN''''a''''5tr   key_material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 )	NrI   Tr   rD         zThere are too many iterations.z"break_location offset > len(fixed))r=   r   r   _check_bytesliker6   rF   r7   powrG   r0   _generate_fixed_inputr9   r   r   r   r.   r:   r1   ranger4   updateappendfinalizejoin)r?   rI   rJ   roundsoutputr_binr+   data_before_ctrdata_after_ctrihcounter
input_datas                r   derivez_KBKDFDeriver.derivev   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 )NrM   r       )
r>   r.   bytesr   rF   r6   r8   rU   r;   r<   )r?   l_vals     r   rP   z#_KBKDFDeriver._generate_fixed_input   sd     	$
4+;U C C 	$##"4<!#3TZ@@xxgt}eDEEEr   N)r   r   r   typingCallabler   r1   Optionalr   rb   r@   staticmethodboolr2   r_   rP   r   r   r   r!   r!   "   s8       G!_G! G! 	G!
 G! oc"G! "G! ,G! u%G! 'G! u%G! G! G! G!R # $    \.05 .03 .05 .0 .0 .0 .0`Fu F F F F F Fr   r!   c                      e Zd Z	 ddddej        dedededej        e         de	d	ej        e
         d
ej        e
         dej        e
         dej        dej        e         fdZde
dej        fdZde
de
fdZde
de
ddfdZdS )	KBKDFHMACNr(   	algorithmr#   r$   r%   r&   r'   r)   r*   r+   backendr(   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   rm   z5Algorithm supplied is not a supported hmac algorithm.)r.   r   HashAlgorithmr   r   UNSUPPORTED_HASH,cryptography.hazmat.backends.openssl.backendrm   hmac_supported
_algorithmr!   r4   _deriver)r?   rl   r#   r$   r%   r&   r'   r)   r*   r+   rm   r(   ossls                r   r@   zKBKDFHMAC.__init__   s     )V%9:: 	&G)  
	
 	
 	
 	
 	
 	
 ""9-- 	&G)  
 $%I
 
r   rI   rB   c                 6    t          j        || j                  S N)r   HMACrt   r?   rI   s     r   r4   zKBKDFHMAC._prf   s    yt777r   c                 L    | j                             || j        j                  S rx   )ru   r_   rt   digest_sizerz   s     r   r_   zKBKDFHMAC.derive   s    }##L$/2MNNNr   expected_keyc                 d    t          j        |                     |          |          st          d S rx   r
   bytes_eqr_   r   r?   rI   r}   s      r   verifyzKBKDFHMAC.verify   3    %dkk,&?&?NN 		 	r   rx   )r   r   r   r   rp   r   r1   rd   rf   r   rb   Anyr@   r   ry   r4   r_   r   r   r   r   rj   rj      sK        #,
 04,
 ,
 ,
',
 ,
 	,

 ,
 oc",
 ",
 u%,
 ',
 u%,
 ,
 ,,
 ,
 ,
 ,
\8 849 8 8 8 8O5 OU O O O O5  $      r   rj   c                       e Zd Z	 ddddedededej        e         dedej        e         d	ej        e         d
ej        e         dej	        dej        e         fdZ
dedej        fdZdedefdZdededdfdZdS )	KBKDFCMACNrk   r#   r$   r%   r&   r'   r)   r*   r+   rm   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_CIPHERrt   _cipherr!   r4   ru   )r?   rl   r#   r$   r%   r&   r'   r)   r*   r+   rm   r(   s               r   r@   zKBKDFCMAC.__init__   s     w3
 
 	Iw'>??	 'I+  
 $FJ%I
 
r   _rB   c                 F    | j         J t          j        | j                   S rx   )r   r	   CMAC)r?   r   s     r   r4   zKBKDFCMAC._prf  s"    |'''y&&&r   rI   c                    |                      |          | _        | j        J ddlm} |                    | j                  st          dt          j                  | j        	                    || j        j
        dz            S )Nr   ro   r   rM   )rt   r   rr   rm   cmac_algorithm_supportedr   r   r   ru   r_   
block_size)r?   rI   rv   s      r   r_   zKBKDFCMAC.derive  s    |44|'''	
 	
 	
 	
 	
 	
 ,,T\:: 	&I+  
 }##L$,2IQ2NOOOr   r}   c                 d    t          j        |                     |          |          st          d S rx   r   r   s      r   r   zKBKDFCMAC.verify'  r   r   rx   )r   r   r   r   r1   rd   rf   r   rb   r   r@   r	   r   r4   r_   r   r   r   r   r   r      s@        #%
 04%
 %
 %
 %
 	%

 %
 oc"%
 "%
 u%%
 '%
 u%%
 %
 ,%
 %
 %
 %
N'e '	 ' ' ' '
P5 PU P P P P"5  $      r   r   )rd   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      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   