
    g                        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Z	 d	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 dd	Z	 d	 	 	 	 	 	 	 dd
Z	 d	 	 	 	 	 	 	 ddZ	 d	 	 	 	 	 	 	 ddZ G d de      Zy)    )annotationsN)Cipher)AES)ECB)bytes_eqc                   t        t        |       t                     j                         }t	        |      }t        d      D ]h  }t        |      D ]X  }|j                  |||   z         }t        j                  |d d d      ||z  |z   dz   z  j                  dd      }|dd  ||<   Z j |j                         dk(  sJ |dj                  |      z   S )	N      big	byteorder   lengthr       )r   r   r   	encryptorlenrangeupdateint
from_bytesto_bytesfinalizejoin)wrapping_keyarr   njibs           /var/www/html/FastMealFinder_FlaskServer-InitialRelease/venv/lib/python3.12/site-packages/cryptography/hazmat/primitives/keywrap.py
_wrap_corer$      s     s<(#%0::<IAA1X 	q 	A   QqT*Aq!u61q5A+/Jha5h1  RS6AaD		 3&&&sxx{?r   c                   t        |       dvrt        d      t        |      dk  rt        d      t        |      dz  dk7  rt        d      d}t        dt        |      d      D cg c]
  }|||dz     }}t        | ||      S c c}w )	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   )r   
ValueErrorr   r$   )r   key_to_wrapbackendr   r!   r   s         r#   aes_key_wrapr/   '   s    
 <,JKK
;"DEE
;!q HII+A).q#k2BA)FGAQQ	GAGlAq)) 	Hs   (Bc                   t        t        |       t                     j                         }t	        |      }t        t        d            D ]s  }t        t        |            D ]Z  }t        j                  |d      ||z  |z   dz   z  j                  dd      ||   z   }|j                  |      }|d d }|dd  ||<   \ u |j                         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   r1   r   r    r!   atrr"   s	            r#   _unwrap_corer4   :   s     s<(#%0::<IAAeAh 	%(# 	AqE2q1ukAoFha5h1AaD9C
   %A"1ARS6AaD		 3&&&a4Kr   c                   t        |       dvrt        d      dt        |      j                  dd      z   }dt        |      dz  z
  dz  }|d|z  z   }t        |      dk(  rVt        t	        |       t                     j                         }|j                  ||z         }|j                         d	k(  sJ |S t        d
t        |      d      D cg c]
  }|||dz     }}t        | ||      S c c}w )Nr&   r*      YY   r   r   r
       r   r   )r   r,   r   r   r   r   r   r   r   r   r$   )	r   r-   r.   aivpadr   r"   r!   r   s	            r#   aes_key_wrap_with_paddingr;   Q   s   
 <,JKK
K 0 9 9E !: ! C K 1$%
*C#-K
;13|,ce4>>@	S;./!!#s***-21c+6F-JK[QU#KK,Q// Ls   C.c                   t        |      dk  rt        d      t        |       dvrt        d      t        |      dk(  r^t        t	        |       t                     j                         }|j                  |      }|j                         dk(  sJ |d d }|dd  }d}nft        dt        |      d      D cg c]
  }|||dz     }	}|	j                  d      }
t        |	      }t        | |
|	      \  }}	dj                  |	      }t        j                  |d	d  d
      }d|z  |z
  }t        |d d	 d      r8d|dz
  z  |cxk  rd|z  k  r$n t               |dk7  rt        || d  d|z        s
t               |dk(  r|S |d |  S c c}w )Nr'   zMust be at least 16 bytesr&   r*   r   r
   r   r   r7   r   r   r6   r8   )r   InvalidUnwrapr,   r   r   r   r1   r   r   r   popr4   r   r   r   r   )r   wrapped_keyr.   r1   outr   datar   r!   r   encrypted_aivmlir"   s                r#   aes_key_unwrap_with_paddingrD   j   s   
 ;"788
<,JKK
;23|,ce4>>@	{+!!#s***G12w-21c+6F-JK[QU#KKaFL-;1xx{ ..12%.
0C	
Q#AQrU/0AE{S)AE) o F8D!Iw{;oAvCaRy/ Ls   6Fc                   t        |      dk  rt        d      t        |      dz  dk7  rt        d      t        |       dvrt        d      d}t        dt        |      d      D cg c]
  }|||dz     }}|j	                  d      }t        | ||      \  }}t        ||      s
t               d	j                  |      S c c}w )
Nr(   zMust be at least 24 bytesr
   r   z-The wrapped key must be a multiple of 8 bytesr&   r*   r+   r   )r   r=   r,   r   r>   r4   r   r   )r   r?   r.   r9   r!   r   r   s          r#   aes_key_unwraprF      s    
 ;"788
;!q KLL
<,JKK
-C).q#k2BA)FGAQQ	GAG	aAa+DAqAso88A; 	Hs   (Cc                      e Zd Zy)r=   N)__name__
__module____qualname__ r   r#   r=   r=      s    r   r=   )r   bytesr   rL   r   list[bytes]returnrL   )N)r   rL   r-   rL   r.   
typing.AnyrN   rL   )r   rL   r   rL   r   rM   rN   ztuple[bytes, list[bytes]])r   rL   r?   rL   r.   rO   rN   rL   )
__future__r   typing&cryptography.hazmat.primitives.ciphersr   1cryptography.hazmat.primitives.ciphers.algorithmsr   ,cryptography.hazmat.primitives.ciphers.modesr   ,cryptography.hazmat.primitives.constant_timer   r$   r/   r4   r;   rD   rF   	Exceptionr=   rK   r   r#   <module>rW      s0  
 #  9 A < A  	6 *** * 	*&  	4 000 0 	08 +++ + 	+b   	0	I 	r   