Ë
    Í—ÄjùE  ã                  ó   — d dl mZ d dlZd dlZd dlZd dlmZ d dlmZm	Z	 ddl
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 dd
lmZmZ erddl
mZmZ ddlmZ  e «       Z!dZ" G d„ d«      Z# e#«       Z$e$jJ                  Z%e$jL                  Z&e$jN                  Z'e$jP                  Z(e$jR                  Z)e$jT                  Z*e$jV                  Z+y)é    )ÚannotationsN)ÚSequence)ÚTYPE_CHECKINGÚAnyé   )Ú	AlgorithmÚget_default_algorithmsÚ
has_cryptoÚrequires_cryptography)ÚPyJWK)ÚDecodeErrorÚInvalidAlgorithmErrorÚInvalidKeyErrorÚInvalidSignatureErrorÚInvalidTokenError)Úbase64url_decodeÚbase64url_encode)ÚInsecureKeyLengthWarningÚRemovedInPyjwt3Warning)ÚAllowedPrivateKeysÚAllowedPublicKeys)Ú
SigOptionss@   ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_c                  ój  — e Zd ZU dZ	 	 d	 	 	 	 	 dd„Zedd„«       Zdd„Zdd„Zdd„Z	dd„Z
eddd	d
f	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d d„Z	 	 	 	 d!	 	 	 	 	 	 	 	 	 	 	 	 	 d"d„Z	 	 	 	 d!	 	 	 	 	 	 	 	 	 	 	 	 	 d#d„Zd$d„Zed%d„«       Zd&d„Z	 	 	 d'	 	 	 	 	 	 	 	 	 	 	 	 	 d(d„ZdhZded<   d	dœ	 	 	 	 	 d)d„Zd*d„Zd+d„Zy),ÚPyJWSÚJWTNc                óR  — t        «       | _        |�t        |«      nt        | j                  «      | _        t	        | j                  j                  «       «      D ]  }|| j                  vsŒ| j                  |= Œ  | j                  «       | _        |�i | j                  ¥|¥| _        y y ©N)r	   Ú_algorithmsÚsetÚ_valid_algsÚlistÚkeysÚ_get_default_optionsÚoptions)ÚselfÚ
algorithmsr$   Úkeys       úPC:\Users\pivot\Documents\cueki\casual-preloader\Lib\site-packages\jwt/api_jws.pyÚ__init__zPyJWS.__init__'   sž   € ô
 2Ó3ˆÔà)Ð5ŒC�
ŒO¼3¸t×?OÑ?OÓ;Pð 	Ôô
 ˜×(Ñ(×-Ñ-Ó/Ö0ˆCØ˜$×*Ñ*Ò*Ø×$Ñ$ SÑ)ð 1ð $(×#<Ñ#<Ó#>ˆŒØÐØ6˜dŸl™lÐ6¨gÐ6ˆD�Lð ó    c                 ó   — dddœS )NTF)Úverify_signatureÚenforce_minimum_key_length© r.   r*   r(   r#   zPyJWS._get_default_options:   s   € à$(ÈÑNÐNr*   c                óÀ   — || j                   v rt        d«      ‚t        |t        «      st	        d«      ‚|| j                   |<   | j
                  j                  |«       y)zÙ
        Registers a new Algorithm for use when creating and verifying tokens.

        :param str alg_id: the ID of the Algorithm
        :param alg_obj: the Algorithm object
        :type alg_obj: Algorithm
        z Algorithm already has a handler.z!Object is not of type `Algorithm`N)r   Ú
