o
    ™¨ÊhV  ã                   @   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„ Zd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZdS )é    )Úabsolute_importÚdivisionÚprint_functionN)Ú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    úX/var/www/html/env/lib/python3.10/site-packages/cryptography/hazmat/primitives/keywrap.pyÚ
_wrap_core   s   (ÿ÷r"   c                    sp   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>/   ó    z aes_key_wrap.<locals>.<listcomp>)r   Ú
ValueErrorr   r"   )r   r.   r   r   r   r    r-   r!   Úaes_key_wrap$   s   r2   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   r3   r   r   r   Úatrr   r    r    r!   Ú_unwrap_core3   s    ÿþ
÷r6   c                    s¸   t | ƒdvr
tdƒ‚dt dt ˆ ƒ¡ }dt ˆ ƒd  d }ˆ d|  ‰ t ˆ ƒdkrFtt| ƒtƒ |ƒ ¡ }| |ˆ  ¡}| 	¡ dksDJ ‚|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!   r/   V   r0   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r1   r   r   r   r   r   r   r   r   r   r"   )r   r.   r   ÚaivÚpadr   r   r   r    r-   r!   Úaes_key_wrap_with_paddingG   s   r;   c                    sj  t ˆ ƒdk r
tdƒ‚t | ƒdvrtdƒ‚t ˆ ƒdkrAtt| ƒtƒ |ƒ ¡ }| ˆ ¡}| ¡ dks2J ‚|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!   r/   j   r0   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   z>Ié   r7   r8   )r   ÚInvalidUnwrapr1   r   r   r   r3   r   r   r   Úpopr6   r   r   r   r   )r   r=   r   r3   r   r   Údatar   r   Úencrypted_aivÚmlir    r<   r!   Úaes_key_unwrap_with_paddingZ   s6   


ÿ" ýrD   c                    s˜   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||ƒsGtƒ ‚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!   r/   �   r0   z"aes_key_unwrap.<locals>.<listcomp>r   )r   r?   r1   r   r@   r6   r   r   )r   r=   r   r9   r   r   r    r<   r!   Úaes_key_unwrap…   s   


rE   c                   @   s   e Zd ZdS )r?   N)Ú__name__Ú
__module__Ú__qualname__r    r    r    r!   r?   ™   s    r?   )Ú
__future__r   r   r   r   Ú&cryptography.hazmat.primitives.ciphersr   Ú1cryptography.hazmat.primitives.ciphers.algorithmsr   Ú,cryptography.hazmat.primitives.ciphers.modesr   Ú,cryptography.hazmat.primitives.constant_timer   r"   r2   r6   r;   rD   rE   Ú	Exceptionr?   r    r    r    r!   Ú<module>   s   +