U
    âhG%  ã                   @   sL   d dl Z d dlZd dlZdd„ Zdd„ ZG dd„ deƒZG dd	„ d	eƒZdS )
é    Nc                 C   s$   t j | ¡rt j | ¡rdS dS d S ©NTF)ÚosÚpathÚexistsÚisfile)Úfilepath© r   úB/var/www/html/venv/lib/python3.8/site-packages/hsh/library/hash.pyÚfile_exists	   s    r
   c              
   C   s*   t | dƒ}| ¡ W  5 Q R £ S Q R X d S )NÚrb)ÚopenÚread)r   Z
bin_readerr   r   r	   Úread_bin   s    r   c                   @   sL   e Zd 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 )ÚHasherc                 C   s   d S ©Nr   ©Úselfr   r   r	   Ú__init__   s    zHasher.__init__c                 C   s   |   |¡}t |¡ ¡ S r   )Ú
_read_fileÚhashlibÚmd5Ú	hexdigest©r   r   Údatar   r   r	   r       s    
z
Hasher.md5c                 C   s   |   |¡}t |¡ ¡ S r   )r   r   Úsha1r   r   r   r   r	   r   $   s    
zHasher.sha1c                 C   s   |   |¡}t |¡ ¡ S r   )r   r   Úsha224r   r   r   r   r	   r   (   s    
zHasher.sha224c                 C   s   |   |¡}t |¡ ¡ S r   )r   r   Úsha256r   r   r   r   r	   r   ,   s    
zHasher.sha256c                 C   s   |   |¡}t |¡ ¡ S r   )r   r   Úsha384r   r   r   r   r	   r   0   s    
zHasher.sha384c                 C   s   |   |¡}t |¡ ¡ S r   )r   r   Úsha512r   r   r   r   r	   r   4   s    
zHasher.sha512c                 C   s   t |ƒS r   )r   )r   r   r   r   r	   r   ;   s    zHasher._read_fileN)Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r   r   r   r   r   r   r   r	   r      s   r   c                   @   sD   e Z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 )ÚHashCheckerc                 C   sF   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	d| _
d S )Nr   FÚ )ÚfilesÚhashesÚerrorÚerror_numberÚ	error_oneÚ	error_twoÚfilepath_oneÚfilepath_twoÚhash_oneÚhash_twoÚ	hash_typer   r   r   r	   r   F   s    zHashChecker.__init__c                 C   sþ  |D ]’}t |ƒr8| jdkr"|| _n|| _|  jd7  _q|  |¡rj| jdkrT|| _n|| _|  jd7  _qd| _| j	dkr‚|| _
n|| _|  j	d7  _	q| jdkr"| j	dkrØtj d¡ tj | j
d ¡ t d¡ nFtj d¡ tj | j
d ¡ tj | jd ¡ tj d¡ t d¡ nØ| jdkrž| jdkrž|  ¡ dkrZtdƒ td	ƒ n@tdƒ t| jƒ t| jƒ t|  | j| j¡ƒ tdƒ td
ƒ n\| jdkrF| jdkrF|  ¡ }t|d d | j d ƒ t|d ƒ t|d d ƒ t| jƒ |d dkrtdƒ td	ƒ n&t|  |d | j¡ƒ tdƒ td
ƒ n´| jdkrú| jdkrú|  ¡ }t|d d | j d ƒ t|d ƒ t|d d | j d ƒ t|d ƒ |d dkrÒtdƒ td	ƒ n(t|  |d |d ¡ƒ tdƒ td
ƒ d S )Nr   é   Tú zP does not appear to be a file path or supported hash digest.  Please try again.
z= does not appear to be a file path or supported hash digest.
zPlease try again.
é   zThe hash digests are identical.z#The hash digests are NOT identical.Útypez (z) :Úfilehashz	 (test) :Úis_equalÚ	filehash1Ú	filehash2)r
   r$   r*   r+   Úis_hashr%   r,   r-   r&   r'   r(   r)   ÚsysÚstderrÚwriteÚexitÚhash_to_hashÚprintÚdifferÚfile_to_hashÚfile_to_file)r   Úarg_listÚargumentZresult_dictr   r   r	   ÚcompareV   sx    











zHashChecker.comparec                 C   s|   t |ƒ}|dkrd| _dS |dkr,d| _dS |dkr>d| _dS |dkrPd	| _dS |d
krbd| _dS |dkrtd| _dS dS d S )Né    r   Té(   r   é8   r   é@   r   é`   r   é€   r   F)Úlenr.   )r   Ú	test_hashZhash_lengthr   r   r	   r7   £   s(    zHashChecker.is_hashc                 C   s   | j | jkrdS dS d S r   )r,   r-   r   r   r   r	   r<   ¼   s    zHashChecker.hash_to_hashc                 C   sü   t ƒ }| jdkr.| | j¡}d||| jkdœS | jdkrV| | j¡}d||| jkdœS | jdkr~| | j¡}d||| jkdœS | jdkr¦| | j¡}d	||| jkdœS | jd
krÎ| | j¡}d||| jkdœS | jdk rø| 	| j¡}d||| jkdœS d S )Nr   ÚMD5)r2   r3   r4   r   ÚSHA1r   ÚSHA224r   ÚSHA256r   ÚSHA384r   ÚSHA512)
r   r.   r   r*   r,   r   r   r   r   r   )r   ÚhasherZhash_digestr   r   r	   r?   Ã   s&    




zHashChecker.file_to_hashc                 C   s0   t ƒ }| | j¡}| | j¡}d||||kdœS )NrO   )r2   r5   r6   r4   )r   r   r*   r+   )r   rR   Zhash_digest_oneZhash_digest_twor   r   r	   r@   Û   s    zHashChecker.file_to_filec                 C   s^   g }d}t |ƒt |ƒkrV|D ].}|| |kr8| d¡ n
| d¡ |d7 }qd |¡S dS d S )Nr   ú=ú^r/   r#   r0   )rJ   ÚappendÚjoin)r   Z	file_hashrK   Z	diff_listÚiÚxr   r   r	   r>   ã   s    


zHashChecker.differN)
r   r    r!   r   rC   r7   r<   r?   r@   r>   r   r   r   r	   r"   E   s   Mr"   )r   r8   r   r
   r   Úobjectr   r"   r   r   r   r	   Ú<module>   s   	,