o
    Mf                     @  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$   h/var/www/html/analyze/labelStudio/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rd|d  |
  k rd| krn t |d
krt|| d  d| st |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