
    kKj(                        d dl Z d dlmZmZ ddlmZmZmZmZm	Z	m
Z
mZmZmZmZmZ ddlmZ ddlmZmZmZmZmZ ddlmZmZ g d	Zeeeef   Zd
ededdfdZd
ededdfdZd
ededdfdZdede e	e      dede!e"e e!ee	e   f      f   fdZ#de	e   dede
fdZ$de
dede	e   de"fdZ%dede e!ee	e   f      de"de"ddf
dZ&de
dede	e   de"de"f
dZ'y)    N)AnyUnion   )CompactEncryptionBaseJSONEncryptionGeneralJSONEncryptionFlattenedJSONEncryption	RecipientJWEAlgModelJWEEncModelJWEKeyAgreementJWEDirectEncryptionJWEKeyEncryptionJWEKeyWrapping)JWERegistry   )	JoseErrorDecodeErrorInvalidEncryptedKeyErrorInvalidExchangeKeyErrorConflictAlgorithmError)json_b64encodeurlsafe_b64encode)EncryptionDataperform_encryptperform_decryptobjregistryreturnc                    |j                  | j                  d         }t        || j                  |      \  }}|j	                         }t        |      | j                  d<   | j                  J d| j                  v r:|j                  | j                  d         }|j                  | j                        }n| j                  }t        | j                        }t        | t              r'| j                  r|dz   t        | j                        z   }|| j                  d<   |j                  ||||      \  }	}
t        ||||
       t        |	      | j                  d<   t        |
      | j                  d<   y )Nencivzip   .aad
ciphertexttag)get_enc	protectedpre_encrypt_recipients
recipientsgenerate_ivr   base64_segments	plaintextget_zipcompressr   
isinstancer   r%   encryptpost_encrypt_recipients)r   r   r!   cekdelayed_tasksr"   zip_r.   r%   r&   r'   s              i/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7516/message.pyr   r   '   sJ   


3==/
0C/S^^XNC
 
	B !2" 5C ==$$$ e 45MM#--0	MM	 
'C #)*swwDj,SWW55!$C kk)S"c:OJ CS9(9*(EC%!23!7C    c                 j    	 t        | |       y # t        $ r}t        |j                        d }~ww xY wN)_perform_decryptr   r   description)r   r   errors      r7   r   r   W   s2    -h'" -%++,,-s    	2-2c                 D   |j                  | j                  d         }| j                  d   }|j                  |       | j                  d   }| j                  d   }t	               }| j
                  D ]X  }|j                         }|j                  |d       |j                  |d         }		 t        |	|||      }
|j                  |
       Z |st        d      t        |      dkD  rt        d	      |j!                         }
t        |
      d
z  |j"                  k7  r"t%        j&                  |j"                  d
z        }
t)        | t*              r7t-        | j                        }| j.                  r%|dz   | j0                  d   z   }n| j0                  d   }|j3                  |||
||      }d| j                  v r5|j5                  | j                  d         }|j7                  |      | _        y || _        y # t        t        f$ r}|j                  r|Y d }~d }~ww xY w)Nr!   r"   r'   r&   TalgzInvalid recipientsr   zMultiple 'cek' found   r$   r%   r#   )r(   r)   bytes_segmentscheck_ivsetr+   headerscheck_headerget_algdecrypt_recipientaddAssertionErrorr   verify_all_recipientsr   lenpopcek_sizesecretstoken_bytesr1   r   r   r%   r-   decryptr/   
decompressr.   )r   r   r!   r"   r'   r&   cek_set	recipientrD   r?   r4   r=   r%   msgr6   s                  r7   r;   r;   ^   s   


3==/
0C			D	!BLL


U
#C##L1JeG^^	##%gt, wu~.	#Ci=CKK $ .//
7|a011
++-C
3x!|s||#!!#,,!"34#)*S]]+77*s22599C!!%(
++j#sB
4Ce 45,5 	* 	-- .	s   -G77HHHr!   r+   c                    d}g }|D ]  }t        ||      }|j                  r5t        |      dkD  rt        d|j                   d      t        || |      }P|s| j                         }t        |t              r|j                  ||f       t        |t        t        f      sJ |j                  ||      |_         ||fS )Nr8   r   z
Algorithm z SHOULD have 1 recipient only)__prepare_recipient_algorithmdirect_moderK   r   name__pre_encrypt_direct_modegenerate_cekr1   r   appendr   r   encrypt_cekencrypted_key)r!   r+   r   r4   r5   rS   r?   s          r7   r*   r*      s     CBDM	+Ix@??:",z#((C`-abb+Ci@C &&(#/$$c9%56 "#8H'IJJJ*-//#y*I	'-  . r8   rS   c                     | j                         }|j                  |       |j                  |d         }t        |t              r|j                  |        |S )Nr?   )rD   rE   rF   r1   r   prepare_ephemeral_key)rS   r   rD   r?   s       r7   rV   rV      sQ    !G'"
 

75>
*C#'!!),Jr8   r?   c                 0   t        | t              rP| j                  ||      }t        |      dz  |j                  k7  rQt        j                  |j                  dz        }n.t        | t              sJ | j                  |j                  |      }d|_	        |S )Nr@   r8   )
r1   r   encrypt_agreed_upon_keyrK   rM   rN   rO   r   compute_cekr]   )r?   r!   rS   r4   s       r7   rY   rY      s    #' ))#y9s8a<3<<'%%clla&78C #2333oocllI6 "IJr8   tasksr4   r'   c                     |D ]N  \  }}|j                   r|j                  | ||      }n|j                  | |      }|j                  ||      |_        P y r:   )	tag_aware encrypt_agreed_upon_key_with_tagra   wrap_cek_with_aukr]   )r!   rc   r4   r'   r?   rS   agreed_upon_keys          r7   r3   r3      sW      Y==!BB3	SVWO!99#yIO #&"7"7_"M	  r8   c                     | j                   rj|j                  r
t               t        | t              r| j                  ||      }|S t        | t              sJ | j                  |j                  |      }|S t        | t              r^| j                  r| j                  |||      }n| j                  ||      }|j                  J | j                  |j                  |      }|S t        | t        t        f      sJ | j                  |      }|S r:   )rW   r]   r   r1   r   decrypt_agreed_upon_keyr   rb   rM   re    decrypt_agreed_upon_key_with_tagunwrap_cek_with_aukr   r   decrypt_cek)r?   r!   rS   r'   r4   rh   s         r7   rG   rG      s   
 ""*,,c?+--c9=C: J3 c#6777//#,,	:C0 J/ 
C	)==!BB3	SVWO!99#yIO &&222%%i&=&=O J #0@ABBBooi(Jr8   )(rN   typingr   r   modelsr   r   r   r	   r
   r   r   r   r   r   r   r   r   errorsr   r   r   r   r   utilr   r   __all__r   r   r   r;   listtuplebytesr*   rV   rY   r3   rG    r8   r7   <module>rw      s        " 
 (*?AXXY-8 -8; -84 -8`- -; -4 --. -K -D -`	"&y~"6BM
5$u_in<=>>?>Ys^ { Wb ; [ YWZ^ `e (
N	
N!%3(G"HI
NPU
N\a
N	
N(; ([ (Ys^ (Z_ (di (r8   