
    (i$                        d dl Z d dlZd dlZd dlZd dlmZmZmZmZm	Z	m
Z
mZmZmZmZmZmZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ed
   Z( ed      Z) ed      Z* eeede
eee)e*f   ee)e*f   f      f   gede	e)e*f   f   f   e'      Z+dedefdZ,dee-ee-   f   defdZ.	 	 	 	 d8dee/e0e1f   de-de2de(dee2df   de2de	e-ef   fdZ3de	eef   de-de/fdZ4dee-ee-   f   de-de/fdZ5e+de	eef   defd       Z6dZ7d Z8d!Z9	 	 d9dee/e0e1f   de-de(d"ee2df   de2de	e-ef   fd#Z:de	e-ef   de-de/fd$Z;de	e-ef   de-de/fd%Z<d&e	e-ef   de-de/fd'Z=d&e	e-ef   de-de/fd(Z>de-d)e/d*e2d+e2d,e2d-e2de/fd.Z?ded/e-d)e/de2d0e2de/fd1Z@d2e/d3e/d4e2de/fd5ZAdee/e0e1f   d3e/d4e2de/fd6ZBde(de2fd7ZCy):    N)IOAnyAnyStrCallableDictIterableLiteralMappingTupleTypeVarUnioncast)Random)AES)scrypt)Counter)keys)HexStr)	big_endian_to_int
decode_hex
encode_hexint_to_big_endianis_dict	is_stringkeccakremove_0x_prefixto_dict)pbkdf2r   TKeyTVal.valuereturnc                 *    t        t        |             S N)r   r   )r!   s    D/var/www/br/venv/lib/python3.12/site-packages/eth_keyfile/keyfile.pyencode_hex_no_prefixr&   ?   s    Ju-..    path_or_file_objc                 
   t        |       r<t        | t              sJ t        |       5 }t	        j
                  |      cd d d        S t        | t        j                        sJ t	        j
                  |       S # 1 sw Y   y xY wr$   )r   
isinstancestropenjsonloadio
TextIOBase)r(   keyfile_files     r%   load_keyfiler2   C   st    !"*C000"# 	+|99\*	+ 	+ *BMM:::yy)**		+ 	+s   A99Bprivate_keypasswordversionkdf
iterations	salt_sizec                 @    |dk(  rt        | ||||      S t        d      )N   Not yet implemented)_create_v3_keyfile_jsonNotImplementedError)r3   r4   r5   r6   r7   r8   s         r%   create_keyfile_jsonr>   M   s1     !|&3
I
 	
 ""788r'   raw_keyfile_jsonc                 |    t        |       }|d   }|dk(  rt        ||      S |dk(  rt        ||      S t        d      )Nr5   r:      r;   )normalize_keys_decode_keyfile_json_v3_decode_keyfile_json_v4r=   )r?   r4   keyfile_jsonr5   s       r%   decode_keyfile_jsonrF   ]   sK    !"23L9%G!|&|X>>!|&|X>>!"788r'   c                 4    t        |       }t        ||      }|S r$   )r2   rF   )r(   r4   rE   r3   s       r%   extract_key_from_keyfilerH   i   s!       01L%lH=Kr'   rE   c              #      K   | j                         D ]B  \  }}t        |      r|j                         }n|}t        |      rt	        |      }n|}||f D y wr$   )itemsr   lowerr   rB   )rE   keyr!   norm_key
norm_values        r%   rB   rB   q   sZ     "((* #
US>yy{HH5>'.JJ
""#s   AA          work_factorc           	         t        j                  |      }|t        |      }|dk(  r)t        |d||t              }|t        dt        |      d}nN|dk(  r;t        ||t        t        t        |      }t        |t        t        t        |      d}nt        d	|       t        t        j                  d
            }|d d
 }	t        | |	|      }
t        |d
d |
z         }t        j                  |       j                  j!                         }t#        |      ddt        t%        |            it        |
      ||t        |      dt'        t)        j*                               ddS )Nr   sha256)	hash_namesaltr7   dklenzhmac-sha256)crW   prfrV   r   )rV   buflenrpn)rW   r]   r[   r\   rV   zKDF not implemented:    rO   zaes-128-ctriv)ciphercipherparams
ciphertextr6   	kdfparamsmacr:   )addresscryptoidr5   )r   get_random_bytesget_default_work_factor_for_kdf_pbkdf2_hashDKLENr&   _scrypt_hashSCRYPT_RSCRYPT_Pr=   r   encrypt_aes_ctrr   r   
PrivateKey
public_keyto_checksum_addressr   r   r+   uuiduuid4)r3   r4   r6   rR   r8   rV   derived_keyrc   r_   encrypt_keyrb   rd   re   s                r%   r<   r<      st    ""9-D5c:
h""
  (.	
	 
"
 (.
	 "$9#"?@@	62226	7Bcr"K k2>J
R#j0
1Cook*55IIKG $G,#*+<R+@A /z:"',	
 $**, r'   c                    | d   }|d   }|dk(  rt        |d   |      }n#|dk(  rt        |d   |      }nt        d|       t        |d         }t	        |dd	 |z         }t        |d
         }t        j                  ||      st        d      |d d }|d   }	t        t        |	d               }
