§
    (ê[f,  ã                   óŠ   — d dl mZmZmZmZ d dlmZmZmZ d dl	m
Z
mZmZmZmZ ddlmZmZ  G d„ d¦  «        Zd„ Zd	„ Zd
„ ZdS )é    )Úto_bytesÚ
to_unicodeÚurlsafe_b64encodeÚjson_b64encode)Úextract_headerÚextract_segmentÚensure_dict)ÚDecodeErrorÚMissingAlgorithmErrorÚUnsupportedAlgorithmErrorÚBadSignatureErrorÚInvalidHeaderParameterNameErroré   )Ú	JWSHeaderÚ	JWSObjectc                   ó†   — e Zd Z eg d¢¦  «        Z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S )ÚJsonWebSignature)ÚalgÚjkuÚjwkÚkidÚx5uÚx5cÚx5tzx5t#S256ÚtypÚctyÚcritNc                 ó"   — || _         || _        d S ©N)Ú_private_headersÚ_algorithms)ÚselfÚ
algorithmsÚprivate_headerss      úL/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/rfc7515/jws.pyÚ__init__zJsonWebSignature.__init__!   s   € Ø /ˆÔØ%ˆÔÐÐó    c                 ób   — |r|j         dk    rt          d|›�¦  «        ‚|| j        |j        <   d S )NÚJWSzInvalid algorithm for JWS, )Úalgorithm_typeÚ
ValueErrorÚALGORITHMS_REGISTRYÚname)ÚclsÚ	algorithms     r%   Úregister_algorithmz#JsonWebSignature.register_algorithm%   sI   € àð 	=˜IÔ4¸Ò=Ð=ÝØ;¨iÐ;Ð;ñ=ô =ð =à2;ˆÔ 	¤Ñ/Ð/Ð/r'   c                 ó„  — t          |d¦  «        }|                      |¦  «         |                      |||¦  «        \  }}t          |j        ¦  «        }t          t          |¦  «        ¦  «        }d                     ||g¦  «        }t          |                     ||¦  «        ¦  «        }	d                     |||	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Ú_prepare_algorithm_keyr   Ú	protectedr   r   ÚjoinÚsign)
r"   r5   ÚpayloadÚkeyÚ
jws_headerr/   Úprotected_segmentÚpayload_segmentÚsigning_inputÚ	signatures
             r%   Úserialize_compactz"JsonWebSignature.serialize_compact,   s¶   € õ  ˜y¨$Ñ/Ô/ˆ
Ø×&Ò& yÑ1Ô1Ð1Ø×4Ò4°YÀÈÑMÔM‰ˆ	�3å*¨:Ô+?Ñ@Ô@ÐÝ+­H°WÑ,=Ô,=Ñ>Ô>ˆð Ÿ	š	Ð#4°oÐ"FÑGÔGˆÝ% i§n¢n°]ÀCÑ&HÔ&HÑIÔIˆ	Ø�yŠyÐ+¨_¸iÐHÑIÔIÐIr'   c                 óü  — 	 t          |¦  «        }|                     dd¦  «        \  }}|                     dd¦  «        \  }}n# t          $ r t	          d¦  «        ‚w xY wt          |¦  «        }t          |d¦  «        }	t          |¦  «        }
|r ||
¦  «        }
t          |¦  «        }t          |	|
d¦  «        }|  
                    |	|
|¦  «        \  }}|                     |||¦  «        r|S t          |¦  «        ‚)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
        r2   r   zNot enough segmentsNÚcompact)r   ÚrsplitÚsplitr+   r
   Ú_extract_headerr   Ú_extract_payloadÚ_extract_signaturer   r4   Úverifyr   )r"   Úsr9   Údecoder=   Úsignature_segmentr;   r<   r5   r:   r8   r>   Úrvr/   s                 r%   Údeserialize_compactz$JsonWebSignature.deserialize_compactH   s  € ð	5Ý˜‘”ˆAØ/0¯xªx¸¸aÑ/@Ô/@Ñ,ˆMÐ,Ø1>×1DÒ1DÀTÈ1Ñ1MÔ1MÑ.Ð˜˜øÝð 	5ð 	5ð 	5ÝÐ3Ñ4Ô4Ð4ð	5øøøõ $Ð$5Ñ6Ô6ˆ	Ý˜y¨$Ñ/Ô/ˆ
