o
    Œõ±j¹  ã                   @   sR   d dl Z d dlmZ ddlmZmZmZ ddlmZm	Z	m
Z
 ddd„Zd	d
„ ZdS )é    N)Úsha256é   )ÚAESModeOfOperationCTRÚAESModeOfOperationCBCÚCounter)Ú	DecrypterÚ	EncrypterÚPADDING_NONEé   c                 C   s  d}|dvrt d| ƒ‚|rdt|ƒ  krdks"t dƒ‚ t dƒ‚dt|ƒ }t d|d	 ¡| }d
|t|ƒ|   }||7 }ttj|ddd�ƒ}	t||	ƒ}
|
 d¡}|
 | ¡}t| ƒ}t|ƒ}t	t
|d
| d�td�}d|dk d|d d   |d	  }t d|¡| | |d¡ }d}|dkr¯|dk ršd}n|dk r£d}d}nd}d}|| |d¡7 }|| }d}t|ƒ| dkrÇd
|t|ƒ|   }||7 }| }d}|| dkrÝd
|||   }||7 }|| | }| |¡}|| ¡ 7 }|dd … }tdd„ t||ƒD ƒƒd |… }||fS )Nr
   ©é   é   é   é
   é   é   r
   ú@Parameter 'mac_len' must be even and in the range 4..16 (not %d)é   é   ú<Length of parameter 'nonce' must be in the range 7..13 bytesé   ÚBr   ó    ÚbigF©Ú	byteorderÚsignedó                   ©Úiv©Úpaddingé@   r   r   é   ó    é ÿ  ì        ó   ÿþr   ó   ÿÿéðÿÿÿc                 S   ó   g | ]\}}||A ‘qS © r+   ©Ú.0ÚaÚbr+   r+   úž/root/aizidognhua/tmp/workspace/projects/ec89d86c-575f-41c9-af57-ac45cbdbf775/venv/lib/python3.10/site-packages/unicrypto/backends/pure/external/AES/AESCCM.pyÚ
<listcomp>I   ó    z!aesCCMEncrypt.<locals>.<listcomp>)Ú
ValueErrorÚlenÚstructÚpackr   ÚintÚ
from_bytesr   Úencryptr   r   r	   Úto_bytesÚfeedÚbytesÚzip)Ú	plaintextÚaadÚkeyÚnonceÚmacLenÚ	blockSizeÚqÚt_nonceÚ
t_noncepadÚ	ctr_startÚcipherÚs0ÚcÚpLenÚaadLenÚmacÚflagsÚb0ÚassocLenEncodedÚencSizeÚ	aadPaddedÚaadPadÚ
ptxtPaddedÚptxtPadÚmacDataÚtÚtagr+   r+   r0   ÚaesCCMEncrypt   s\   ÿ


$
 rY   c           #      C   s  d}t |ƒ}|dvrtd| ƒ‚|r"dt |ƒ  kr!dks&tdƒ‚ tdƒ‚dt |ƒ }t d|d	 ¡| }d
|t |ƒ|   }	||	7 }ttj|ddd�ƒ}
t||
ƒ}| d¡}| | ¡}t |ƒ}t |ƒ}t	t
|d
| d�td�}d|dk d|d d   |d	  }t d|¡| | |d¡ }d}|dkr³|dk ržd}n|dk r§d}d}nd}d}|| |d¡7 }|| }d}t |ƒ| dkrËd
|t |ƒ|   }||7 }|}d}|| dkrád
|||   }||7 }|| | }| |¡}|| ¡ 7 }|dd … }tdd„ t||ƒD ƒƒd |… }|S )Nr
   r   r   r   r   r   r   r   r   r   r   Fr   r   r   r    r"   r   r   r#   r$   r%   r&   r'   r   r(   r)   c                 S   r*   r+   r+   r,   r+   r+   r0   r1   ’   r2   z!aesCCMDecrypt.<locals>.<listcomp>)r4   r3   r5   r6   r   r7   r8   r   r9   r   r   r	   r:   r;   r<   r=   Úprintr   ÚupdateÚdigest)#Ú
ciphertextr?   r@   rA   ÚmacValuerC   rB   rD   rE   rF   rG   rH   rI   r>   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   Úh1Údigest1Úh2Údigest2ÚresultÚxÚyr+   r+   r0   ÚaesCCMDecryptN   s^   ÿ


$
 rf   )r
   )r5   Úhashlibr   ÚAESr   r   r   Úblockfeederr   r   r	   rY   rf   r+   r+   r+   r0   Ú<module>   s   
F