t        |||
      }|S )Nrf   r6   r   rc   r   %Unsupported key derivation function: rb   r^   rO   rd   zMAC mismatchra   r_   )
_derive_pbkdf_key_derive_scrypt_key	TypeErrorr   r   hmaccompare_digest
ValueErrorr   decrypt_aes_ctr)rE   r4   rf   r6   ru   rb   rd   expected_macrv   ra   r_   r3   s               r%   rC   rC      s    (#F
-C h'{(;XF	()<hG?uEFF F<01J
R#j0
1CfUm,LsL1(( cr"K.)L	:l4&89	:B!*k2>Kr'   c                    | d   }|d   d   }|dk(  rt        |d   d   |      }n&|dk(  rt        |d   d   |      }nt        d|       t        |d   d	         }|d
   d	   }t	        j
                  |dd |z         j                         |k7  rt        d      |d d }|d   d   }t        t        |d               }	t        |||	      }
|
S )Nrf   r6   functionr   paramsr   rx   r`   messagechecksumr^   rO   zChecksum mismatchr_   )
ry   rz   r{   r   hashlibrT   	hexdigestr~   r   r   )rE   r4   rf   r6   ru   cipher_messagechecksum_messagerv   ra   r_   r3   s              r%   rD   rD      s	   (#F
-

#C h'uh(?J	(x)@(K?uEFFx 0 ;<Nj))4 	{2b)N:;EEG	 ,-- cr"K(#H-L	:l4&89	:B!.+rBKr'   
kdf_paramsc                     t        | d         }| d   }| d   j                  d      \  }}}|dk(  sJ | d   }t        |||||      }|S )NrV   rW   rY   -r|   rX   )r   	partitionrj   )	r   r4   rV   rW   should_be_hmac_rU   r7   derive_pbkdf_keys	            r%   ry   ry     sg    j()DwE#-e#4#>#>s#C NAyV###CJ#Hiz5Qr'   c                 l    t        | d         }| d   }| d   }| d   }| d   }t        ||||||      }|S )NrV   r\   r[   r]   rW   )rV   r]   r[   r\   rZ   )r   rl   )r   r4   rV   r\   r[   r]   rZ   derived_scrypt_keys           r%   rz   rz   %  s[    j()D3A3A3A F%


 r'   rV   r]   r[   r\   rZ   c           	      F    t        | |||||d      }t        t        |      S )NrQ   )rV   key_lenNr[   r\   num_keys)r   r   bytes)r4   rV   r]   r[   r\   rZ   ru   s          r%   rl   rl   7  s2     


K {##r'   rU   rW   c                 :    t        j                  || |||      }|S )N)rU   r4   rV   r7   rW   )r   pbkdf2_hmac)r4   rU   rV   r7   rW   ru   s         r%   rj   rj   F  s+     %%K r'   rb   rL   r_   c                     t        j                  d|d      }t        j                  |t        j                  |      }t	        t
        |j                  |             S N   T)initial_valueallow_wraparound)counter)r   newr   MODE_CTRr   r   decrypt)rb   rL   r_   ctr	encryptors        r%   r   r   W  sB    
++cd
CCS\\37Iy((455r'   c                     t        j                  d|d      }t        j                  |t        j                  |      }|j	                  |       }t        t        |      S r   )r   r   r   r   encryptr   r   )r!   rL   r_   r   r   rb   s         r%   ro   ro   ]  sI     ++cd
CCS\\37I""5)Jz""r'   c                 6    | dk(  ry| dk(  ryt        d|        )Nr   i@B r   i   rx   )r~   )r6   s    r%   ri   ri   i  s)    
h	@FGGr'   )r:   r   Nr^   )Nr^   )Dr   r|   r/   r-   typingr   r   r   r   r   r   r	   r
   r   r   r   r   rs   Cryptor   Crypto.Cipherr   Crypto.Protocol.KDFr   Crypto.Utilr   eth_keysr   
eth_typingr   	eth_utilsr   r   r   r   r   r   r   r   r   KDFTyper   r    typed_to_dictr&   r+   r2   r   	bytearray
memoryviewintr>   rF   rH   rB   rk   rm   rn   r<   rC   rD   ry   rz   rl   rj   r   ro   ri    r'   r%   <module>r      s     	     
 
 
 $
%vv	#xgdDj&95t;L&L MNN	OPd4:&&'	) / /6 /+5bg#6 +3 + #'9ui3499 9 
	9
 c4i 9 9 
#s(^9 	9$sCx. 	9C 	9E 	9CCL)58
 #c3h #C # #$ 	 %)Bui34BB 
B sDy!	B
 B 
#s(^BP$sCx. C E H$sCx. C E H	$sCx. 	C 	E 	4S> S U $$$$#&$+.$36$@C$
$!).<?HK
"6 6E 6s 6u 6#	:-.#5:#@C#
#H HS Hr'   