o
    "“i  ã                   @  s¤   d dl 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d„Z	d!d"dd„Zd#dd„Z	d!d"dd„Z	d!d$dd„Z	d!d$dd„ZG dd„ deƒZdS )%é    )ÚannotationsN)ÚCipher)ÚAES)ÚECB)Úbytes_eqÚwrapping_keyÚbytesÚaÚrúlist[bytes]Úreturnc                 C  s¨   t t| ƒtƒ ƒ ¡ }t|ƒ}tdƒD ]2}t|ƒD ]+}| |||  ¡}tj|d d… dd�|| | d A j	ddd�}|dd … ||< qq| 
¡ dksMJ ‚|d |¡ S )	Né   é   Úbig©Ú	byteorderé   ©Úlengthr   éøÿÿÿó    )r   r   r   Ú	encryptorÚlenÚrangeÚupdateÚintÚ
from_bytesÚto_bytesÚfinalizeÚjoin)r   r	   r
   r   ÚnÚjÚiÚb© r$   úf/var/www/html/premium_crap/venv/lib/python3.10/site-packages/cryptography/hazmat/primitives/keywrap.pyÚ
_wrap_core   s   $þø
r&   Úkey_to_wrapÚbackendú
typing.Anyc                   sn   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"   ©r'   r$   r%   Ú
<listcomp>6   ó    z aes_key_wrap.<locals>.<listcomp>)r   Ú
ValueErrorr   r&   )r   r'   r(   r	   r
   r$   r4   r%   Úaes_key_wrap'   s   r8   útuple[bytes, list[bytes]]c           	      C  s®   t t| ƒtƒ ƒ ¡ }t|ƒ}ttdƒƒD ]6}tt|ƒƒD ]-}tj|dd�|| | d A j	ddd�||  }| 
|¡}|d d… }|dd … ||< qq| ¡ dksSJ ‚||fS )	Nr   r   r   r   r   r   r   r   )r   r   r   Ú	decryptorr   Úreversedr   r   r   r   r   r   )	r   r	   r
   r:   r    r!   r"   Úatrr#   r$   r$   r%   Ú_unwrap_core:   s   þþ
ø
r=   c                   s¶   t | ƒdvr
tdƒ‚dt ˆ ƒjddd� }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¦é   r   r   r   ó    r   c                   r0   r1   r$   r2   r4   r$   r%   r5   f   r6   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r7   r   r   r   r   r   r   r   r   r&   )r   r'   r(   ÚaivÚpadr   r#   r
   r$   r4   r%   Úaes_key_wrap_with_paddingQ   s   
ÿrC   Úwrapped_keyc                   sf  t ˆ ƒdk r
tdƒ‚t | ƒdvrtdƒ‚t ˆ ƒdkr@tt| ƒtƒ ƒ ¡ }| ˆ ¡}| ¡ dks1J ‚|d d… }|dd … }d}n%‡ fdd	„t	d
t ˆ ƒdƒD ƒ}| 
d
¡}	t |ƒ}t| |	|ƒ\}}d |¡}tj|d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                   r0   r1   r$   r2   ©rD   r$   r%   r5   ~   r6   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r?   r   r   r>   r@   )r   ÚInvalidUnwrapr7   r   r   r   r:   r   r   r   Úpopr=   r   r   r   r   )r   rD   r(   r:   Úoutr	   Údatar    r
   Úencrypted_aivÚmlir#   r$   rE   r%   Úaes_key_unwrap_with_paddingj   s6   


ÿ" þrL   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||ƒsFtƒ ‚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                   r0   r1   r$   r2   rE   r$   r%   r5   §   r6   z"aes_key_unwrap.<locals>.<listcomp>r   )r   rF   r7   r   rG   r=   r   r   )r   rD   r(   rA   r
   r	   r$   rE   r%   Úaes_key_unwrap˜   s   


rM   c                   @  s   e Zd ZdS )rF   N)Ú__name__Ú
__module__Ú__qualname__r$   r$   r$   r%   rF   °   s    rF   )r   r   r	   r   r
   r   r   r   )N)r   r   r'   r   r(   r)   r   r   )r   r   r	   r   r
   r   r   r9   )r   r   rD   r   r(   r)   r   r   )Ú
__future__r   ÚtypingÚ&cryptography.hazmat.primitives.ciphersr   Ú1cryptography.hazmat.primitives.ciphers.algorithmsr   Ú,cryptography.hazmat.primitives.ciphers.modesr   Ú,cryptography.hazmat.primitives.constant_timer   r&   r8   r=   rC   rL   rM   Ú	ExceptionrF   r$   r$   r$   r%   Ú<module>   s"   
ý
ýý1ý