ValueErrorÚ
isinstancer   Ú	TypeErrorr    Úadd)r%   Úalg_idÚalg_objs      r(   Úregister_algorithmzPyJWS.register_algorithm>   sX   € ð �T×%Ñ%Ñ%ÜÐ?Ó@Ð@ä˜'¤9Ô-ÜÐ?Ó@Ð@à#*ˆ×Ñ˜Ñ Ø×Ñ×Ñ˜VÕ$r*   c                ó†   — || j                   vrt        d«      ‚| j                   |= | j                  j                  |«       y)zÂ
        Unregisters an Algorithm for use when creating and verifying tokens
        :param str alg_id: the ID of the Algorithm
        :raises KeyError: if algorithm is not registered.
        zJThe specified algorithm could not be removed because it is not registered.N)r   ÚKeyErrorr    Úremove)r%   r4   s     r(   Úunregister_algorithmzPyJWS.unregister_algorithmO   sH   € ð ˜×)Ñ)Ñ)Üð1óð ð
 ×Ñ˜VÐ$Ø×Ñ×Ñ Õ'r*   c                ó,   — t        | j                  «      S )zh
        Returns a list of supported values for the `alg` parameter.

        :rtype: list[str]
        )r!   r    )r%   s    r(   Úget_algorithmszPyJWS.get_algorithms^   s   € ô �D×$Ñ$Ó%Ð%r*   c                ó˜   — 	 | j                   |   S # t        $ r/}t        s|t        v rt	        d|› d�«      |‚t	        d«      |‚d}~ww xY w)a/  
        For a given string name, return the matching Algorithm object.

        Example usage:
        >>> jws_obj = PyJWS()
        >>> jws_obj.get_algorithm_by_name("RS256")

        :param alg_name: The name of the algorithm to retrieve
        :type alg_name: str
        :rtype: Algorithm
        zAlgorithm 'z9' could not be found. Do you have cryptography installed?úAlgorithm not supportedN)r   r8   r
   r   ÚNotImplementedError)r%   Úalg_nameÚes      r(   Úget_algorithm_by_namezPyJWS.get_algorithm_by_namef   sc   € ð	HØ×#Ñ# HÑ-Ð-øÜò 	HÝ (Ô.CÑ"CÜ)Ø! ( Ð+dÐeóàðô &Ð&?Ó@ÀaÐGûð	Hús   ‚ ‘	A	š*AÁA	FTc                óÄ  — g }|t         u r t        |t        «      r|j                  }	n'd}	n$|€ t        |t        «      r|j                  }	nd}	n|}	|r/|j	                  d«      }
|
r|d   }	|j	                  d«      }|du rd}| j
                  |	dœ}|r$| j                  |d¬«       |j                  |«       |d	   s|d	= |r@d|d<   |j	                  d
