a
    ݌xd                     @   s   d dl Z d dlmZ d dlmZ d dlmZ d dlmZ e	e	e j
e	 e	dddZde	e	e je	d	d
dZe	e	e j
e	 e je	e j
e	 f dddZde	e	e je	d	ddZde	e	e je	dddZde	e	e je	dddZG dd deZdS )    N)Cipher)AES)ECB)bytes_eq)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!   ^/var/www/html/Ranjet/env/lib/python3.9/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_core   s    $r#   )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>5   r   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 ]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   r3   r   r   r   Zatrr    r!   r!   r"   _unwrap_core9   s    
r5   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-   r/   r!   r"   r0   e   r   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r1   r   r   r   r   r   r   r   r   r#   )r   r$   r%   aivpadr   r    r   r!   r/   r"   aes_key_wrap_with_paddingP   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"   r0   }   r   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r7   r   r   r6   r8   )r   InvalidUnwrapr1   r   r   r   r3   r   r   r   popr5   r   r   r   r   )r   r<   r%   r3   outr   datar   r   Zencrypted_aivZmlir    r!   r=   r"   aes_key_unwrap_with_paddingi   s@    




rB   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"   r0      r   z"aes_key_unwrap.<locals>.<listcomp>r   )r   r>   r1   r   r?   r5   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)N)N)N)typingZ&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z,cryptography.hazmat.primitives.ciphers.modesr   Z,cryptography.hazmat.primitives.constant_timer   bytesListr#   Anyr2   Tupler5   r;   rB   rC   	Exceptionr>   r!   r!   r!   r"   <module>   sV      1 