
    k7i                         S SK r S SKJr   " S S\S9r " S S\\S9r " S S	\\S9r " S
 S5      r " S S5      r " S S\5      r	 " S S\5      r
g)    N)ABCMetac                   8    \ rS rSrSrSrSrSrSrSr	S r
S rSrg)	JWEAlgorithmBase   z&Base interface for all JWE algorithms.NJWEalgc                     [         eNNotImplementedError)selfraw_datas     U/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7516/models.pyprepare_keyJWEAlgorithmBase.prepare_key       !!    c                     [         er
   r   )r   enc_algkeys      r   generate_preset JWEAlgorithmBase.generate_preset   r   r    )__name__
__module____qualname____firstlineno____doc__EXTRA_HEADERSnamedescriptionalgorithm_typealgorithm_locationr   r   __static_attributes__r   r   r   r   r      s)    0MDKN""r   r   )	metaclassc                   (    \ rS rSrSrSS jrS rSrg)JWEAlgorithm   zInterface for JWE algorithm conforming to RFC7518.
JWA specification (RFC7518) SHOULD implement the algorithms for JWE
with this base implementation.
Nc                     [         er
   r   )r   r   headersr   presets        r   wrapJWEAlgorithm.wrap   r   r   c                     [         er
   r   )r   r   ekr*   r   s        r   unwrapJWEAlgorithm.unwrap   r   r   r   r
   )r   r   r   r   r   r,   r0   r$   r   r   r   r'   r'      s    
""r   r'   c                   <    \ rS rSrSrS	S jrS rS	S jrS	S jrSr	g)
$JWEAlgorithmWithTagAwareKeyAgreement#   zInterface for JWE algorithm with tag-aware key agreement (in key agreement
with key wrapping mode).
ECDH-1PU is an example of such an algorithm.
Nc                     [         er
   r   )r   r   r   
sender_keyr+   s        r   !generate_keys_and_prepare_headersFJWEAlgorithmWithTagAwareKeyAgreement.generate_keys_and_prepare_headers)   r   r   c                     [         er
   r   )r   r   r*   r   r6   epkcektags           r   agree_upon_key_and_wrap_cek@JWEAlgorithmWithTagAwareKeyAgreement.agree_upon_key_and_wrap_cek,   s
     "!r   c                     [         er
   r   )r   r   r*   r   r6   r+   s         r   r,   )JWEAlgorithmWithTagAwareKeyAgreement.wrap1   r   r   c                     [         er
   r   )r   r   r/   r*   r   r6   r<   s          r   r0   +JWEAlgorithmWithTagAwareKeyAgreement.unwrap4   r   r   r   r
   )
r   r   r   r   r   r7   r=   r,   r0   r$   r   r   r   r3   r3   #   s    
""
""r   r3   c                   J    \ rS rSrSrSrSrSrSrSr	S r
S rS rS rS	 rS
rg)JWEEncAlgorithm8   Nr   encc                 H    [         R                  " U R                  S-  5      $ N   )osurandomCEK_SIZEr   s    r   generate_cekJWEEncAlgorithm.generate_cekA   s    zz$--1,--r   c                 H    [         R                  " U R                  S-  5      $ rH   )rJ   rK   IV_SIZErM   s    r   generate_ivJWEEncAlgorithm.generate_ivD   s    zz$,,!+,,r   c                 R    [        U5      S-  U R                  :w  a  [        S5      eg )NrI   zInvalid "iv" size)lenrQ   
ValueError)r   ivs     r   check_ivJWEEncAlgorithm.check_ivG   s'    r7Q;$,,&011 'r   c                     [         e)zEncrypt the given "msg" text.

:param msg: text to be encrypt in bytes
:param aad: additional authenticated data in bytes
:param iv: initialization vector in bytes
:param key: encrypted key in bytes
:return: (ciphertext, tag)
r   )r   msgaadrW   r   s        r   encryptJWEEncAlgorithm.encryptK   s
     "!r   c                     [         e)a   Decrypt the given cipher text.

:param ciphertext: ciphertext in bytes
:param aad: additional authenticated data in bytes
:param iv: initialization vector in bytes
:param tag: authentication tag in bytes
:param key: encrypted key in bytes
:return: message
r   )r   
ciphertextr\   rW   r<   r   s         r   decryptJWEEncAlgorithm.decryptV   s
     "!r   r   )r   r   r   r   r    r!   r"   r#   rQ   rL   rN   rR   rX   r]   ra   r$   r   r   r   rD   rD   8   s:    DKNGH.-2	"
"r   rD   c                   0    \ rS rSrSrSrSrSrS rS r	Sr
g)JWEZipAlgorithmc   Nr   zipc                     [         er
   r   r   ss     r   compressJWEZipAlgorithm.compressi   r   r   c                     [         er
   r   rh   s     r   
decompressJWEZipAlgorithm.decompressl   r   r   r   )r   r   r   r   r    r!   r"   r#   rj   rm   r$   r   r   r   rd   rd   c   s!    DKN""r   rd   c                   B   ^  \ rS rSrSrU 4S jrS r\S 5       rSr	U =r
$ )JWESharedHeaderp   zaShared header object for JWE.

Combines protected header and shared unprotected header together.
c                    > 0 nU(       a  UR                  U5        U(       a  UR                  U5        [        TU ]	  U5        U(       a  UO0 U l        U(       a  X l        g 0 U l        g r
   )updatesuper__init__	protectedunprotected)r   rv   rw   obj	__class__s       r   ru   JWESharedHeader.__init__v   sM    JJ{#JJy!&/R*5;2r   c                 \    U R                  U5        U R                  R                  U5        g r
   )rs   rv   )r   additions     r   update_protected JWESharedHeader.update_protected   s     Hh'r   c                 t    [        X5      (       a  U$ U " UR                  S5      UR                  S5      5      $ )Nrv   rw   )
isinstanceget)clsrx   s     r   	from_dictJWESharedHeader.from_dict   s1    cJ377;')?@@r   )rv   rw   )r   r   r   r   r   ru   r}   classmethodr   r$   __classcell__ry   s   @r   rp   rp   p   s(    
>( A Ar   rp   c                   ,   ^  \ rS rSrSrU 4S jrSrU =r$ )	JWEHeader   zHeader object for JWE.

Combines protected header, shared unprotected header
and specific recipient's unprotected header together.
c                 "  > 0 nU(       a  UR                  U5        U(       a  UR                  U5        U(       a  UR                  U5        [        TU ]	  U5        U(       a  UO0 U l        U(       a  UO0 U l        U(       a  X0l        g 0 U l        g r
   )rs   rt   ru   rv   rw   header)r   rv   rw   r   rx   ry   s        r   ru   JWEHeader.__init__   sf    JJ{#JJvJJy!&/R*5;2 &fBr   )r   rv   rw   )r   r   r   r   r   ru   r$   r   r   s   @r   r   r      s    / /r   r   )rJ   abcr   r   r'   r3   rD   rd   dictrp   r   r   r   r   <module>r      sd    	 " ""
"#w 
""+;w "*(" ("V
" 
"Ad A6/ /r   