o
    Ç `b  ã                   @   s¤   d dl mZmZmZ d dlZd dlmZ d dlmZ d dl	m
Z
 d dlmZ d dlmZ dd	„ Zdd
d„Zdd„ Zddd„Zddd„Zddd„ZG dd„ deƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Ú_get_backend)ÚCipher)ÚAES)ÚECB)Úbytes_eqc           	      C   sª   t t| ƒtƒ |ƒ ¡ }t|ƒ}tdƒD ]2}t|ƒD ]+}| |||  ¡}t dt 	d|d d… ¡d || | d A ¡}|dd … ||< qq| 
¡ dksNJ ‚|d |¡ S )Né   ú>Qé   r   é   éøÿÿÿó    )r   r   r   Ú	encryptorÚlenÚrangeÚupdateÚstructÚpackÚunpackÚfinalizeÚjoin)	Úwrapping_keyÚaÚrÚbackendr   ÚnÚjÚiÚb© r!   ú|home/ych/rk3568/buildroot/output/rockchip_rk3568/host/lib/python3.10/site-packages/cryptography/hazmat/primitives/keywrap.pyÚ
_wrap_core   s   (ÿ÷r#   c                    sx   t |ƒ}t| ƒdvrtdƒ‚tˆ ƒdk rtdƒ‚tˆ ƒd dkr$tdƒ‚d}‡ fd	d
„tdtˆ ƒdƒD ƒ}t| |||ƒS )N©é   é   é    ú/The wrapping key must be a valid AES key lengthr%   z)The key to wrap must be at least 16 bytesr   r   z-The key to wrap must be a multiple of 8 bytesó   ¦¦¦¦¦¦¦¦c                    ó   g | ]
}ˆ ||d  … ‘qS ©r   r!   ©Ú.0r   ©Úkey_to_wrapr!   r"   Ú
<listcomp>1   ó    z aes_key_wrap.<locals>.<listcomp>)r   r   Ú
ValueErrorr   r#   )r   r/   r   r   r   r!   r.   r"   Úaes_key_wrap%   s   r3   c           
   	   C   s°   t t| ƒtƒ |ƒ ¡ }t|ƒ}ttdƒƒD ]6}tt|ƒƒD ]-}t dt 	d|¡d || | d A ¡||  }| 
|¡}	|	d d… }|	dd … ||< qq| ¡ dksTJ ‚||fS )Nr
   r   r   r   r   r   r   )r   r   r   Ú	decryptorr   Úreversedr   r   r   r   r   r   )
r   r   r   r   r4   r   r   r   Zatrr    r!   r!   r"   Ú_unwrap_core5   s     ÿýÿ
ôr6   c                    sÀ   t |ƒ}t| ƒdvrtdƒ‚dt dtˆ ƒ¡ }dtˆ ƒd  d }ˆ d|  ‰ tˆ ƒdkrJtt| ƒtƒ |ƒ ¡ }| 	|ˆ  ¡}| 
¡ dksHJ ‚|S ‡ fdd	„td
tˆ ƒdƒD ƒ}t| |||ƒS )Nr$   r(   ó   ¦YY¦z>ir   ó    r   c                    r*   r+   r!   r,   r.   r!   r"   r0   \   r1   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r   r2   r   r   r   r   r   r   r   r   r   r#   )r   r/   r   ÚaivÚpadr   r    r   r!   r.   r"   Úaes_key_wrap_with_paddingL   s   r;   c                    sr  t |ƒ}tˆ ƒdk rtdƒ‚t| ƒdvrtdƒ‚tˆ ƒdkrEtt| ƒtƒ |ƒ ¡ }| ˆ ¡}| 	¡ dks6J ‚|d d… }|dd … }d}n&‡ fdd	„t
d
tˆ ƒdƒD ƒ}| d
¡}	t|ƒ}t| |	||ƒ\}}d |¡}t d|dd … ¡\}
d| |
 }t|d d… dƒr©d|d  |
  k r•d| kr©n tƒ ‚|d
kr¬t|| d … d| ƒs¬tƒ ‚|d
kr²|S |d | … S )Nr%   zMust be at least 16 bytesr$   r(   r   r   r   c                    r*   r+   r!   r,   ©Úwrapped_keyr!   r"   r0   q   r1   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   z>Ié   r7   r8   )r   r   ÚInvalidUnwrapr2   r   r   r   r4   r   r   r   Úpopr6   r   r   r   r	   )r   r=   r   r4   r    r   Údatar   r   Zencrypted_aivZmlir!   r<   r"   Úaes_key_unwrap_with_padding`   sD   


ÿþþþýýrB   c                    s    t |ƒ}tˆ ƒdk rtdƒ‚tˆ ƒd dkrtdƒ‚t| ƒdvr$tdƒ‚d}‡ fd	d
„tdtˆ ƒdƒD ƒ}| d¡}t| |||ƒ\}}t||ƒsKtƒ ‚d |¡S )Nr&   zMust be at least 24 bytesr   r   z-The wrapped key must be a multiple of 8 bytesr$   r(   r)   c                    r*   r+   r!   r,   r<   r!   r"   r0   —   r1   z"aes_key_unwrap.<locals>.<listcomp>r   )	r   r   r?   r2   r   r@   r6   r	   r   )r   r=   r   r9   r   r   r!   r<   r"   Úaes_key_unwrap‹   s   


rC   c                   @   s   e Zd ZdS )r?   N)Ú__name__Ú
__module__Ú__qualname__r!   r!   r!   r"   r?       s    r?   )N)Ú
__future__r   r   r   r   Zcryptography.hazmat.backendsr   Z&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z,cryptography.hazmat.primitives.ciphers.modesr   Z,cryptography.hazmat.primitives.constant_timer	   r#   r3   r6   r;   rB   rC   Ú	Exceptionr?   r!   r!   r!   r"   Ú<module>   s   



+