U
    ¸~Hj�  ã                   @  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sšt‚|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$   úJ/tmp/pip-unpacked-wheel-5jtya3dl/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©é   é   é    ú/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   s     z aes_key_wrap.<locals>.<listcomp>)r   Ú
ValueErrorr   r&   )r   r'   r(   r	   r
   r$   r2   r%   Úaes_key_wrap'   s    r5   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s¦t‚||fS )	Nr   r   r   r   r   r   r   r   )r   r   r   Ú	decryptorr   Úreversedr   r   r   r   r   r   r   )	r   r	   r
   r6   r    r!   r"   Zatrr#   r$   r$   r%   Ú_unwrap_core:   s     ÿ þþ
r8   c                   sÒ   t | ƒdkrtdƒ‚ˆ r$t ˆ ƒdkr,tdƒ‚dt ˆ ƒjddd� }d	t ˆ ƒd	  d	 }ˆ d
|  ‰ t ˆ ƒd	kr¤tt| ƒtƒ ƒ ¡ }| |ˆ  ¡}| ¡ dks t	‚|S ‡ fdd„t
dt ˆ ƒd	ƒD ƒ}t| ||ƒS d S )Nr)   r-   l        z,key_to_wrap must be between 1 and 2^32 bytesó   ¦YY¦é   r   r   r   ó    r   c                   s   g | ]}ˆ ||d  … ‘qS r/   r$   r0   r2   r$   r%   r3   i   s     z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r4   r   r   r   r   r   r   r   r   r   r&   )r   r'   r(   ÚaivÚpadr   r#   r
   r$   r2   r%   Úaes_key_wrap_with_paddingQ   s"    
 ÿr>   )r   Úwrapped_keyr(   r   c                   sr  t ˆ ƒdk rtdƒ‚t | ƒdkr(tdƒ‚t ˆ ƒdkr€t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$   r0   ©r?   r$   r%   r3   �   s     z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r:   r   r   r9   r;   )r   ÚInvalidUnwrapr4   r   r   r   r6   r   r   r   r   Úpopr8   r   r   r   r   )r   r?   r(   r6   Úoutr	   Údatar    r
   Zencrypted_aivZmlir#   r$   r@   r%   Úaes_key_unwrap_with_paddingm   sB    


ÿ
 þ
þýý
rE   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||ƒsŒtƒ ‚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$   r0   r@   r$   r%   r3   ª   s     z"aes_key_unwrap.<locals>.<listcomp>r   )r   rA   r4   r   rB   r8   r   r   )r   r?   r(   r<   r
   r	   r$   r@   r%   Úaes_key_unwrap›   s    

rF   c                   @  s   e Zd ZdS )rA   N)Ú__name__Ú
__module__Ú__qualname__r$   r$   r$   r%   rA   ³   s   rA   )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&   r5   r8   r>   rE   rF   Ú	ExceptionrA   r$   r$   r$   r%   Ú<module>   s     ý ý ý1 ý