3
ãde  ã               @   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ƒ ƒjƒ }t|ƒ}xttdƒD ]h}xbt|ƒD ]V}|j|||  ƒ}tj|d d… dd�|| | d A j	ddd�}|dd … ||< q4W q&W |j
ƒ dks¢t‚|dj|ƒ 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   ú]/var/www/agendate/envp3/lib/python3.6/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é   é   é    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   )r"   r   r    ú
<listcomp>5   s    z aes_key_wrap.<locals>.<listcomp>)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d�|| | d A j	ddd�||  }|j
|ƒ}|d d… }|dd … ||< q<W q*W |jƒ dks®t‚||fS )	Nr
   r   )r   r   r   )r   r   r   iøÿÿÿ)r   r   r   Ú	decryptorr   Úreversedr   r   r   r   r   r   r   )	r   r   r   r+   r   r   r   Zatrr   r   r   r    Ú_unwrap_core9   s    
r-   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ƒ ƒjƒ }|j|ˆ  ƒ}|jƒ dksˆt	‚|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¦é   r   )r   r   r   ó    r   c                s   g | ]}ˆ ||d  … ‘qS )r   r   )r'   r   )r"   r   r    r(   e   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#   ÚaivÚpadr   r   r   r   )r"   r    Úaes_key_wrap_with_paddingP   s    
r2   )r   Úwrapped_keyr#   r	   c                sx  t ˆ ƒdk rtdƒ‚t | ƒdkr(tdƒ‚t ˆ ƒdkr€tt| ƒtƒ ƒjƒ }|jˆ ƒ}|jƒ dksbt	‚|d d… }|dd … }d}nJ‡ fd	d
„t
dt ˆ ƒdƒD ƒ}|jdƒ}	t |ƒ}t| |	|ƒ\}}dj|ƒ}tj|dd … dd�}
d| |
 }t|d d… dƒ �sRd|d  |
  k �o"d| kn   �sR|dk�rXt|| d … d| ƒ �rXtƒ ‚|dk�rf|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   r   c                s   g | ]}ˆ ||d  … ‘qS )r   r   )r'   r   )r3   r   r    r(   }   s    z/aes_key_unwrap_with_padding.<locals>.<listcomp>r   r.   r   )r   s   ¦YY¦r/   )r$   r%   r&   )r   ÚInvalidUnwrapr)   r   r   r   r+   r   r   r   r   Úpopr-   r   r   r   r   )r   r3   r#   r+   Úoutr   Údatar   r   Zencrypted_aivZmlir   r   )r3   r    Úaes_key_unwrap_with_paddingi   s2    


*&
r8   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 ƒ}|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   )r3   r   r    r(   ¦   s    z"aes_key_unwrap.<locals>.<listcomp>r   )r$   r%   r&   )r   r4   r)   r   r5   r-   r   r   )r   r3   r#   r0   r   r   r   )r3   r    Úaes_key_unwrap—   s    

r9   c               @   s   e Zd ZdS )r4   N)Ú__name__Ú
__module__Ú__qualname__r   r   r   r    r4   ¯   s   r4   )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!   ÚAnyr*   ÚTupler-   r2   r8   r9   Ú	Exceptionr4   r   r   r   r    Ú<module>   s*   


-
