Ë
    ”Âi¨5  ã                   óÞ   — d dl mZ d dl mZ d dl mZ d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d d	lm
Z
 d d
lmZ d dlmZ d dlmZ d dlmZ ddlmZ ddlmZ  G d„ d«      Zd„ Zd„ Zd„ Zy)é    )Újson_b64encode)Úto_bytes)Ú
to_unicode)Úurlsafe_b64encode)ÚBadSignatureError)ÚDecodeError)Ú#InvalidCritHeaderParameterNameError©ÚInvalidHeaderParameterNameError)ÚMissingAlgorithmError)ÚUnsupportedAlgorithmError)Úensure_dict)Úextract_header)Úextract_segmenté   )Ú	JWSHeader)Ú	JWSObjectc                   ó”   — e Zd ZU  eg d¢«      ZdZeed<   i Zdd„Z	e
d„ «       Zd„ Zdd„Zd	„ Zdd
„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zy)ÚJsonWebSignature)ÚalgÚjkuÚjwkÚkidÚx5uÚx5cÚx5tzx5t#S256ÚtypÚctyÚcriti è ÚMAX_CONTENT_LENGTHNc                 ó    — || _         || _        y ©N)Ú_private_headersÚ_algorithms)ÚselfÚ
algorithmsÚprivate_headerss      úP/var/www/timesheet/venv/lib/python3.12/site-packages/authlib/jose/rfc7515/jws.pyÚ__init__zJsonWebSignature.__init__*   s   € Ø /ˆÔØ%ˆÕó    c                 ót   — |r|j                   dk7  rt        d|›�«      ‚|| j                  |j                  <   y )NÚJWSzInvalid algorithm for JWS, )Úalgorithm_typeÚ
ValueErrorÚALGORITHMS_REGISTRYÚname)ÚclsÚ	algorithms     r(   Úregister_algorithmz#JsonWebSignature.register_algorithm.   s9   € á˜I×4Ñ4¸Ò=ÜÐ:¸9¸-ÐHÓIÐIØ2;ˆ×Ñ 	§¡Ò/r*   c                 ó`  — t        |d«      }| j                  |«       | j                  |«       | j                  |||«      \  }}t	        |j
                  «      }t        t        |«      «      }dj                  ||g«      }t        |j                  ||«      «      }	dj                  |||	g«      S )a"  Generate a JWS Compact Serialization. The JWS Compact Serialization
        represents digitally signed or MACed content as a compact, URL-safe
        string, per `Section 7.1`_.

        .. code-block:: text

            BASE64URL(UTF8(JWS Protected Header)) || '.' ||
            BASE64URL(JWS Payload) || '.' ||
            BASE64URL(JWS Signature)

        :param protected: A dict of protected header
        :param payload: A bytes/string of payload
        :param key: Private key used to generate signature
        :return: byte
        Nó   .)
