U
    ÒZj  ã                   @   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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"   úi/var/www/html/TRUCKING_PROJECT/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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   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rŒtt| ƒtƒ ƒ ¡ }| |ˆ  ¡}| ¡ d	ksˆt	‚|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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"   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||ƒ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"   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 ýü