g «      }t        |t        «      st        d«      ‚d|vrg |¢d‘|d
<   nd|v r|d= t        j                  |d||¬«      j                  «       }|j                  t        |«      «       |r|}nt        |«      }|j                  |«       dj                  |«      }| j!                  |	«      }t        |t        «      r|j"                  }|j%                  |«      }|j'                  |«      }|rC| j(                  j	                  dd«      rt+        |«      ‚t-        j.                  |t0        d¬«       |j3                  ||«      }|j                  t        |«      «       |rd|d<   dj                  |«      }|j5                  d«      S )NÚHS256ÚnoneÚalgÚb64FT)ÚtyprF   ©ÚencodingrH   Úcritz%Invalid 'crit' header: must be a list)Ú,Ú:)Ú
separatorsÚclsÚ	sort_keysó   .r-   é   ©Ú
stacklevelr*   r   úutf-8)Ú_ALGORITHM_UNSETr1   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdater!   r   ÚjsonÚdumpsÚencodeÚappendr   ÚjoinrB   r'   Úprepare_keyÚcheck_key_lengthr$   r   ÚwarningsÚwarnr   ÚsignÚdecode)r%   Úpayloadr'   Ú	algorithmÚheadersÚjson_encoderÚis_payload_detachedÚsort_headersÚsegmentsÚ
algorithm_Úheaders_algÚheaders_b64ÚheaderÚexisting_critÚjson_headerÚmsg_payloadÚsigning_inputr5   Úkey_length_msgÚ	signatureÚencoded_strings                        r(   r^   zPyJWS.encode{   sU  € ð !#ˆð Ô(Ñ(Ü˜#œuÔ%Ø ×/Ñ/‘
à$‘
ØÐÜ˜#œuÔ%Ø ×/Ñ/‘
à#‘
à"ˆJñ Ø!Ÿ+™+ eÓ,ˆKÙØ$ U™^�
à!Ÿ+™+ eÓ,ˆKØ˜eÑ#Ø&*Ð#ð *.¯©ÀÑ!LˆáØ×"Ñ" 7°TÐ"Ô:Ø�M‰M˜'Ô"à�eŠ}Ø�u�áØ!ˆF�5‰Mð
 #ŸJ™J v¨rÓ2ˆMÜ˜m¬TÔ2Ü'Ð(OÓPÐPØ˜MÑ)Ø!8 =Ð!8°%Ð!8��v’Ø�f‰_à�u�ä—j‘jØ˜z¨|À|ô
ç
‰&‹(ð 	ð 	�‰Ô(¨Ó5Ô6áØ!‰Kä*¨7Ó3ˆKØ�‰˜Ô$ð Ÿ	™	 (Ó+ˆà×,Ñ,¨ZÓ8ˆÜ�cœ5Ô!Ø—'‘'ˆCØ×!Ñ! #Ó&ˆà ×1Ñ1°#Ó6ˆÙØ�|‰|×ÑÐ <¸eÔDÜ% nÓ5Ð5ä—‘˜nÔ.FÐSTÕUà—L‘L °Ó4ˆ	à�‰Ô(¨Ó3Ô4ñ ØˆH�Q‰KØŸ™ 8Ó,ˆà×$Ñ$ WÓ-Ð-r*   c                óÀ  — |r6t        j                  dt        |j                  «       «      › �t        d¬«       |€| j
                  }ni | j
                  ¥|¥}|d   }|r|st        |t        «      st        d«      ‚| j                  |«      \  }	}
}}| j                  |«       |�|j                  dd«      durt        d	«      ‚|j                  dd«      du ri|j                  d
«      xs g }t        |t        «      rd|vrt        d«      ‚|€t        d«      ‚|}	dj                  |
j                  dd«      d   |	g«      }
|r| j!                  |
|||||¬«       |	||dœS )Nzypassing additional kwargs to decode_complete() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rR   rS   r,   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rG   TFz]It is only valid to pass "detached_payload" when the protected header has "b64" set to false.rK   zAThe 'b64' header parameter requires 'b64' to be listed in 'crit'.zƒIt is required that you pass in a value for the "detached_payload" argument to decode a message having the b64 header set to false.rQ   r   r   )r$   )rg   rq   rw   )rc   rd   Útupler"   r   r$   r1   r   r   Ú_loadrZ   rX   r!   r   r`   ÚrsplitÚ_verify_signature)r%   Újwtr'   r&   r$   Údetached_payloadÚkwargsÚmerged_optionsr,   rg   ru   rq   rw   rK   s                 r(   Údecode_completezPyJWS.decode_completeÞ   s   € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øõð ˆ?Ø!Ÿ\™\‰Nà8 §¡Ð8°Ð8ˆNà)Ð*<Ñ=Ðá¡J´zÀ#ÄuÔ7MÜØnóð ð 59·J±J¸s³OÑ1ˆ� ¨	à×Ñ˜vÔ&àÐ'¨F¯J©J°u¸dÓ,CÈ5Ñ,PÜØoóð ð �:‰:�e˜TÓ" eÑ+ð —:‘:˜fÓ%Ò+¨ˆDÜ˜d¤DÔ)¨U¸$Ñ->Ü'ØWóð ð  Ð'Ü!ð Zóð ð 'ˆGØ ŸI™I }×';Ñ';¸DÀ!Ó'DÀQÑ'GÈÐ&QÓRˆMáØ×"Ñ"ØØØØØØ&ð #ô ð ØØ"ñ
ð 	
r*   c                ó¨   — |r6t        j                  dt        |j                  «       «      › �t        d¬«       | j                  |||||¬«      }|d   S )Nzppassing additional kwargs to decode() is deprecated and will be removed in pyjwt version 3. Unsupported kwargs: rR   rS   )r   rg   )rc   rd   rz   r"   r   r‚   )r%   r~   r'   r&   r$   r   r€   Údecodeds           r(   rf   zPyJWS.decode%  sf   € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øõð ×&Ñ&Ø��j 'Ð<Lð 'ó 
ˆð �yÑ!Ð!r*   c                óP   — | j                  |«      d   }| j                  |«       |S )zÎReturns back the JWT header parameters as a `dict`

        Note: The signature is not verified so the header parameters
        should not be fully trusted until signature verification is complete
        rR   )r{   rZ   )r%   r~   ri   s      r(   Úget_unverified_headerzPyJWS.get_unverified_header;  s)   € ð —*‘*˜S“/ !Ñ$ˆØ×Ñ˜wÔ'àˆr*   c                óì  — d}| }|j                  d«      r0|d d }|dz  }|dkD  rt        d|› d�«      ‚|j                  d«      rŒ0|r t        | «      dz  dk7  rt        d|› d�«      ‚t        |«      dz  dk(  st        d	„ |D «       «      rt        d|› d�«      ‚	 t	        |«      }t        |«      |k7  rt        d|› d�«      ‚|S # t
        t        j                  f$ r}t        d|› d�«      |‚d }~ww xY w)
