o
    ¢ØÆhÃ$  ã                   @   sn  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d„Z,dee-ee- f defdd„Z.				dKdee/e0e1f de-de2de(dee2df de2de	e-ef fdd„Z3d e	eef de-de/fd!d"„Z4dee-ee- f de-de/fd#d$„Z5e+d%e	eef defd&d'„ƒZ6d(Z7d)Z8d*Z9		dLdee/e0e1f de-de(d+ee2df de2de	e-ef fd,d-„Z:d%e	e-ef de-de/fd.d/„Z;d%e	e-ef de-de/fd0d1„Z<d2e	e-ef de-de/fd3d4„Z=d2e	e-ef de-de/fd5d6„Z>de-d7e/d8e2d9e2d:e2d;e2de/fd<d=„Z?ded>e-d7e/de2d?e2de/fd@dA„Z@dBe/dCe/dDe2de/fdEdF„ZAdee/e0e1f dCe/dDe2de/fdGdH„ZBde(de2fdIdJ„ZCdS )Mé    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                 C   s   t t| ƒƒS ©N)r   r   )r    © r#   ú`/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/eth_keyfile/keyfile.pyÚencode_hex_no_prefix?   s   r%   Úpath_or_file_objc                 C   sf   t | ƒr&t| tƒsJ ‚t| ƒ�}t |¡W  d   ƒ S 1 sw   Y  d S t| tjƒs.J ‚t | ¡S r"   )r   Ú
isinstanceÚstrÚopenÚjsonÚloadÚioÚ
TextIOBase)r&   Úkeyfile_filer#   r#   r$   Úload_keyfileC   s   
$ÿ
r/   é   r   é   Úprivate_keyÚpasswordÚversionÚkdfÚ
iterationsÚ	salt_sizec                 C   s    |dkrt | ||||ƒS tdƒ‚)Nr0   úNot yet implemented)Ú_create_v3_keyfile_jsonÚNotImplementedError)r2   r3   r4   r5   r6   r7   r#   r#   r$   Úcreate_keyfile_jsonM   s
   
ÿr;   Úraw_keyfile_jsonc                 C   s<   t | ƒ}|d }|dkrt||ƒS |dkrt||ƒS tdƒ‚)Nr4   r0   é   r8   )Únormalize_keysÚ_decode_keyfile_json_v3Ú_decode_keyfile_json_v4r:   )r<   r3   Úkeyfile_jsonr4   r#   r#   r$   Údecode_keyfile_json]   s   

rB   c                 C   s   t | ƒ}t||ƒ}|S r"   )r/   rB   )r&   r3   rA   r2   r#   r#   r$   Úextract_key_from_keyfilei   s   
rC   rA   c                 c   sN   � |   ¡ D ]\}}t|ƒr| ¡ }n|}t|ƒrt|ƒ}n|}||fV  qd S r"   )Úitemsr   Úlowerr   r>   )rA   Úkeyr    Únorm_keyÚ
norm_valuer#   r#   r$   r>   q   s   €

õr>   é    é   é   Úwork_factorc                 C   s  t  |¡}|d u rt|ƒ}|dkr$t|d||td�}|tdt|ƒdœ}n |dkr=t||ttt|d�}t|ttt|ƒdœ}nt	d	|› �ƒ‚t
t  d
¡ƒ}|d d
… }	t| |	|ƒ}
t|d
d… |
 ƒ}t | ¡j ¡ }t|ƒddtt|ƒƒit|
ƒ||t|ƒdœtt ¡ ƒddœS )Nr   Úsha256)Ú	hash_nameÚsaltr6   Údklenzhmac-sha256)ÚcrP   ÚprfrO   r   )rO   ÚbuflenÚrÚpÚn)rP   rV   rT   rU   rO   zKDF not implemented: r1   rI   zaes-128-ctrÚiv)ÚcipherÚcipherparamsÚ
ciphertextr5   Ú	kdfparamsÚmacr0   )ÚaddressÚcryptoÚidr4   )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)r2   r3   r5   rL   r7   rO   Úderived_keyr[   rW   Úencrypt_keyrZ   r\   r]   r#   r#   r$   r9   ‰   sb   
ûüú	ûÿø

