o
    Œõ±jC  ã                   @   s¢   d dl mZmZ d dlmZ d dlZG dd„ dejƒZejZ	ej
ZejZejZejZejZejZG dd„ dƒZdd	„ Zd
d„ ZedƒZedƒZedƒZedƒZdS )é    )ÚABCÚabstractmethod)Úget_preferred_cipherNc                   @   sD   e Zd Ze ¡ Ze ¡ Ze ¡ Ze ¡ Ze ¡ Z	e ¡ Z
e ¡ ZdS )Ú
cipherMODEN)Ú__name__Ú
__module__Ú__qualname__ÚenumÚautoÚECBÚCBCÚCTRÚCCMÚCFBÚOFBÚGCM© r   r   ú†/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/unicrypto/symmetric.pyr      s    r   c                	   @   sl   e Zd Zejddfdedededefdd„Zed	d
„ ƒZ	edd„ ƒZ
edd„ ƒZedd„ ƒZedd„ ƒZdS )ÚsymmetricBASENé€   ÚkeyÚmodeÚIVÚsegment_sizec                 C   s*   || _ || _|| _|| _d | _|  ¡  d S ©N)r   r   r   r   Ú_cipherÚsetup_cipher)Úselfr   r   r   r   r   r   r   Ú__init__   s   zsymmetricBASE.__init__c                 C   ó   t ƒ ‚r   ©ÚNotImplementedError©r   r   r   r   r      s   zsymmetricBASE.setup_cipherc                 C   r   r   r    ©r   Údatar   r   r   Úencrypt$   ó   zsymmetricBASE.encryptc                 C   r   r   r    r"   r   r   r   Údecrypt(   r&   zsymmetricBASE.decryptc                 C   r   r   r    r#   r   r   r   Úupdate,   r&   zsymmetricBASE.updatec                 C   r   r   r    r"   r   r   r   Údigest0   r&   zsymmetricBASE.digest)r   r   r   r   r   ÚbytesÚintr   r   r   r%   r'   r(   r)   r   r   r   r   r      s    $



r   c                 C   sŒ  | d d… } | ddt | ƒ  7 } | d d? d@ d> jddd�}|| d d@ d> | d d	? d
@ B d> jddd�7 }|| d d@ d> | d	 d? d@ B d> jddd�7 }|| d	 d@ d> | d d? d@ B d> jddd�7 }|| d d@ d> | d d? d@ B d> jddd�7 }|| d d@ d	> | d d? d@ B d> jddd�7 }|| d d
@ d> | d d? d@ B d> jddd�7 }|| d d@ d> jddd�7 }|S )Né   ó    r   é   é   Úbig)Ú	byteorderé   é   é?   é   é   é   é   é   )ÚlenÚto_bytes)r   Úsr   r   r   Úexpand_DES_key5   s   222222r=   c                 C   s„   | j dddd�}|d |d |d |d |d |d |d g}|d |d |d |d |d |d |d g}tt|ƒƒtt|ƒƒfS )	Nr8   ÚlittleF)r1   Úsignedr   r.   r3   r5   )r;   r=   r*   )ÚbaseKeyr   Úkey1Úkey2r   r   r   Ú	deriveKeyD   s   ..rC   ÚDESÚTDESÚAESÚRC4)Úabcr   r   Ú	unicryptor   r	   ÚEnumr   r   ÚMODE_ECBr   ÚMODE_CBCr   ÚMODE_CTRr   ÚMODE_CCMr   ÚMODE_CFBr   ÚMODE_OFBr   ÚMODE_GCMr   r=   rC   rD   rE   rF   rG   r   r   r   r   Ú<module>   s$    	