
     h                     ~   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e	de	de j
        e	         d	e	fd
Z	 dde	de	de j        d	e	fdZde	de	de j
        e	         d	e j        e	e j
        e	         f         fdZ	 dde	de	de j        d	e	fdZ	 dde	de	de j        d	e	fdZ	 dde	de	de j        d	e	fdZ G d de          ZdS )    N)Cipher)AES)ECB)bytes_eqwrapping_keyarreturnc                 "   t          t          |           t                                                                }t	          |          }t          d          D ]}t          |          D ]r}|                    |||         z             }t                              |d d         d          ||z  |z   dz   z  	                    dd          }|dd          ||<   s|
                                dk    sJ |d                    |          z   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bs           b/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_corer$      s    s<((#%%00::<<IAA1XX 	 	q 	 	A   QqT**Aq!u661q5A+/Jha5h11  RSS6AaDD	 3&&&&sxx{{?r   key_to_wrapbackendc                 L   t          |           dvrt          d          t                    dk     rt          d          t                    dz  dk    rt          d          d}f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                 *    g | ]}||d z            S r    .0r!   r%   s     r#   
<listcomp>z aes_key_wrap.<locals>.<listcomp>5   &    GGGAQQY	GGGr   )r   
ValueErrorr   r$   )r   r%   r&   r   r	   s    `   r#   aes_key_wrapr6   &   s    
 <,,JKKK
;"DEEE
;!q  HIII+AGGGGq#k2B2BA)F)FGGGAlAq)))r   c                 2   t          t          |           t                                                                }t	          |          }t          t          d                    D ]}t          t          |                    D ]t}t                              |d          ||z  |z   dz   z  	                    dd          ||         z   }|
                    |          }|d d         }|dd          ||<   u|                                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	   r8   r   r    r!   atrr"   s	            r#   _unwrap_corer;   9   s    s<((#%%00::<<IAAeAhh 	 	%((## 	 	AqE22q1ukAoFha5h11AaD9C
   %%A"1"ARSS6AaDD	 3&&&&a4Kr   c                 L   t          |           dvrt          d          dt                                        dd          z   }dt                    dz  z
  dz  }d|z  z   t                    dk    rot          t	          |           t                                                                }|                    |z             }|                                d	k    sJ |S fd
t          dt                    d          D             }t          | ||          S )Nr(   r,      YY   r   r   r       r   c                 *    g | ]}||d z            S r/   r0   r1   s     r#   r3   z-aes_key_wrap_with_padding.<locals>.<listcomp>e   &    KKK[QU#KKKr   r   )r   r5   r   r   r   r   r   r   r   r   r$   )r   r%   r&   aivpadr   r"   r	   s    `      r#   aes_key_wrap_with_paddingrD   P   s4   
 <,,JKKK
K 0 0 9 9E !: ! ! C K  1$%
*C#-K
;13|,,cee44>>@@	S;.//!!##s****KKKKU1c+6F6F-J-JKKK,Q///r   wrapped_keyc                    t                    dk     rt          d          t          |           dvrt          d          t                    dk    rt          t	          |           t                                                                }|                              }|                                dk    sJ |d d         }|dd          }d}nwfdt          d	t                    d          D             }|
                    d	          }	t          |          }t          | |	|          \  }}d                    |          }t                              |d
d          d          }
d|z  |
z
  }t          |d d
         d          r;d|dz
  z  |
cxk     r	d|z  k    r%n n"|d	k    r*t          || d          d|z            st                      |d	k    r|S |d |          S )Nr)   zMust be at least 16 bytesr(   r,   r   r   r   c                 *    g | ]}||d z            S r/   r0   r2   r!   rE   s     r#   r3   z/aes_key_unwrap_with_padding.<locals>.<listcomp>}   rA   r   r   r>   r   r   r=   r?   )r   InvalidUnwrapr5   r   r   r   r8   r   r   r   popr;   r   r   r   r   )r   rE   r&   r8   outr   datar   r	   encrypted_aivmlir"   s    `          r#   aes_key_unwrap_with_paddingrO   i   s   
 ;"7888
<,,JKKK
;23|,,cee44>>@@	{++!!##s****G122wKKKKU1c+6F6F-J-JKKKaFFL-;;1xx{{ ..122%.
0
0C	
Q#AQrrU/00AE{S))))AE)))))FF8D!Iw{;;FooAvvCaRCyr   c                    t                    dk     rt          d          t                    dz  dk    rt          d          t          |           dvrt          d          d}f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                 *    g | ]}||d z            S r/   r0   rH   s     r#   r3   z"aes_key_unwrap.<locals>.<listcomp>   r4   r   r   )r   rI   r5   r   rJ   r;   r   r   )r   rE   r&   rB   r	   r   s    `    r#   aes_key_unwraprR      s    
 ;"7888
;!q  KLLL
<,,JKKK
-CGGGGq#k2B2BA)F)FGGGA	aAa++DAqAs oo88A;;r   c                       e Zd ZdS )rI   N)__name__
__module____qualname__r0   r   r#   rI   rI      s        Dr   rI   )N)typing&cryptography.hazmat.primitives.ciphersr   1cryptography.hazmat.primitives.ciphers.algorithmsr   ,cryptography.hazmat.primitives.ciphers.modesr   ,cryptography.hazmat.primitives.constant_timer   bytesListr$   Anyr6   Tupler;   rD   rO   rR   	ExceptionrI   r0   r   r#   <module>ra      s.    9 9 9 9 9 9 A A A A A A < < < < < < A A A A A A {5 	   6 * *** Z* 	* * * *& {5 \%U++,	   4 0 000 Z0 	0 0 0 08 + +++ Z+ 	+ + + +b   Z 	   0	 	 	 	 	I 	 	 	 	 	r   