o
    Ç `…  ã                   @   sd   d dl mZmZmZ d dlmZ d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 )é    )Úabsolute_importÚdivisionÚprint_function)Ú
InvalidTagé   c                 C   sn   ddl m}m}m} t| |ƒrdS t| |ƒr#d t| jƒd ¡ d¡S t| |ƒs*J ‚d t| jƒd ¡ d¡S )Nr   )ÚAESCCMÚAESGCMÚChaCha20Poly1305s   chacha20-poly1305z
aes-{}-ccmé   Úasciiz
aes-{}-gcm)	Ú+cryptography.hazmat.primitives.ciphers.aeadr   r   r	   Ú
isinstanceÚformatÚlenÚ_keyÚencode)Úcipherr   r   r	   © r   úhome/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/backends/openssl/aead.pyÚ_aead_cipher_name   s   

r   c              
   C   sr  | j  |¡}|  || jjk¡ | j  ¡ }| j || j j¡}| j  ||| jj| jj| jjt	|t
kƒ¡}	|  |	dk¡ | j  |t|ƒ¡}	|  |	dk¡ | j  || j jt|ƒ| jj¡}	|  |	dk¡ |tkrx| j  || j jt|ƒ|¡}	|  |	dk¡ n| d¡r‘| j  || j j|| jj¡}	|  |	dk¡ | j |¡}
| j |¡}| j  || jj| jj||
t	|t
kƒ¡}	|  |	dk¡ |S )Nr   s   -ccm)Ú_libZEVP_get_cipherbynameÚopenssl_assertÚ_ffiÚNULLZEVP_CIPHER_CTX_newÚgcZEVP_CIPHER_CTX_freeZEVP_CipherInit_exÚintÚ_ENCRYPTZEVP_CIPHER_CTX_set_key_lengthr   ÚEVP_CIPHER_CTX_ctrlZEVP_CTRL_AEAD_SET_IVLENÚ_DECRYPTZEVP_CTRL_AEAD_SET_TAGÚendswithÚfrom_buffer)ÚbackendÚcipher_nameÚkeyÚnonceÚtagZtag_lenZ	operationZ
evp_cipherÚctxÚresZ	nonce_ptrZkey_ptrr   r   r   Ú_aead_setup   sX   

úüÿ
ÿ
úr(   c                 C   s:   | j  d¡}| j || j j|| j j|¡}|  |dk¡ d S ©Núint *r   )r   Únewr   ÚEVP_CipherUpdater   r   )r!   r&   Zdata_lenZintptrr'   r   r   r   Ú_set_lengthN   ó
   ÿr-   c                 C   s:   | j  d¡}| j || j j||t|ƒ¡}|  |dk¡ d S r)   )r   r+   r   r,   r   r   r   )r!   r&   Úassociated_dataÚoutlenr'   r   r   r   Ú_process_aadV   r.   r1   c                 C   s^   | j  d¡}| j  dt|ƒ¡}| j ||||t|ƒ¡}|  |dk¡ | j  ||d ¡d d … S )Nr*   úunsigned char[]r   )r   r+   r   r   r,   r   Úbuffer)r!   r&   Údatar0   Úbufr'   r   r   r   Ú_process_data^   s
   r6   c                 C   sê   ddl m} t|ƒ}t| ||j|d |tƒ}t||ƒr"t| |t|ƒƒ t	| ||ƒ t
| ||ƒ}	| j d¡}
| j || jj|
¡}|  |dk¡ |  |
d dk¡ | j d|¡}| j || jj||¡}|  |dk¡ | j |¡d d … }|	| S )Nr   ©r   r*   r2   )r   r   r   r(   r   r   r   r-   r   r1   r6   r   r+   r   ÚEVP_CipherFinal_exr   r   r   ZEVP_CTRL_AEAD_GET_TAGr3   )r!   r   r$   r4   r/   Ú
tag_lengthr   r"   r&   Úprocessed_datar0   r'   Ztag_bufr%   r   r   r   Ú_encryptf   s(   ÿ
ÿr;   c                 C   s2  ddl m} t|ƒ|k rt‚|| d … }|d | … }t|ƒ}t| ||j|||tƒ}	t||ƒr8t	| |	t|ƒƒ t
| |	|ƒ t||ƒrw| j d¡}
| j dt|ƒ¡}| j |	||
|t|ƒ¡}|dkrh|  ¡  t‚| j ||
d ¡d d … }|S t| |	|ƒ}| j d¡}
| j |	| jj|
¡}|dkr—|  ¡  t‚|S )Nr   r7   r*   r2   r   )r   r   r   r   r   r(   r   r   r   r-   r1   r   r+   r   r,   Z_consume_errorsr3   r6   r8   r   )r!   r   r$   r4   r/   r9   r   r%   r"   r&   r0   r5   r'   r:   r   r   r   Ú_decrypt‚   s8   ÿ

	ùr<   N)Ú
__future__r   r   r   Zcryptography.exceptionsr   r   r   r   r(   r-   r1   r6   r;   r<   r   r   r   r   Ú<module>   s   0