Nr   ó   =éÿÿÿÿr   rR   zInvalid z paddingé   c              3  ó,   K  — | ]  }|t         v–— Œ y ­wr   )Ú_BASE64URL_ALPHABET)Ú.0Ú	characters     r(   Ú	<genexpr>z2PyJWS._decode_base64url_segment.<locals>.<genexpr>U  s   è ø€ ð )
ÙBJ°YˆIÔ0Ô0Á(ùs   ‚)	Úendswithr   ÚlenÚanyr   r2   ÚbinasciiÚErrorr   )ÚsegmentÚnameÚpaddingÚstrippedr„   Úerrs         r(   Ú_decode_base64url_segmentzPyJWS._decode_base64url_segmentF  s*  € ð ˆØˆØ×Ñ Ô%Ø  �}ˆHØ�q‰LˆGØ˜Š{Ü! H¨T¨F°(Ð";Ó<Ð<ð	 ×Ñ Õ%ñ ”s˜7“| aÑ'¨1Ò,Ü ¨¨¨hÐ7Ó8Ð8äˆx‹=˜1Ñ Ò!¤Sñ )
ÙBJó)
ô &
ô  ¨¨¨hÐ7Ó8Ð8ð	BÜ& xÓ0ˆGô ˜GÓ$¨Ò0Ü ¨¨¨hÐ7Ó8Ð8àˆøô œ8Ÿ>™>Ð*ò 	BÜ ¨¨¨hÐ7Ó8¸cÐAûð	Bús   ÂC ÃC3ÃC.Ã.C3c                ó†  — t        |t        «      r|j                  d«      }t        |t        «      st	        dt        › �«      ‚	 |j                  dd«      \  }}|j                  dd«      \  }}| j                  |d«      }	 t        j                  |«      }t        |t        «      st	        d«      ‚|j                  d	d
«      du r|rt	        d«      ‚d}
n| j                  |d«      }
| j                  |d«      }|
|||fS # t        $ r}t	        d«      |‚d }~ww xY w# t        t        f$ r}	t	        d|	› �«      |	‚d }	~	ww xY w)NrU   z$Invalid token type. Token must be a rQ   r   zNot enough segmentsrq   zInvalid header string: z,Invalid header string: must be a json objectrG   TFz2Payload segment must be empty when 'b64' is false.r*   rg   Úcrypto)r1   Ústrr^   Úbytesr   r|   Úsplitr0   rš   r\   ÚloadsÚRecursionErrorÚdictrX   )r%   r~   ru   Úcrypto_segmentÚheader_segmentÚpayload_segmentr™   Úheader_datarq   rA   rg   rw   s               r(   r{   zPyJWS._loadd  sQ  € Ü�cœ3ÔØ—*‘*˜WÓ%ˆCä˜#œuÔ%ÜÐ DÄUÀGÐLÓMÐMð	>Ø,/¯J©J°t¸QÓ,?Ñ)ˆM˜>Ø.;×.AÑ.AÀ$ÈÓ.JÑ+ˆN˜Oð ×4Ñ4°^ÀXÓNˆð	DÜ%)§Z¡Z°Ó%<ˆFô ˜&¤$Ô'ÜÐLÓMÐMà�:‰:�e˜TÓ" eÑ+ñ Ü!Ð"VÓWÐWØ‰Gà×4Ñ4°_ÀiÓPˆGà×2Ñ2°>À8ÓLˆ	à˜¨°	Ð:Ð:øô; ò 	>ÜÐ3Ó4¸#Ð=ûð	>ûô œNÐ+ò 	DÜÐ 7¸°sÐ;Ó<À!ÐCûð	Dús0   Á*D  ÂD Ä 	DÄ	DÄDÄE Ä,D;Ä;E c                óÞ  — |�|n| j                   }|€t        |t        «      r|j                  g}	 |d   }|r|�||vrt        d«      ‚t        |t        «      rR||j                  k7  rt        d|›d|j                  ›�«      ‚|j                  }	|	j                  |j                  «      }
n#	 | j                  |«      }	|	j                  |«      }
|	j                  |
«      }|r9|j                  dd«      rt        |«      ‚t        j                  |t         d	¬
«       |	j#                  ||
|«      st%        d«      ‚y # t        $ r t        d«      d ‚w xY w# t        $ r}t        d«      |‚d }~ww xY w)NrF   zAlgorithm not specifiedz&The specified alg value is not allowedzToken algorithm z$ does not match the key's algorithm r>   r-   FrŠ   rS   zSignature verification failed)r$   r1   r   rW   r8   r   r   ra   r'   rB   r?   rb   rX   r   rc   rd   r   Úverifyr   )r%   ru   rq   rw   r'   r&   r$   Úeffective_optionsrF   r5   Úprepared_keyrA   rv   s                r(   r}   zPyJWS._verify_signature�  s�  € ð (/Ð':™GÀÇÁÐàÐ¤*¨S´%Ô"8Ø×,Ñ,Ð-ˆJð	MØ˜‘-ˆCñ �zÐ-°#¸ZÑ2GÜ'Ð(PÓQÐQä�cœ5Ô!ð �c×(Ñ(Ò(Ü+Ø& s gð .!Ø!$×!3Ñ!3Ð 6ð8óð ð —m‘mˆGØ"×.Ñ.¨s¯w©wÓ7‰LðNØ×4Ñ4°SÓ9�ð #×.Ñ.¨sÓ3ˆLà ×1Ñ1°,Ó?ˆÙØ ×$Ñ$Ð%AÀ5ÔIÜ% nÓ5Ð5ä—‘˜nÔ.FÐSTÕUà�~‰~˜m¨\¸9ÔEÜ'Ð(GÓHÐHð FøôC ò 	MÜ'Ð(AÓBÈÐLð	Mûô, 'ò NÜ+Ð,EÓFÈAÐMûðNús#   ±D9 Â,E Ä9EÅ	E,ÅE'Å'E,rG   zset[str]Ú_supported_critrI   c               óf   — d|v r| j                  |d   «       |sd|v r| j                  |«       y y y )NÚkidrK   )Ú_validate_kidÚ_validate_crit)r%   ri   rJ   s      r(   rZ   zPyJWS._validate_headersÃ  s=   € ð �GÑØ×Ñ˜w u™~Ô.Ù˜F gÑ-Ø×Ñ Õ(ð .ˆxr*   c                ó:   — t        |t        «      st        d«      ‚y )Nz(Key ID header parameter must be a string)r1   r�   r   )r%   r­   s     r(   r®   zPyJWS._validate_kidË  s   € Ü˜#œsÔ#Ü#Ð$NÓOÐOð $r*   c                ó  — |d   }t        |t        «      rt        |«      dk(  rt        d«      ‚|D ]L  }t        |t        «      st        d«      ‚|| j
                  vrt        d|› �«      ‚||vsŒ?t        d|› d�«      ‚ y )NrK   r   z/Invalid 'crit' header: must be a non-empty listz-Invalid 'crit' header: values must be stringsz Unsupported critical extension: zCritical extension 'z' is missing from headers)r1   r!   r‘   r   r�   r«   )r%   ri   rK   Úexts       r(   r¯   zPyJWS._validate_critÏ  sŽ   € Ø�v‰ˆÜ˜$¤Ô%¬¨T«°aªÜ#Ð$UÓVÐVÛˆCÜ˜c¤3Ô'Ü'Ð(WÓXÐXØ˜$×.Ñ.Ñ.Ü'Ð*JÈ3È%Ð(PÓQÐQØ˜'Ò!Ü'Ø*¨3¨%Ð/HÐIóð ñ r*   )NN)r&   úSequence[str] | Noner$   úSigOptions | NoneÚreturnÚNone)rµ   r   )r4   r�   r5   r   rµ   r¶   )r4   r�   rµ   r¶   )rµ   z	list[str])r@   r�   rµ   r   )rg   rž   r'   z(AllowedPrivateKeys | PyJWK | str | bytesrh   z
str | Noneri   zdict[str, Any] | Nonerj   ztype[json.JSONEncoder] | Nonerk   Úboolrl   r·   rµ   r�   )Ú NNN)r~   ústr | bytesr'   ú'AllowedPublicKeys | PyJWK | str | bytesr&   r³   r$   r´   r   úbytes | Noner€   údict[str, Any]rµ   r¼   )r~   r¹   r'   rº   r&   r³   r$   r´   r   r»   r€   r¼   rµ   r   )r~   r¹   rµ   r¼   )r•   rž   r–   r�   rµ   rž   )r~   r¹   rµ   z*tuple[bytes, bytes, dict[str, Any], bytes])r¸   NN)ru   rž   rq   r¼   rw   rž   r'   rº   r&   r³   r$   r´   rµ   r¶   )ri   r¼   rJ   r·   rµ   r¶   )r­   r   rµ   r¶   )ri   r¼   rµ   r¶   )Ú__name__Ú
__module__Ú__qualname__rY   r)   Ústaticmethodr#   r6   r:   r<   rB   rV   r^   r‚   rf   r†   rš   r{   r}   r«   Ú__annotations__rZ   r®   r¯   r.   r*   r(   r   r   $   s8  … Ø€Jð ,0Ø%)ð7à(ð7ð #ð7ð 
ó	7ð& òOó ðOó%ó"(ó&óHð2 !1Ø)-Ø6:Ø$)Ø!ða.àða.ð 6ða.ð ð	a.ð
 'ða.ð 4ða.ð "ða.ð ða.ð 
óa.ðL 8:Ø+/Ø%)Ø)-ðE
àðE
ð 5ðE
ð )ð	E
ð
 #ðE
ð 'ðE
ð !ðE
ð 
óE
ðT 8:Ø+/Ø%)Ø)-ð"àð"ð 5ð"ð )ð	"ð
 #ð"ð 'ð"ð !ð"ð 
ó"ó,	ð òó ðó:';ð\ 8:Ø+/Ø%)ð1Iàð1Ið ð1Ið ð	1Ið
 5ð1Ið )ð1Ið #ð1Ið 
ó1Iðh "' €O�XÓ'ð <Añ)Ø%ð)Ø48ð)à	ó)óPôr*   r   ),Ú
__future__r   r“   r\   rc   Úcollections.abcr   Útypingr   r   r&   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   r   Úutilsr   r   r   r   r   r   Útypesr   ÚobjectrV   rŒ   r   Ú_jws_global_objr^   r‚   rf   r6   r:   rB   r†   r.   r*   r(   Ú<module>rË      s¸   ðÝ "ã Û Û Ý $ß %÷ó õ ÷õ ÷ 6ß FáßAÝ!á“8Ð àGð ÷
wñ wñt “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ð Ø'×=Ñ=Ñ r*   