B
    =Æ³`  ã               @   sb   d Z dd„ Zdd„ Zdd„ Zdd„ Zdd
d„Zdd„ Zdd„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zd	S )z3
Created on Wed Feb 10 10:50:56 2021

@author: G5A
c             C   s–   t | ƒdkrdS |d; }d}d}xp| D ]h}t|ƒ}|dkrZ|dkrZ||7 }|dkrZ|d8 }|dkr‚|dkr‚||7 }|dkr‚|d8 }|t|ƒ7 }q&W |S )	Né    Fé   Ú éa   éz   éA   éZ   )ÚlenÚordÚchr)ÚmessageÚkeyÚmessage_encodeÚordiÚletter© r   úFC:\Users\Tabguy\Documents\ISEP\physique\python_project\V2\functions.pyÚcesar_encode	   s"    
r   c             C   s–   t | ƒdkrdS |d; }d}d}xp| D ]h}t|ƒ}|dkrZ|dkrZ||8 }|dk rZ|d7 }|dkr‚|dkr‚||8 }|dk r‚|d7 }|t|ƒ7 }q&W |S )	Nr   Fr   r   r   r   r   r   )r   r	   r
   )r   r   Úmessage_decoder   r   r   r   r   Úcesar_decode   s"    
r   c             C   sÞ   | r|sdS |  ¡ }d}d}d}x¸| D ]°}|| dkr>|d7 }t|ƒ}|dkrz|dkrz|t|| ƒd 7 }|dkrz|d8 }|d	kr®|d
kr®|t|| ƒd 7 }|d
kr®|d8 }| ¡ rÊ|d7 }|t|ƒ }|t|ƒ7 }q&W |S )NFr   r   ú é   r   r   r   r   r   )Úlowerr	   Úisalphar   r
   )r   r   Úir   r   r   r   r   r   Úwegner_encode1   s.    
r   c             C   sÞ   | r|sdS |  ¡ }d}d}d}x¸| D ]°}|| dkr>|d7 }t|ƒ}|dkrz|dkrz|t|| ƒd 8 }|dk rz|d7 }|d	kr®|d
kr®|t|| ƒd 8 }|d	k r®|d7 }| ¡ rÊ|d7 }|t|ƒ }|t|ƒ7 }q&W |S )NFr   r   r   r   r   r   r   r   r   )r   r	   r   r   r
   )r   r   r   r   r   r   r   r   r   Úwegner_decodeK   s.    
r   Nc             C   s  d}| dkrFt |ƒ}|dkr(t||ƒ}n|dkr<t||ƒ}ntdƒ nº| dkr€|dkrbt||ƒ}n|dkrvt||ƒ}ntdƒ n€| dkrº|dkrœt||ƒ}n|dkr°t||ƒ}ntd	ƒ nF| d
krø|dkrØt|||ƒ}n|dkrît	|||ƒ}ntdƒ ntdƒ |S )Nr   ÚCesarÚencodeÚdecodezerreur code cesarÚWegnerzerreur code wegnerÚRC4zerreur code RC4ÚAffinezerreur code affinezerreur code choice)
Úintr   r   Úprintr   r   Ú
RC4_encodeÚ
RC4_decodeÚaffine_encodeÚaffine_decode)Ú	type_codeÚencode_decoder   ÚcodeÚkey2Úresultr   r   r   Úresultate   s8    



r-   c       	         sø   dd„ ˆ D ƒ‰ dd„ t dƒD ƒ}‡ fdd„t dƒD ƒ}d}xBt dƒD ]6}|||  ||  d }|| ||  ||< ||< qDW d\}}g }xht | ƒD ]\}|d d }|||  d }|| ||  ||< ||< || ||  d }| || ¡ q”W |S )	Nc             S   s   g | ]}t |ƒ‘qS r   )r	   )Ú.0Úxr   r   r   ú
<listcomp>‰   s    z getKeyStream.<locals>.<listcomp>c             S   s   g | ]}|‘qS r   r   )r.   r   r   r   r   r0   ‹   s    é   c                s   g | ]}ˆ |t ˆ ƒ  ‘qS r   )r   )r.   r   )ÚKr   r   r0   Œ   s    r   )r   r   r   )ÚrangeÚappend)	Úsizer2   ÚSÚTÚjr   ÚKSÚkÚtr   )r2   r   ÚgetKeyStreamˆ   s     r<   c                sX   ˆr|sdS dd„ ˆD ƒ‰t tˆƒ|ƒ‰ ‡ ‡fdd„ttˆƒƒD ƒ}d dd„ |D ƒ¡S )NFc             S   s   g | ]}t |ƒ‘qS r   )r	   )r.   r/   r   r   r   r0   Ÿ   s    zRC4_encode.<locals>.<listcomp>c                s   g | ]}ˆ| ˆ | A ‘qS r   r   )r.   r:   )r9   ÚMr   r   r0   ¡   s    r   c             S   s   g | ]}t |ƒ‘qS r   )Ústr)r.   r/   r   r   r   r0   ¢   s    )r<   r   r3   Újoin)r=   r2   ÚMCr   )r9   r=   r   r$   œ   s    r$   c                s^   ˆr|sdS dd„ ˆ  d¡D ƒ‰ttˆƒ|ƒ‰ ‡ ‡fdd„ttˆƒƒD ƒ}d dd„ |D ƒ¡S )NFc             S   s   g | ]}t |ƒ‘qS r   )r"   )r.   r/   r   r   r   r0   §   s    zRC4_decode.<locals>.<listcomp>r   c                s   g | ]}ˆ| ˆ | A ‘qS r   r   )r.   r:   )r9   r@   r   r   r0   ©   s    r   c             S   s   g | ]}t |ƒ‘qS r   )r
   )r.   r/   r   r   r   r0   ª   s    )Úsplitr<   r   r3   r?   )r@   r2   r=   r   )r9   r@   r   r%   ¤   s    r%   c             C   s0   d}x&t ddƒD ]}||  d dkr|}qW |S )Nr   r   r   )r3   )ÚvalZinverser   r   r   r   Úcheck_inversible­   s
    rC   c       	      C   sâ   | r|r|sdS t |ƒ}d}|rÈd}xž| D ]–}t|ƒ}|dkrj|dkrj|d }|| | d }t|d ƒ}|dkrž|dkrž|d }|| | d }t|d ƒ}| ¡ r°||7 }q*|d	kr*||7 }q*W |S td
 |¡d ƒ |S d S )NFr   r   r   r   r   r   r   r   z{}z* n'est pas une valeur inversible modulo 26)rC   r	   r
   r   r#   Úformat)	r   ÚaÚbÚ	inverse_aÚmessage_chiffrer   r   ÚzÚcr   r   r   r&   ´   s.    

r&   c       	      C   sê   | r|r|sdS t |ƒ}d}|rÐd}x¦| D ]ž}t|ƒ}|dkrn|dkrn|d }|| ||  d }t|d ƒ}|dkr¦|dkr¦|d }|| ||  d }t|d ƒ}| ¡ r¸||7 }q*|d	kr*||7 }q*W |S td
 |¡d ƒ |S d S )NFr   r   r   r   r   r   r   r   z{}z* n'est pas une valeur inversible modulo 26)rC   r	   r
   r   r#   rD   )	rH   rE   rF   rG   r   r   r   rI   rJ   r   r   r   r'   Î   s.    

r'   )N)Ú__doc__r   r   r   r   r-   r<   r$   r%   rC   r&   r'   r   r   r   r   Ú<module>   s   
#	