a
    7ñ»jÙ  ã                   @   sl   d Z ddlZddlZddlZddlmZ dd„ Zdd„ Zdd	„ Zd
d„ Z	dd„ Z
dd„ Zdd„ Zdd„ ZdS )z&This is mainly for string obfuscation.é    N)Úsettingsc              	   C   sª   t |ƒdk rtdƒ‚t | ƒt |ƒkrLt | ƒt |ƒ }||t |ƒ | |  }d }zd dd„ t| |ƒD ƒ¡}W n6 ty¤   |  d¡} d dd„ t| |ƒD ƒ¡}Y n0 |S )Né   z42nd arg of str_xor() must be a string of length > 0!Ú c                 S   s$   g | ]\}}t t|ƒt|ƒA ƒ‘qS © ©ÚchrÚord©Ú.0Úc1Úc2r   r   úDE:\soccer\ml_env\Lib\site-packages\seleniumbase/common/encryption.pyÚ
<listcomp>   ó    zstr_xor.<locals>.<listcomp>úutf-8c                 S   s$   g | ]\}}t t|ƒt|ƒA ƒ‘qS r   r   r	   r   r   r   r      r   )ÚlenÚ	ExceptionÚjoinÚzipÚdecode)ÚstringÚkeyÚ
differenceÚresultr   r   r   Ústr_xor	   s     ÿ
ÿ
r   c                 C   s    t j}t j}|  |¡o|  |¡S ©N)r   ÚOBFUSCATION_START_TOKENÚOBFUSCATION_END_TOKENÚ
startswithÚendswith)r   Ústart_tokenÚ	end_tokenr   r   r   Úis_obfuscated   s    r"   c                 C   s,   t | ƒdk r| S | dd d… | d d d…  S )Né   r   )r   )r   r   r   r   Úshuffle_string$   s    r$   c                 C   s–   t | ƒdk r| S d}t | ƒd dk}| d tt | ƒd ƒd… }| tt | ƒd ƒd d… }tt |ƒƒD ]}||| 7 }||| 7 }qd|r’||d 7 }|S )Nr#   r   r   éÿÿÿÿ)r   ÚintÚrange)r   Ú
new_stringZoddZpart1Zpart2Úcr   r   r   Úreverse_shuffle_string*   s    r*   c                 C   s„   t t| ƒt|ƒƒ}d}t|ƒD ]}|| | 7 }||| 7 }qt| ƒt|ƒkr^|| |d … 7 }n"t|ƒt| ƒkr€|||d … 7 }n |S )Nr   )Úminr   r'   )Zstring1Zstring2Zsmallest_lengthr(   r)   r   r   r   Úblend_strings9   s    r,   c                 C   s   | |d … | d |…  S r   r   )r   Únr   r   r   ÚrotateI   s    r.   c                 C   sV   d}z| D ]}|t |ƒ7 }q
W n2 tyP   |  d¡} | D ]}|t |ƒ7 }q:Y n0 |S )Nr   r   )r   r   r   )r   Úcountr)   r   r   r   Úord_string_sumM   s    
r0   c              	   C   s>  t j}t j}t j}d}t| ƒrHd}| t|ƒt|ƒ … } t t 	| ¡¡} t
 t|ƒ 	d¡¡ ¡ }t
 t|d d d… ƒ 	d¡¡ ¡ }t t 	|d ¡¡}d dd„ t||| d¡ƒD ƒ¡}t||ƒ}t|ƒd	 d
krÞ||d  }t|d d d d	… ƒ}|�s t| ƒd
k�r@t| ƒd }	t| ƒd }
t| ƒd }t| ƒt| ƒ d }t| ƒd d
k�rÈ|dk�r’tt| d ƒd |	 ƒ|  tt| d ƒd |	 ƒ } n4tt| d ƒd |	 ƒ|  tt| d ƒd |	 ƒ } n‚t| ƒdk�rJ|dk�rtt| d
 ƒd |
 ƒ|  tt| d
 ƒd	 |
 ƒ } n4tt| d
 ƒd |
 ƒ|  tt| d
 ƒd |
 ƒ } t| ƒt| ƒ d }t| |ƒ} tt| ƒd d d… |ƒ}t|ƒt|ƒ d }t||ƒ}nrt| ƒt| ƒ d }t| | ƒ} tt| |ƒd d d… ƒ}t|ƒdk�rt|ƒt|ƒ d }t|| ƒ}|dd… }|�s:t t 	|¡¡}|| d¡ | }|S )NFTr   r%   é   r   c                 S   s6   g | ].\}}}t tt|ƒƒt|d ƒ t|d ƒ ƒ‘qS )é   )r   r   Ústrr&   )r
   r   r   Úc3r   r   r   r   j   s   ÿzdecrypt.<locals>.<listcomp>é   r   é   é   r#   r   é   é   é   é   é   é   é   é   )r   ZENCRYPTION_KEYr   r   r"   r   Úbase64Ú	b64decodeÚcodecsÚencodeÚhashlibÚsha256r3   Ú	hexdigestÚ	b64encoder   r   r   r,   r$   r0   r   r   r.   r   r*   )r   Zencryption_keyr    r!   Zalready_encryptedZhd1Zhd2Zb64_keyZxor_keyZrem1Zrem2Zrem3Zrem4Zrem5r   Zrem6r   r   r   ÚdecryptY   sŒ    "þÿ

ÿþÿÿþÿ
ÿþÿÿþÿ
rH   )Ú__doc__r@   rB   rD   Zseleniumbase.configr   r   r"   r$   r*   r,   r.   r0   rH   r   r   r   r   Ú<module>   s   