B
    uf                 @  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|}xttdD ]h}xbt|D ]V}||||  }tj|d d dd|| | d A j	ddd}|dd  ||< q4W q&W |
 dkst|d| S )	N      big)	byteorder   )lengthr   i    )r   r   r   	encryptorlenrangeupdateint
from_bytesto_bytesfinalizeAssertionErrorjoin)r   r	   r
   r   njib r!   h/home/ankuromar296_gmail_com/myenv/lib/python3.7/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_core   s    &
r#   z
typing.Any)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)          z/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 bytess   c               s   g | ]} ||d   qS )r   r!   ).0r   )r$   r!   r"   
<listcomp>6   s    z aes_key_wrap.<locals>.<listcomp>)r   
ValueErrorr   r#   )r   r$   r%   r	   r
   r!   )r$   r"   aes_key_wrap'   s    r,   ztuple[bytes, list[bytes]]c       	      C  s   t t| t  }t|}xttdD ]p}xjtt|D ]Z}tj|dd|| | d A j	ddd||  }|
|}|d d }|dd  ||< q<W q*W | dkst||fS )	Nr   r   )r   r   r   )r   r   ir   )r   r   r   	decryptorr   reversedr   r   r   r   r   r   r   )	r   r	   r
   r-   r   r   r   Zatrr    r!   r!   r"   _unwrap_core:   s    
r/   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 )N)r&   r'   r(   z/The wrapping key must be a valid AES key lengths   YY   r   )r   r   r       r   c               s   g | ]} ||d   qS )r   r!   )r)   r   )r$   r!   r"   r*   f   s    z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r+   r   r   r   r   r   r   r   r   r   r#   )r   r$   r%   aivpadr   r    r
   r!   )r$   r"   aes_key_wrap_with_paddingQ   s    
r4   )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 bytes)r&   r'   r(   z/The wrapping key must be a valid AES key lengthr   r   r   c               s   g | ]} ||d   qS )r   r!   )r)   r   )r5   r!   r"   r*   ~   s    z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r0   r   )r   s   YYr1   )r   InvalidUnwrapr+   r   r   r   r-   r   r   r   r   popr/   r   r   r   r   )r   r5   r%   r-   outr	   datar   r
   Zencrypted_aivZmlir    r!   )r5   r"   aes_key_unwrap_with_paddingj   s2    


($
r:   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 bytes)r&   r'   r(   z/The wrapping key must be a valid AES key lengths   c               s   g | ]} ||d   qS )r   r!   )r)   r   )r5   r!   r"   r*      s    z"aes_key_unwrap.<locals>.<listcomp>r   )r   r6   r+   r   r7   r/   r   r   )r   r5   r%   r2   r
   r	   r!   )r5   r"   aes_key_unwrap   s    

r;   c               @  s   e Zd ZdS )r6   N)__name__
__module____qualname__r!   r!   r!   r"   r6      s   r6   )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#   r,   r/   r4   r:   r;   	Exceptionr6   r!   r!   r!   r"   <module>   s   .