r   Ú_validate_private_headersÚ_validate_crit_headersÚ_prepare_algorithm_keyr   Ú	protectedr   r   ÚjoinÚsign)
r%   r9   ÚpayloadÚkeyÚ
jws_headerr2   Úprotected_segmentÚpayload_segmentÚsigning_inputÚ	signatures
             r(   Úserialize_compactz"JsonWebSignature.serialize_compact4   s¦   € ô  ˜y¨$Ó/ˆ
Ø×&Ñ& yÔ1Ø×#Ñ# IÔ.Ø×4Ñ4°YÀÈÓM‰ˆ	�3ä*¨:×+?Ñ+?Ó@ÐÜ+¬H°WÓ,=Ó>ˆð Ÿ	™	Ð#4°oÐ"FÓGˆÜ% i§n¡n°]ÀCÓ&HÓIˆ	Ø�y‰yÐ+¨_¸iÐHÓIÐIr*   c                 ó  — t        |«      | j                  kD  rt        d«      ‚	 t        |«      }|j	                  dd«      \  }}|j                  dd«      \  }}t        |«      }	| j                  |	«       t        |	d«      }
t        |«      }|r ||«      }t        |«      }t        |
|d«      }| j                  |
||«      \  }}|j                  |||«      r|S t        |«      ‚# t        $ r}t        d«      |‚d}~ww xY w)aú  Exact JWS Compact Serialization, and validate with the given key.
        If key is not provided, the returned dict will contain the signature,
        and signing input values. Via `Section 7.1`_.

        :param s: text of JWS Compact Serialization
        :param key: key used to verify the signature
        :param decode: a function to decode payload data
        :return: JWSObject
        :raise: BadSignatureError

        .. _`Section 7.1`: https://tools.ietf.org/html/rfc7515#section-7.1
        zSerialization is too long.r5   r   zNot enough segmentsNÚcompact)Úlenr    r.   r   ÚrsplitÚsplitr   Ú_extract_headerr7   r   Ú_extract_payloadÚ_extract_signaturer   r8   Úverifyr   )r%   Úsr=   ÚdecoderA   Úsignature_segmentr?   r@   Úexcr9   r>   r<   rB   Úrvr2   s                  r(   Údeserialize_compactz$JsonWebSignature.deserialize_compactQ   s  € ô ˆq‹6�D×+Ñ+Ò+ÜÐ9Ó:Ð:ð	>Ü˜“ˆAØ/0¯x©x¸¸aÓ/@Ñ,ˆMÐ,Ø1>×1DÑ1DÀTÈ1Ó1MÑ.Ð˜ô $Ð$5Ó6ˆ	Ø×#Ñ# IÔ.Ü˜y¨$Ó/ˆ
ä" ?Ó3ˆÙÙ˜W“oˆGä&Ð'8Ó9ˆ	Ü�z 7¨IÓ6ˆØ×4Ñ4°ZÀÈ#ÓN‰ˆ	�3Ø×Ñ˜M¨9°cÔ:ØˆIÜ Ó#Ð#øô! ò 	>ÜÐ3Ó4¸#Ð=ûð	>ús   ¥5C% Ã%	C?Ã.C:Ã:C?c                 ó  ‡ ‡‡‡— t        ‰«      Šˆˆˆˆ fd„}t        |t        «      r+ |t        j                  |«      «      }t        ‰«      |d<   |S |D �cg c]  } |t        j                  |«      «      ‘Œ }}t        ‰«      |dœS c c}w )až  Generate a JWS JSON Serialization. The JWS JSON Serialization
        represents digitally signed or MACed content as a JSON object,
        per `Section 7.2`_.

        :param header_obj: A dict/list of header
        :param payload: A string/dict of payload
        :param key: Private key used to generate signature
        :return: JWSObject

        Example ``header_obj`` of JWS JSON Serialization::

            {
                "protected: {"alg": "HS256"},
                "header": {"kid": "jose"}
            }

        Pass a dict to generate flattened JSON Serialization, pass a list of
        header dict to generate standard JSON Serialization.
        c                 ó¬  •— ‰
j                  | «       ‰
j                  | j                  «       ‰
j                  | j                  «       ‰
j                  | ‰‰«      \  }}t        | j                  «      }dj                  |‰	g«      }t        |j                  ||«      «      }t        |«      t        |«      dœ}| j                  �| j                  |d<   |S )Nr5   )r9   rB   Úheader)r6   Ú_reject_unprotected_critrU   r7   r9   r8   r   r:   r   r;   r   )r>   Ú_algÚ_keyr?   rA   rB   rQ   r=   r<   r@   r%   s          €€€€r(   Ú_signz.JsonWebSignature.serialize_json.<locals>._sign�   sÉ   ø€ Ø×*Ñ*¨:Ô6ð ×)Ñ)¨*×*;Ñ*;Ô<Ø×'Ñ'¨
×(<Ñ(<Ô=Ø×4Ñ4°ZÀÈ#ÓN‰JˆD�$ä .¨z×/CÑ/CÓ DÐØ ŸI™IÐ'8¸/Ð&JÓKˆMÜ)¨$¯)©)°MÀ4Ó*HÓIˆIô (Ð(9Ó:Ü'¨	Ó2ñˆBð × Ñ Ð,Ø)×0Ñ0��8‘ØˆIr*   r<   )r<   Ú
signatures)r   Ú
isinstanceÚdictr   Ú	from_dictr   )	r%   Ú
header_objr<   r=   rY   ÚdataÚhrZ   r@   s	   ` ``    @r(   Úserialize_jsonzJsonWebSignature.serialize_jsonw   s�   û€ ô( )¨Ó1ˆ÷	ô* �j¤$Ô'Ùœ×,Ñ,¨ZÓ8Ó9ˆDÜ(¨Ó9ˆD�‰OØˆKà=GÖH¸‘eœI×/Ñ/°Ó2Õ3ÐHˆ
ÐHÜ% oÓ6ÀjÑQÐQùò Is   Á"B	c                 ó²  — t        |d«      }|j                  d«      }|€t        d«      ‚t        |«      }t	        |«      }|r ||«      }d|vr3| j                  ||||«      \  }}t        ||d«      }|r|S t        |«      ‚g }	d}
|d   D ]/  }| j                  ||||«      \  }}|	j                  |«       |rŒ.d}
Œ1 t        |	|d«      }|
r|S t        |«      ‚)	a  Exact JWS JSON Serialization, and validate with the given key.
        If key is not provided, it will return a dict without signature
        verification. Header will still be validated. Via `Section 7.2`_.

        :param obj: text of JWS JSON Serialization
        :param key: key used to verify the signature
        :param decode: a function to decode payload data
        :return: JWSObject
        :raise: BadSignatureError

        .. _`Section 7.2`: https://tools.ietf.org/html/rfc7515#section-7.2
        r,   r<   zMissing "payload" valuerZ   ÚflatTFÚjson)	r   Úgetr   r   rJ   Ú_validate_json_jwsr   r   Úappend)r%   Úobjr=   rN   r@   r<   r>   ÚvalidrQ   ÚheadersÚis_validr^   s               r(   Údeserialize_jsonz!JsonWebSignature.deserialize_jsonª   s  € ô ˜#˜uÓ%ˆàŸ'™' )Ó,ˆØÐ"ÜÐ7Ó8Ð8ä" ?Ó3ˆÜ" ?Ó3ˆÙÙ˜W“oˆGà˜sÑ"à $× 7Ñ 7Ø ¨#¨só!ÑˆJ˜ô ˜: w°Ó7ˆBÙØ�	Ü# BÓ'Ð'àˆØˆØ˜lÑ+ò 	!ˆJØ $× 7Ñ 7Ø ¨*°có!ÑˆJ˜ð �N‰N˜:Ô&ÚØ ‘ð	!ô �w ¨Ó0ˆÙØˆIÜ Ó#Ð#r*   c                 ó¨   — t        |t        t        f«      r| j                  |||«      S d|v r| j                  |||«      S | j	                  |||«      S )aØ  Generate a JWS Serialization. It will automatically generate a
        Compact or JSON Serialization depending on the given header. If a
        header is in a JSON header format, it will call
        :meth:`serialize_json`, otherwise it will call
        :meth:`serialize_compact`.

        :param header: A dict/list of header
        :param payload: A string/dict of payload
        :param key: Private key used to generate signature
        :return: byte/dict
        r9   )r[   ÚlistÚtuplera   rC   )r%   rU   r<   r=   s       r(   Ú	serializezJsonWebSignature.serializeÜ   sY   € ô �fœt¤U˜mÔ,Ø×&Ñ& v¨w¸Ó<Ð<Ø˜&Ñ Ø×&Ñ& v¨w¸Ó<Ð<Ø×%Ñ% f¨g°sÓ;Ð;r*   c                 óî   — t        |t        «      r| j                  |||«      S t        |«      }|j	                  d«      r$|j                  d«      r| j                  |||«      S | j                  |||«      S )aÖ  Deserialize JWS Serialization, both compact and JSON format.
        It will automatically deserialize depending on the given JWS.

        :param s: text of JWS Compact/JSON Serialization
        :param key: key used to verify the signature
        :param decode: a function to decode payload data
        :return: dict
        :raise: BadSignatureError

        If key is not provided, it will still deserialize the serialization
        without verification.
        ó   {ó   })r[   r\   rl   r   Ú
startswithÚendswithrR   )r%   rM   r=   rN   s       r(   ÚdeserializezJsonWebSignature.deserializeî   sm   € ô �aœÔØ×(Ñ(¨¨C°Ó8Ð8ä�Q‹KˆØ�<‰<˜Ô !§*¡*¨TÔ"2Ø×(Ñ(¨¨C°Ó8Ð8Ø×'Ñ'¨¨3°Ó7Ð7r*   c                 ó<  — d|vr
t        «       ‚|d   }|| j                  vr
t        «       ‚| j                  |   }| j                  €|j                  r"t        «       ‚|| j                  vr
t        «       ‚t        |«      r	 |||«      }|j                  |«      }||fS )Nr   )r   r/   r   r$   Ú
deprecatedÚcallableÚprepare_key)r%   rU   r<   r=   r   r2   s         r(   r8   z'JsonWebSignature._prepare_algorithm_key  s¥   € Ø˜ÑÜ'Ó)Ð)à�U‰mˆØ�d×.Ñ.Ñ.Ü+Ó-Ð-à×,Ñ,¨SÑ1ˆ	Ø×ÑÐ#Ø×#Ò#Ü/Ó1Ð1Ø˜×(Ñ(Ñ(Ü+Ó-Ð-ä�CŒ=Ù�f˜gÓ&ˆCØ×#Ñ# CÓ(ˆØ˜#ˆ~Ðr*   c                 ó´   — | j                   �L| j                  j                  «       }|j                  | j                   «      }|D ]  }||vsŒt	        |«      ‚ y y r"   )r#   Ú!REGISTERED_HEADER_PARAMETER_NAMESÚcopyÚunionr   )r%   rU   ÚnamesÚks       r(   r6   z*JsonWebSignature._validate_private_headers  s^   € ð × Ñ Ð,Ø×:Ñ:×?Ñ?ÓAˆEØ—K‘K × 5Ñ 5Ó6ˆEàò =�Ø˜E’>Ü9¸!Ó<Ð<ñ=ð	 -r*   c                 ó(   — |rd|v rt        d«      ‚yy)uG   Reject 'crit' when found in the unprotected header (RFC 7515 Â§4.1.11).r   Nr
   )r%   Úunprotected_headers     r(   rV   z)JsonWebSignature._reject_unprotected_crit"  s    € á &Ð,>Ñ">Ü1°&Ó9Ð9ð #?Ðr*   c                 ó>  — d|v r™|d   }t        |t        «      rt        d„ |D «       «      st        d«      ‚| j                  j                  «       }| j                  r|j                  | j                  «      }|D ]   }||vrt        |«      ‚||vsŒt        |«      ‚ y y )Nr   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­wr"   )r[   Ústr)Ú.0Úxs     r(   ú	<genexpr>z:JsonWebSignature._validate_crit_headers.<locals>.<genexpr>+  s   è ø€ ò =Ø'(”
˜1œc×"ñ=ùs   ‚)	r[   rn   Úallr   r|   r}   r#   r~   r	   )r%   rU   Úcrit_headersr   r€   s        r(   r7   z'JsonWebSignature._validate_crit_headers'  s©   € Ø�VÑØ! &™>ˆLä˜l¬DÔ1¼ñ =Ø,8ô=ô :ô 6°fÓ=Ð=Ø×:Ñ:×?Ñ?ÓAˆEØ×$Ò$ØŸ™ D×$9Ñ$9Ó:�Ø!ò A�Ø˜E‘>Ü=¸aÓ@Ð@Ø˜f’_Ü=¸aÓ@Ð@ñ	Að r*   c                 ó  — |j                  d«      }|st        d«      ‚|j                  d«      }|st        d«      ‚t        |«      }t        |«      }|j                  d«      }|rt	        |t
        «      st        d«      ‚| j                  |«       | j                  |«       t        ||«      }	| j                  |	||«      \  }
}dj                  ||g«      }t        t        |«      «      }|
j                  |||«      r|	dfS |	d	fS )
Nr9   zMissing "protected" valuerB   zMissing "signature" valuerU   zInvalid "header" valuer5   TF)re   r   r   rI   r[   r\   rV   r7   r   r8   r:   rK   rL   )r%   r@   r<   r^   r=   r?   rO   r9   rU   r>   r2   rA   rB   s                r(   rf   z#JsonWebSignature._validate_json_jws8  s  € Ø&ŸN™N¨;Ó7ÐÙ ÜÐ9Ó:Ð:à&ŸN™N¨;Ó7ÐÙ ÜÐ9Ó:Ð:ä$Ð%6Ó7ÐÜ#Ð$5Ó6ˆ	Ø—‘ Ó)ˆÙœ* V¬TÔ2ÜÐ6Ó7Ð7ð 	×%Ñ% fÔ-ð
 	×#Ñ# IÔ.Ü˜y¨&Ó1ˆ
Ø×4Ñ4°ZÀÈ#ÓN‰ˆ	�3ØŸ	™	Ð#4°oÐ"FÓGˆÜ&¤xÐ0AÓ'BÓCˆ	Ø×Ñ˜M¨9°cÔ:Ø˜tÐ#Ð#Ø˜5Ð Ð r*   )NNr"   )Ú__name__Ú
__module__Ú__qualname__Ú	frozensetr|   r    ÚintÚ__annotations__r/   r)   Úclassmethodr3   rC   rR   ra   rl   rp   rv   r8   r6   rV   r7   rf   © r*   r(   r   r      s}   … á(1ò	
ó)Ð%ð  %Ð˜Ó$ð Ðó&ð ñ<ó ð<ò
Jó:$$òL1Róf0$òd<ó$8ò*ò(	=ò:ò
Aó"!r*   r   c                 ó"   — t        | t        «      S r"   )r   r   )Úheader_segments    r(   rI   rI   W  s   € Ü˜.¬+Ó6Ð6r*   c                 ó$   — t        | t        d«      S )NrB   ©r   r   )rO   s    r(   rK   rK   [  s   € ÜÐ,¬k¸;ÓGÐGr*   c                 ó$   — t        | t        d«      S )Nr<   r—   )r@   s    r(   rJ   rJ   _  s   € Ü˜?¬K¸ÓCÐCr*   N)Úauthlib.common.encodingr   r   r   r   Úauthlib.jose.errorsr   r   r	   r   r   r   Úauthlib.jose.utilr   r   r   Úmodelsr   r   r   rI   rK   rJ   r“   r*   r(   ú<module>r�      sP   ðÝ 2Ý ,Ý .Ý 5Ý 1Ý +Ý CÝ ?Ý 5Ý 9Ý )Ý ,Ý -å Ý ÷A!ñ A!òH
7òHóDr*   