å" ?Ñ3Ô3ˆØð 	&Ø�f˜W‘o”oˆGå&Ð'8Ñ9Ô9ˆ	Ý�z 7¨IÑ6Ô6ˆØ×4Ò4°ZÀÈ#ÑNÔN‰ˆ	�3Ø×Ò˜M¨9°cÑ:Ô:ð 	ØˆIÝ Ñ#Ô#Ð#s   ‚AA ÁAc                 ó  ‡ ‡‡‡‡— t          ‰¦  «        Šˆˆˆˆ fd„Št          |t          ¦  «        r1 ‰t          j        |¦  «        ¦  «        }t          ‰¦  «        |d<   |S ˆfd„|D ¦   «         }t          ‰¦  «        |dœS )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                 ób  •— ‰
                      | ¦  «         ‰
                     | ‰‰¦  «        \  }}t          | j        ¦  «        }d                     |‰	g¦  «        }t          |                     ||¦  «        ¦  «        }t          |¦  «        t          |¦  «        dœ}| j        �
| j        |d<   |S )Nr2   )r5   r>   Úheader)	r3   r4   r   r5   r6   r   r7   r   rO   )r:   Ú_algÚ_keyr;   r=   r>   rK   r9   r8   r<   r"   s          €€€€r%   Ú_signz.JsonWebSignature.serialize_json.<locals>._sign€   s¶   ø€ Ø×*Ò*¨:Ñ6Ô6Ð6Ø×4Ò4°ZÀÈ#ÑNÔN‰JˆD�$å .¨zÔ/CÑ DÔ DÐØ ŸIšIÐ'8¸/Ð&JÑKÔKˆMÝ)¨$¯)ª)°MÀ4Ñ*HÔ*HÑIÔIˆIõ (Ð(9Ñ:Ô:Ý'¨	Ñ2Ô2ðð ˆBð Ô Ð,Ø)Ô0��8‘ØˆIr'   r8   c                 óJ   •— g | ]} ‰t          j        |¦  «        ¦  «        ‘Œ S © )r   Ú	from_dict)Ú.0ÚhrR   s     €r%   ú
<listcomp>z3JsonWebSignature.serialize_json.<locals>.<listcomp>•   s.   ø€ ÐHÐHÐH¸�e�e�IÔ/°Ñ2Ô2Ñ3Ô3ÐHÐHÐHr'   )r8   Ú
signatures)r   Ú
isinstanceÚdictr   rU   r   )r"   Ú
header_objr8   r9   ÚdatarY   rR   r<   s   ` ``  @@r%   Úserialize_jsonzJsonWebSignature.serialize_jsonj   s¸   øøøøø€ õ( )¨Ñ1Ô1ˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	õ  �j¥$Ñ'Ô'ð 	Ø�5�Ô,¨ZÑ8Ô8Ñ9Ô9ˆDÝ(¨Ñ9Ô9ˆD�‰OØˆKàHÐHÐHÐH¸ZÐHÑHÔHˆ
å! /Ñ2Ô2Ø$ð
ð 
ð 	
r'   c                 ó  — t          |d¦  «        }|                     d¦  «        }|€t          d¦  «        ‚t          |¦  «        }t	          |¦  «        }|r ||¦  «        }d|vr?|                      ||||¦  «        \  }}t          ||d¦  «        }|r|S t          |¦  «        ‚g }	d}
|d         D ]6}|                      ||||¦  «        \  }}|	                     |¦  «         |sd}
Œ7t          |	|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)   r8   NzMissing "payload" valuerY   ÚflatTFÚjson)	r	   Úgetr
   r   rE   Ú_validate_json_jwsr   r   Úappend)r"   Úobjr9   rI   r<   r8   r:   ÚvalidrK   ÚheadersÚis_validr\   s               r%   Údeserialize_jsonz!JsonWebSignature.deserialize_json›   sQ  € õ ˜#˜uÑ%Ô%ˆàŸ'š' )Ñ,Ô,ˆØÐ"ÝÐ7Ñ8Ô8Ð8å" ?Ñ3Ô3ˆÝ" ?Ñ3Ô3ˆØð 	&Ø�f˜W‘o”oˆGà˜sÐ"Ð"à $× 7Ò 7Ø ¨#¨sñ!4ô !4ÑˆJ˜õ ˜: w°Ñ7Ô7ˆBØð Ø�	Ý# BÑ'Ô'Ð'àˆØˆØ˜lÔ+ð 	!ð 	!ˆJØ $× 7Ò 7Ø ¨*°cñ!;ô !;ÑˆJ˜à�NŠN˜:Ñ&Ô&Ð&Øð !Ø �øå�w ¨Ñ0Ô0ˆØð 	ØˆIÝ Ñ#Ô#Ð#r'   c                 óÌ   — t          |t          t          f¦  «        r|                      |||¦  «        S d|v r|                      |||¦  «        S |                      |||¦  «        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
        r5   )rZ   ÚlistÚtupler^   r?   )r"   rO   r8   r9   s       r%   Ú	serializezJsonWebSignature.serializeË   sm   € õ �f�t¥U˜mÑ,Ô,ð 	=Ø×&Ò& v¨w¸Ñ<Ô<Ð<Ø˜&Ð Ð Ø×&Ò& v¨w¸Ñ<Ô<Ð<Ø×%Ò% f¨g°sÑ;Ô;Ð;r'   c                 ó(  — t          |t          ¦  «        r|                      |||¦  «        S t          |¦  «        }|                     d¦  «        r,|                     d¦  «        r|                      |||¦  «        S |                      |||¦  «        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.
        ó   {ó   })rZ   r[   ri   r   Ú
startswithÚendswithrL   )r"   rH   r9   rI   s       r%   ÚdeserializezJsonWebSignature.deserializeÝ   s�   € õ �a�ÑÔð 	9Ø×(Ò(¨¨C°Ñ8Ô8Ð8å�Q‰KŒKˆØ�<Š<˜ÑÔð 	9 !§*¢*¨TÑ"2Ô"2ð 	9Ø×(Ò(¨¨C°Ñ8Ô8Ð8Ø×'Ò'¨¨3°Ñ7Ô7Ð7r'   c                 ó@  — d|vrt          ¦   «         ‚|d         }| j        �|| j        vrt          ¦   «         ‚|| j        vrt          ¦   «         ‚| j        |         }t	          |¦  «        r |||¦  «        }n|€d|v r|d         }|                     |¦  «        }||fS )Nr   r   )r   r!   r   r,   ÚcallableÚprepare_key)r"   rO   r8   r9   r   r/   s         r%   r4   z'JsonWebSignature._prepare_algorithm_keyò   s¿   € Ø˜ÐÐÝ'Ñ)Ô)Ð)à�UŒmˆØÔÐ'¨C°tÔ7GÐ,GÐ,GÝ+Ñ-Ô-Ð-Ø�dÔ.Ð.Ð.Ý+Ñ-Ô-Ð-àÔ,¨SÔ1ˆ	Ý�C‰=Œ=ð 	 Ø�#�f˜gÑ&Ô&ˆCˆCØˆ[˜U f˜_˜_Ø˜”-ˆCØ×#Ò# CÑ(Ô(ˆØ˜#ˆ~Ðr'   c                 ó®   — | j         �K| j                             ¦   «         }|                     | j         ¦  «        }|D ]}||vrt	          |¦  «        ‚Œd S d S r   )r    Ú!REGISTERED_HEADER_PARAMETER_NAMESÚcopyÚunionr   )r"   rO   ÚnamesÚks       r%   r3   z*JsonWebSignature._validate_private_headers  sr   € ð Ô Ð,ØÔ:×?Ò?ÑAÔAˆEØ—K’K Ô 5Ñ6Ô6ˆEàð =ð =�Ø˜E�>�>Ý9¸!Ñ<Ô<Ð<ð "ð -Ð,ð=ð =r'   c                 óD  — |                      d¦  «        }|st          d¦  «        ‚|                      d¦  «        }|st          d¦  «        ‚t          |¦  «        }t          |¦  «        }|                      d¦  «        }|r$t	          |t
          ¦  «        st          d¦  «        ‚t          ||¦  «        }	|                      |	||¦  «        \  }
}d                     ||g¦  «        }t          t          |¦  «        ¦  «        }|
 
                    |||¦  «        r|	dfS |	d	fS )
Nr5   zMissing "protected" valuer>   zMissing "signature" valuerO   zInvalid "header" valuer2   TF)rb   r
   r   rD   rZ   r[   r   r4   r6   rF   rG   )r"   r<   r8   r\   r9   r;   rJ   r5   rO   r:   r/   r=   r>   s                r%   rc   z#JsonWebSignature._validate_json_jws  s1  € Ø&ŸNšN¨;Ñ7Ô7ÐØ ð 	;ÝÐ9Ñ:Ô:Ð:à&ŸNšN¨;Ñ7Ô7ÐØ ð 	;ÝÐ9Ñ:Ô:Ð:å$Ð%6Ñ7Ô7ÐÝ#Ð$5Ñ6Ô6ˆ	Ø—’ Ñ)Ô)ˆØð 	8�* V­TÑ2Ô2ð 	8ÝÐ6Ñ7Ô7Ð7å˜y¨&Ñ1Ô1ˆ
Ø×4Ò4°ZÀÈ#ÑNÔN‰ˆ	�3ØŸ	š	Ð#4°oÐ"FÑGÔGˆÝ&¥xÐ0AÑ'BÔ'BÑCÔCˆ	Ø×Ò˜M¨9°cÑ:Ô:ð 	$Ø˜tÐ#Ð#Ø˜5Ð Ð r'   )NNr   )Ú__name__Ú
__module__Ú__qualname__Ú	frozensetrx   r,   r&   Úclassmethodr0   r?   rL   r^   ri   rm   rs   r4   r3   rc   rT   r'   r%   r   r      s
  € € € € € ð )2¨	ð 3ð 3ð 3ñ )ô )Ð%ð Ðð&ð &ð &ð &ð ð<ð <ñ „[ð<ðJð Jð Jð8 $ð  $ð  $ð  $ðD/
ð /
ð /
ðb.$ð .$ð .$ð .$ð`<ð <ð <ð$8ð 8ð 8ð 8ð*ð ð ð$	=ð 	=ð 	=ð!ð !ð !ð !ð !r'   r   c                 ó,   — t          | t          ¦  «        S r   )r   r
   )Úheader_segments    r%   rD   rD   '  s   € Ý˜.­+Ñ6Ô6Ð6r'   c                 ó.   — t          | t          d¦  «        S )Nr>   ©r   r
   )rJ   s    r%   rF   rF   +  s   € ÝÐ,­k¸;ÑGÔGÐGr'   c                 ó.   — t          | t          d¦  «        S )Nr8   r†   )r<   s    r%   rE   rE   /  s   € Ý˜?­K¸ÑCÔCÐCr'   N)Úauthlib.common.encodingr   r   r   r   Úauthlib.jose.utilr   r   r	   Úauthlib.jose.errorsr
   r   r   r   r   Úmodelsr   r   r   rD   rF   rE   rT   r'   r%   ú<module>rŒ      sC  ððð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (Ð (Ð (ðO!ð O!ð O!ð O!ð O!ñ O!ô O!ð O!ðd7ð 7ð 7ðHð Hð HðDð Dð Dð Dð Dr'   