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 rd}n|dk rd}d}nd}d}|||d7 }|| }d}t|| dkrd
|t||   }||7 }| }d}|| dkrd
|||   }||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 rd}n|dk rd}d}nd}d}|||d7 }|| }d}t || dkrd
|t ||   }||7 }|}d}|| dkrd
|||   }||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