ór9   c                 C   sÂ   | d }|d }|dkrt |d |ƒ}n|dkr t|d |ƒ}ntd|› �ƒ‚t|d ƒ}t|dd	… | ƒ}t|d
 ƒ}t ||¡sGtdƒ‚|d d… }|d }	tt|	d ƒƒ}
t	|||
ƒ}|S )Nr^   r5   r   r[   r   ú%Unsupported key derivation function: rZ   r1   rI   r\   zMAC mismatchrY   rW   )
Ú_derive_pbkdf_keyÚ_derive_scrypt_keyÚ	TypeErrorr   r   ÚhmacÚcompare_digestÚ
ValueErrorr   Údecrypt_aes_ctr)rA   r3   r^   r5   rm   rZ   r\   Úexpected_macrn   rY   rW   r2   r#   r#   r$   r?   Ñ   s"   r?   c                 C   sÔ   | 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 |dd… | ¡ ¡ |krNtdƒ‚|d d… }|d d }tt|d ƒƒ}	t	|||	ƒ}
|
S )Nr^   r5   Úfunctionr   Úparamsr   ro   rX   ÚmessageÚchecksumr1   rI   zChecksum mismatchrW   )
rp   rq   rr   r   ÚhashlibrM   Ú	hexdigestru   r   rv   )rA   r3   r^   r5   rm   Úcipher_messageÚchecksum_messagern   rY   rW   r2   r#   r#   r$   r@   õ   s$   ÿr@   Ú
kdf_paramsc           	      C   sP   t | d ƒ}| d }| d  d¡\}}}|dksJ ‚| d }t|||||ƒ}|S )NrO   rP   rR   Ú-rs   rQ   )r   Ú	partitionrb   )	r€   r3   rO   rP   Úshould_be_hmacÚ_rN   r6   Úderive_pbkdf_keyr#   r#   r$   rp     s   rp   c                 C   sD   t | d ƒ}| d }| d }| d }| d }t||||||d�}|S )NrO   rU   rT   rV   rP   )rO   rV   rT   rU   rS   )r   rd   )r€   r3   rO   rU   rT   rV   rS   Úderived_scrypt_keyr#   r#   r$   rq   %  s   úrq   rO   rV   rT   rU   rS   c              	   C   s    t | |||||dd�}tt|ƒS )NrK   )rO   Úkey_lenÚNrT   rU   Únum_keys)r   r   Úbytes)r3   rO   rV   rT   rU   rS   rm   r#   r#   r$   rd   7  s   ù
	rd   rN   rP   c                 C   s   t j|| |||d�}|S )N)rN   r3   rO   r6   rP   )r|   Úpbkdf2_hmac)r3   rN   rO   r6   rP   rm   r#   r#   r$   rb   F  s   ûrb   rZ   rF   rW   c                 C   s2   t jd|dd�}tj|tj|d�}tt| | ¡ƒS ©Né€   T)Úinitial_valueÚallow_wraparound)Úcounter)r   Únewr   ÚMODE_CTRr   rŠ   Údecrypt)rZ   rF   rW   ÚctrÚ	encryptorr#   r#   r$   rv   W  s   rv   c                 C   s6   t jd|dd�}tj|tj|d�}| | ¡}tt|ƒS rŒ   )r   r‘   r   r’   Úencryptr   rŠ   )r    rF   rW   r”   r•   rZ   r#   r#   r$   rg   ]  s   

rg   c                 C   s&   | dkrdS | dkrdS t d| › �ƒ‚)Nr   i@B r   i   ro   )ru   )r5   r#   r#   r$   ra   i  s
   ra   )r0   r   Nr1   )Nr1   )Dr|   rs   r,   r*   Útypingr   r   r   r   r   r   r   r	   r
   r   r   r   rk   Ú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(   r/   rŠ   Ú	bytearrayÚ
memoryviewÚintr;   rB   rC   r>   rc   re   rf   r9   r?   r@   rp   rq   rd   rb   rv   rg   ra   r#   r#   r#   r$   Ú<module>   sè    8,(ÿÿû	úÿþýü
ûú

ùÿÿ
þûÿþý
üû

úH$$ÿÿÿÿÿÿ
þÿÿÿÿÿ
þÿÿÿ
þ