
    ([f                         d dl Z d dlmZ  G d de          Z G d dee          Z G d d	ee          Z G d
 d          Z G d d          Z G d de          Z	 G d de          Z
dS )    N)ABCMetac                   2    e Zd ZdZdZdZdZdZdZd Z	d Z
dS )JWEAlgorithmBasez+Base interface for all JWE algorithms.
    NJWEalgc                     t           NNotImplementedError)selfraw_datas     O/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/rfc7516/models.pyprepare_keyzJWEAlgorithmBase.prepare_key       !!    c                     t           r	   r
   )r   enc_algkeys      r   generate_presetz JWEAlgorithmBase.generate_preset   r   r   )__name__
__module____qualname____doc__EXTRA_HEADERSnamedescriptionalgorithm_typealgorithm_locationr   r    r   r   r   r      sV         MDKN" " "" " " " "r   r   )	metaclassc                        e Zd ZdZddZd ZdS )JWEAlgorithmzInterface for JWE algorithm conforming to RFC7518.
    JWA specification (RFC7518) SHOULD implement the algorithms for JWE with this base implementation.
    Nc                     t           r	   r
   )r   r   headersr   presets        r   wrapzJWEAlgorithm.wrap   r   r   c                     t           r	   r
   )r   r   ekr$   r   s        r   unwrapzJWEAlgorithm.unwrap   r   r   r	   )r   r   r   r   r&   r)   r   r   r   r"   r"      sA         " " " "" " " " "r   r"   c                   0    e Zd ZdZddZd ZddZddZdS )$JWEAlgorithmWithTagAwareKeyAgreementzInterface 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                     t           r	   r
   )r   r   r   
sender_keyr%   s        r   !generate_keys_and_prepare_headerszFJWEAlgorithmWithTagAwareKeyAgreement.generate_keys_and_prepare_headers%   r   r   c                     t           r	   r
   )r   r   r$   r   r-   epkcektags           r   agree_upon_key_and_wrap_cekz@JWEAlgorithmWithTagAwareKeyAgreement.agree_upon_key_and_wrap_cek(   r   r   c                     t           r	   r
   )r   r   r$   r   r-   r%   s         r   r&   z)JWEAlgorithmWithTagAwareKeyAgreement.wrap+   r   r   c                     t           r	   r
   )r   r   r(   r$   r   r-   r2   s          r   r)   z+JWEAlgorithmWithTagAwareKeyAgreement.unwrap.   r   r   r	   )r   r   r   r   r.   r3   r&   r)   r   r   r   r+   r+   !   si         " " " "" " "" " " "" " " " " "r   r+   c                   D    e Zd ZdZdZdZdZdZdZd Z	d Z
d Zd Zd ZdS )	JWEEncAlgorithmNr   encc                 :    t          j        | j        dz            S N   )osurandomCEK_SIZEr   s    r   generate_cekzJWEEncAlgorithm.generate_cek;   s    z$-1,---r   c                 :    t          j        | j        dz            S r:   )r<   r=   IV_SIZEr?   s    r   generate_ivzJWEEncAlgorithm.generate_iv>   s    z$,!+,,,r   c                 Z    t          |          dz  | j        k    rt          d          d S )Nr;   zInvalid "iv" size)lenrB   
ValueError)r   ivs     r   check_ivzJWEEncAlgorithm.check_ivA   s0    r77Q;$,&&0111 '&r   c                     t           )a  Encrypt 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aadrG   r   s        r   encryptzJWEEncAlgorithm.encryptE   s
     "!r   c                     t           )a8  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   
ciphertextrK   rG   r2   r   s         r   decryptzJWEEncAlgorithm.decryptP   s
     "!r   )r   r   r   r   r   r   r   rB   r>   r@   rC   rH   rL   rO   r   r   r   r7   r7   2   s~        DKNGH. . .- - -2 2 2	" 	" 	"
" 
" 
" 
" 
"r   r7   c                   *    e Zd ZdZdZdZdZd Zd ZdS )JWEZipAlgorithmNr   zipc                     t           r	   r
   r   ss     r   compresszJWEZipAlgorithm.compressc   r   r   c                     t           r	   r
   rT   s     r   
decompresszJWEZipAlgorithm.decompressf   r   r   )	r   r   r   r   r   r   r   rV   rX   r   r   r   rQ   rQ   ]   sG        DKN" " "" " " " "r   rQ   c                   >     e Zd ZdZ fdZd Zed             Z xZS )JWESharedHeaderziShared header object for JWE.

    Combines protected header and shared unprotected header together.
    c                     i }|r|                     |           |r|                     |           t                                          |           |r|ni | _        |r|ni | _        d S r	   )updatesuper__init__	protectedunprotected)r   r_   r`   obj	__class__s       r   r^   zJWESharedHeader.__init__o   s{     	"JJy!!! 	$JJ{###&/7R*5=;;2r   c                 d    |                      |           | j                             |           d S r	   )r\   r_   )r   additions     r   update_protectedz JWESharedHeader.update_protectedy   s0    Hh'''''r   c                     t          ||           r|S  | |                    d          |                    d                    S )Nr_   r`   )
isinstanceget)clsra   s     r   	from_dictzJWESharedHeader.from_dict}   sC    c3 	Js377;'')?)?@@@r   )	r   r   r   r   r^   re   classmethodrj   __classcell__rb   s   @r   rZ   rZ   j   ss         > > > > >( ( ( A A [A A A A Ar   rZ   c                   "     e Zd ZdZ fdZ xZS )	JWEHeaderzHeader object for JWE.

    Combines protected header, shared unprotected header and specific recipient's unprotected header together.
    c                    i }|r|                     |           |r|                     |           |r|                     |           t                                          |           |r|ni | _        |r|ni | _        |r|ni | _        d S r	   )r\   r]   r^   r_   r`   header)r   r_   r`   rq   ra   rb   s        r   r^   zJWEHeader.__init__   s     	"JJy!!! 	$JJ{### 	JJv&/7R*5=;;2 &.ffBr   )r   r   r   r   r^   rl   rm   s   @r   ro   ro      sB         / / / / / / / / /r   ro   )r<   abcr   r   r"   r+   r7   rQ   dictrZ   ro   r   r   r   <module>rt      sj   				      " " " " " " " " """ " " " "#w " " " "" " " " "+;w " " " ""(" (" (" (" (" (" (" ("V
" 
" 
" 
" 
" 
" 
" 
"A A A A Ad A A A4/ / / / / / / / / /r   