a
    ϏPf                     @  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dd	d
dZddddddddZddddd	ddZddddddddZddddddddZddddddddZG dd deZdS )     )annotationsN)Cipher)AES)ECB)bytes_eqbyteszlist[bytes])wrapping_keyarreturnc                 C  s   t t| t  }t|}tdD ]d}t|D ]V}||||  }tj|d d dd|| | d A j	ddd}|dd  ||< q0q$|
 dksJ |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#   g/var/www/html/python-backend/venv/lib/python3.9/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_core   s    $r%   z
typing.Any)r   key_to_wrapbackendr   c                   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                   s   g | ]} ||d   qS r   r#   .0r!   r&   r#   r$   
<listcomp>6   r   z aes_key_wrap.<locals>.<listcomp>)r   
ValueErrorr   r%   )r   r&   r'   r	   r
   r#   r1   r$   aes_key_wrap'   s    r4   ztuple[bytes, list[bytes]]c           	      C  s   t t| t  }t|}ttdD ]l}tt|D ]Z}tj|dd|| | d A j	ddd||  }|
|}|d d }|dd  ||< q8q(| dksJ ||fS )	Nr   r   r   r   r   r   r   r   )r   r   r   	decryptorr   reversedr   r   r   r   r   r   )	r   r	   r
   r5   r   r    r!   Zatrr"   r#   r#   r$   _unwrap_core:   s    
r7   c                   s   t | dvrtddt  jddd }dt  d  d } d|   t  dkrtt| t  }||  }| d	ksJ |S  fd
dt	dt  dD }t
| ||S d S )Nr(   r,      YY   r   r   r       r   c                   s   g | ]} ||d   qS r.   r#   r/   r1   r#   r$   r2   f   r   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r3   r   r   r   r   r   r   r   r   r%   )r   r&   r'   aivpadr   r"   r
   r#   r1   r$   aes_key_wrap_with_paddingQ   s    
r=   )r   wrapped_keyr'   r   c                   sr  t  dk rtdt | dvr(tdt  dkrtt| t  }| }| dksbJ |d d }|dd  }d}nJ fdd	t	d
t  dD }|
d
}	t |}t| |	|\}}d|}tj|dd  dd}
d| |
 }t|d d drLd|d  |
  k r$d| krLn n$|d
krRt|| d  d| sRt |d
kr`|S |d |  S d S )Nr)   zMust be at least 16 bytesr(   r,   r   r   r   c                   s   g | ]} ||d   qS r.   r#   r/   r>   r#   r$   r2   ~   r   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r9   r   r   r8   r:   )r   InvalidUnwrapr3   r   r   r   r5   r   r   r   popr7   r   r   r   r   )r   r>   r'   r5   outr	   datar   r
   Zencrypted_aivZmlir"   r#   r?   r$   aes_key_unwrap_with_paddingj   s@    




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||st 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                   s   g | ]} ||d   qS r.   r#   r/   r?   r#   r$   r2      r   z"aes_key_unwrap.<locals>.<listcomp>r   )r   r@   r3   r   rA   r7   r   r   )r   r>   r'   r;   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@   )N)N)N)N)
__future__r   typingZ&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z,cryptography.hazmat.primitives.ciphers.modesr   Z,cryptography.hazmat.primitives.constant_timer   r%   r4   r7   r=   rD   rE   	Exceptionr@   r#   r#   r#   r$   <module>   s       1 