a
    còf  ã                   @  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šJ ‚|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#   úc/home/httpd/docs/test/DocsMgr/lib/python3.9/site-packages/cryptography/hazmat/primitives/keywrap.pyÚ
_wrap_core   s    $ÿþr%   z
typing.Any)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>6   r   z aes_key_wrap.<locals>.<listcomp>)r   Ú
ValueErrorr   r%   )r   r&   r'   r	   r
   r#   r1   r$   Úaes_key_wrap'   s    r4   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¦J ‚||fS )	Nr   r   r   r   r   r   r   r   )r   r   r   Ú	decryptorr   Úreversedr   r   r   r   r   r   )	r   r	   r
   r5   r   r    r!   Zatrr"   r#   r#   r$   Ú_unwrap_core:   s    ÿþþ
r7   c                   sº   t | ƒdvrtdƒ‚dt ˆ ƒjddd� }dt ˆ ƒd  d }ˆ d|  ‰ t ˆ ƒdkrŒtt| ƒtƒ ƒ ¡ }| |ˆ  ¡}| ¡ d	ksˆJ ‚|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/   r1   r#   r$   r2   f   r   z-aes_key_wrap_with_padding.<locals>.<listcomp>r   )r   r3   r   r   r   r   r   r   r   r   r%   )r   r&   r'   ÚaivÚpadr   r"   r
   r#   r1   r$   Úaes_key_wrap_with_paddingQ   s    
ÿr=   )r   Úwrapped_keyr'   r   c                   sr  t ˆ ƒdk rtdƒ‚t | ƒdvr(tdƒ‚t ˆ ƒdkr€t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$   r2   ~   r   z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r9   r   r   r8   r:   )r   ÚInvalidUnwrapr3   r   r   r   r5   r   r   r   Úpopr7   r   r   r   r   )r   r>   r'   r5   Úoutr	   Údatar   r
   Zencrypted_aivZmlir"   r#   r?   r$   Úaes_key_unwrap_with_paddingj   s@    


ÿþ
þýý
rD   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||ƒ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$   r2   §   r   z"aes_key_unwrap.<locals>.<listcomp>r   )r   r@   r3   r   rA   r7   r   r   )r   r>   r'   r;   r
   r	   r#   r?   r$   Úaes_key_unwrap˜   s    

rE   c                   @  s   e Zd ZdS )r@   N)Ú__name__Ú
__module__Ú__qualname__r#   r#   r#   r$   r@   °   s   r@   )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%   r4   r7   r=   rD   rE   Ú	Exceptionr@   r#   r#   r#   r$   Ú<module>   s     ý ý ý1 ý