<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
3
lį_b  ć               @   s¤   d dl mZmZ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lmZ dd	 Zdd
dZdd ZdddZdddZdddZG dd deZdS )é    )Śabsolute_importŚdivisionŚprint_functionN)Ś_get_backend)ŚCipher)ŚAES)ŚECB)Śbytes_eqc       	   	   C   s¢   t t| t |j }t|}xttdD ]h}xbt|D ]V}|j|||  }tjdtj	d|d d d || | d A }|dd  ||< q6W q(W |dj
| S )Né   z>Qé   r   é   ó    ių’’’)r   r   r   Ś	encryptorŚlenŚrangeŚupdateŚstructŚpackŚunpackŚjoin)	Śwrapping_keyŚaŚrŚbackendr   ŚnŚjŚiŚb© r   ś/usr/lib64/python3.6/keywrap.pyŚ
_wrap_core   s    ,r    c                sx   t |}t| dkrtdt dk r0tdt d dkrHtdd	} fd
dtdt dD }t| |||S )Né   é   é    z/The wrapping key must be a valid AES key lengthz)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   )Śkey_to_wrapr   r   ś
<listcomp>1   s    z aes_key_wrap.<locals>.<listcomp>)r!   r"   r#   )r   r   Ś
ValueErrorr   r    )r   r%   r   r   r   r   )r%   r   Śaes_key_wrap%   s    r(   c       
      C   sØ   t t| t |j }t|}xttdD ]p}xjtt|D ]Z}tjdtj	d|d || | d A ||  }|j
|}	|	d d }|	dd  ||< q>W q,W ||fS )Nr
   z>Qr   r   r   ių’’’)r   r   r   Ś	decryptorr   Śreversedr   r   r   r   r   )
r   r   r   r   r)   r   r   r   Zatrr   r   r   r   Ś_unwrap_core5   s    "

r+   c                s“   t |}t| dkrtddtjdt  }dt d  d } d|   t dkrtt| t |j }|j	|  }|S  fd	d
t
dt dD }t| |||S d S )Nr!   r"   r#   z/The wrapping key must be a valid AES key lengths   ¦YY¦z>ir   ó    c                s   g | ]} ||d   qS )r   r   )r$   r   )r%   r   r   r&   \   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    )r   r%   r   ŚaivZpadr   r   r   r   )r%   r   Śaes_key_wrap_with_paddingL   s    r.   c                st  t |}t dk rtdt| dkr0tdt dkrztt| t |j }|j }|d d }|dd  }d}nL fdd	t	d
t dD }|j
d
}	t|}t| |	||\}}dj|}tjd|dd  \}
d| |
 }t|d d d sNd|d  |
  k od| kn   sN|d
krTt|| d  d|  rTt |d
krb|S |d |  S d S )Nr!   zMust be at least 16 bytesr"   r#   z/The wrapping key must be a valid AES key lengthr   r   c                s   g | ]} ||d   qS )r   r   )r$   r   )Śwrapped_keyr   r   r&   q   s    z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r   z>Ié   s   ¦YY¦r,   )r!   r"   r#   )r   r   ŚInvalidUnwrapr'   r   r   r   r)   r   r   Śpopr+   r   r   r   r	   )r   r/   r   r)   r   r   Śdatar   r   Zencrypted_aivZmlir   )r/   r   Śaes_key_unwrap_with_padding`   s2    


*&
r4   c                s    t |}t dk rtdt d dkr4tdt| dkrHtdd	} fd
dtdt dD }|jd}t| |||\}}t||st dj|S )Nr"   zMust be at least 24 bytesr   r   z-The wrapped key must be a multiple of 8 bytesr!   r#   z/The wrapping key must be a valid AES key lengths   ¦¦¦¦¦¦¦¦c                s   g | ]} ||d   qS )r   r   )r$   r   )r/   r   r   r&      s    z"aes_key_unwrap.<locals>.<listcomp>r   )r!   r"   r#   )	r   r   r1   r'   r   r2   r+   r	   r   )r   r/   r   r-   r   r   r   )r/   r   Śaes_key_unwrap   s    

r5   c               @   s   e Zd ZdS )r1   N)Ś__name__Ś
__module__Ś__qualname__r   r   r   r   r1       s   r1   )N)N)N)N)Z
__future__r   r   r   r   Zcryptography.hazmat.backendsr   Z&cryptography.hazmat.primitives.ciphersr   Z1cryptography.hazmat.primitives.ciphers.algorithmsr   Z,cryptography.hazmat.primitives.ciphers.modesr   Z,cryptography.hazmat.primitives.constant_timer	   r    r(   r+   r.   r4   r5   Ś	Exceptionr1   r   r   r   r   Ś<module>   s   


+
