U
    EZh                     @   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st|d| S )	N      big	byteorder   lengthr       )r   r   r   	encryptorlenrangeupdateint
from_bytesto_bytesfinalizeAssertionErrorjoin)r   r   r   r   njib r"   m/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_core   s    $ r$   )r   key_to_wrapbackendr	   c                    sn   t | dk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   s     z aes_key_wrap.<locals>.<listcomp>)r   
ValueErrorr   r$   )r   r%   r&   r   r   r"   r0   r#   aes_key_wrap&   s    r3   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st||fS )	Nr
   r   r   r   r   r   r   r   )r   r   r   	decryptorr   reversedr   r   r   r   r   r   r   )	r   r   r   r4   r   r   r    Zatrr!   r"   r"   r#   _unwrap_core9   s      
r6   c                    s   t | dkrtddt  jddd }dt  d  d } d|   t  dkrtt| t  }||  }| d	kst	|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.   r0   r"   r#   r1   e   s     z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r2   r   r   r   r   r   r   r   r   r   r$   )r   r%   r&   aivpadr   r!   r   r"   r0   r#   aes_key_wrap_with_paddingP   s    
 r<   )r   wrapped_keyr&   r	   c                    sr  t  dk rtdt | dkr(tdt  dkrtt| t  }| }| dksbt	|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#   r1   }   s     z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r8   r   r   r7   r9   )r   InvalidUnwrapr2   r   r   r   r4   r   r   r   r   popr6   r   r   r   r   )r   r=   r&   r4   outr   datar   r   Zencrypted_aivZmlir!   r"   r>   r#   aes_key_unwrap_with_paddingi   sB    



 

rC   c                    s   t  dk rtdt  d dkr,tdt | dk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#   r1      s     z"aes_key_unwrap.<locals>.<listcomp>r   )r   r?   r2   r   r@   r6   r   r   )r   r=   r&   r:   r   r   r"   r>   r#   aes_key_unwrap   s    

rD   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$   Anyr3   Tupler6   r<   rC   rD   	Exceptionr?   r"   r"   r"   r#   <module>   sV      1 