Ë
    ï%9j A  ã                  óœ  — 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! G d„ d«      Z" e"«       Z#e#jH                  Z$e#jJ                  Z%e#jL                  Z&e#jN                  Z'e#jP                  Z(e#jR                  Z)e#jT                  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)Ú
SigOptionsc                  óX  — 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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       úG/var/www/html/truck-me/venv/lib/python3.12/site-packages/jwt/api_jws.pyÚ__init__zPyJWS.__init__$   s£   € ô
 2Ó3ˆÔà)Ð5ŒC�
ŒO¼3¸t×?OÑ?OÓ;Pð 	Ôô
 ˜×(Ñ(×-Ñ-Ó/Ó0ò 	*ˆCØ˜$×*Ñ*Ò*Ø×$Ñ$ SÑ)ð	*ð $(×#<Ñ#<Ó#>ˆŒØÐØ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_options7   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$   r3   s     r'   Úunregister_algorithmzPyJWS.unregister_algorithmL   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   r7   r
   r   ÚNotImplementedError)r$   Úalg_nameÚes      r'   Úget_algorithm_by_namezPyJWS.get_algorithm_by_namec   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)ÚtyprE   ©ÚencodingrG   Úcritz%Invalid 'crit' header: must be a list)ú,ú:)Ú
separatorsÚclsÚ	sort_keysó   .r,   é   ©Ú
stacklevelr)   r   úutf-8)Ú_ALGORITHM_UNSETr0   r   Úalgorithm_nameÚgetÚ
header_typÚ_validate_headersÚupdater    r   ÚjsonÚdumpsÚencodeÚappendr   ÚjoinrA   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_inputr4   Úkey_length_msgÚ	signatureÚencoded_strings                        r'   r]   zPyJWS.encodex   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 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: rQ   rR   r+   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rF   TFrJ   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.rP   r   r   )r#   )rf   rp   rv   )rb   rc   Útupler!   r   r#   r0   r   r   Ú_loadrY   rW   r    r   r_   ÚrsplitÚ_verify_signature)r$   Újwtr&   r%   r#   Údetached_payloadÚkwargsÚmerged_optionsr+   rf   rt   rp   rv   rJ   s                 r'   Údecode_completezPyJWS.decode_completeÛ   sv  € ñ Ü�M‰Mð'ä',¨V¯[©[«]Ó';Ð&<ð>ô 'Øõð ˆ?Ø!Ÿ\™\‰Nà8 §¡Ð8°Ð8ˆNà)Ð*<Ñ=Ðá¡J´zÀ#ÄuÔ7MÜØnóð ð 59·J±J¸s³OÑ1ˆ� ¨	à×Ñ˜vÔ&à�:‰:�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: rQ   rR   )r~   rf   )rb   rc   ry   r!   r   r�   )r$   r}   r&   r%   r#   r~   r   Údecodeds           r'   re   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
        rQ   )rz   rY   )r$   r}   rh   s      r'   Úget_unverified_headerzPyJWS.get_unverified_header3  s)   € ð —*‘*˜S“/ !Ñ$ˆØ×Ñ˜wÔ'àˆr)   c                ód  — t        |t        «      r|j                  d«      }t        |t        «      st	        dt        › �«      ‚	 |j                  dd«      \  }}|j                  dd«      \  }}	 t        |«      }	 t        j                  |«      }t        |t        «      st	        d«      ‚|j                  d	d
«      du r|rt	        d«      ‚d}
n	 t        |«      }
	 t        |«      }|
|||fS # t        $ r}t	        d«      |‚d }~ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w# t        $ r}	t	        d|	› �«      |	‚d }	~	ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w# t        t        j                  f$ r}t	        d«      |‚d }~ww xY w)NrT   z$Invalid token type. Token must be a rP   r   zNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectrF   TFz2Payload segment must be empty when 'b64' is false.r)   zInvalid payload paddingzInvalid crypto padding)r0   Ústrr]   Úbytesr   r{   Úsplitr/   r   r1   ÚbinasciiÚErrorr[   ÚloadsÚdictrW   )r$   r}   rt   Úcrypto_segmentÚheader_segmentÚpayload_segmentÚerrÚheader_datarp   r@   rf   rv   s               r'   rz   zPyJWS._load>  sÅ  € Ü�cœ3ÔØ—*‘*˜WÓ%ˆCä˜#œuÔ%ÜÐ DÄUÀGÐLÓMÐMð	>Ø,/¯J©J°t¸QÓ,?Ñ)ˆM˜>Ø.;×.AÑ.AÀ$ÈÓ.JÑ+ˆN˜Oð	AÜ*¨>Ó:ˆKð	DÜ%)§Z¡Z°Ó%<ˆFô ˜&¤$Ô'ÜÐLÓMÐMà�:‰:�e˜TÓ" eÑ+ñ Ü!Ð"VÓWÐWØ‰GðFÜ*¨?Ó;�ð	AÜ(¨Ó8ˆIð ˜¨°	Ð:Ð:øôM ò 	>ÜÐ3Ó4¸#Ð=ûð	>ûô
 œ8Ÿ>™>Ð*ò 	AÜÐ6Ó7¸SÐ@ûð	Aûô
 ò 	DÜÐ 7¸°sÐ;Ó<À!ÐCûð	Dûô( œxŸ~™~Ð.ò FÜ!Ð";Ó<À#ÐEûðFûô
 œ8Ÿ>™>Ð*ò 	AÜÐ6Ó7¸SÐ@ûð	Aúsx   Á*C. Á0D Á<D8 ÃE ÃF Ã.	DÃ7DÄDÄD5Ä$D0Ä0D5Ä8	EÅEÅEÅFÅ1E=Å=FÆF/ÆF*Æ*F/c                óÀ  — |�|n| j                   }|€t        |t        «      r|j                  g}	 |d   }|r|�||vrt        d«      ‚t        |t        «      rC||j                  k7  rt        d|›d|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)NrE   zAlgorithm not specifiedz&The specified alg value is not allowedzToken algorithm z$ does not match the key's algorithm r=   r,   Fé   rR   zSignature verification failed)r#   r0   r   rV   r7   r   r   r&   rA   r>   r`   ra   rW   r   rb   rc   r   Úverifyr   )r$   rt   rp   rv   r&   r%   r#   Úeffective_optionsrE   r4   Úprepared_keyr@   ru   s                r'   r|   zPyJWS._verify_signaturep  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ØŸ7™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#   ±D* ÂE Ä*E Å	EÅEÅErF   zset[str]Ú_supported_critrH   c               óf   — d|v r| j                  |d   «       |sd|v r| j                  |«       y y y )NÚkidrJ   )Ú_validate_kidÚ_validate_crit)r$   rh   rI   s      r'   rY   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)r0   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 )NrJ   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)r0   r    Úlenr   r‡   r˜   )r$   rh   rJ   Ú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   )r3   r‡   r4   r   r£   r¤   )r3   r‡   r£   r¤   )r£   z	list[str])r?   r‡   r£   r   )rf   rˆ   r&   z(AllowedPrivateKeys | PyJWK | str | bytesrg   z
str | Nonerh   zdict[str, Any] | Noneri   ztype[json.JSONEncoder] | Nonerj   Úboolrk   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£   z*tuple[bytes, bytes, dict[str, Any], bytes])r¦   NN)rt   rˆ   rp   rª   rv   rˆ   r&   r¨   r%   r¡   r#   r¢   r£   r¤   )rh   rª   rI   r¥   r£   r¤   )rš   r   r£   r¤   )rh   rª   r£   r¤   )Ú__name__Ú
__module__Ú__qualname__rX   r(   Ústaticmethodr"   r5   r9   r;   rA   rU   r]   r�   re   r…   rz   r|   r˜   Ú__annotations__rY   r›   rœ   r-   r)   r'   r   r   !   s$  … Ø€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:Ø+/Ø%)Ø)-ð@
àð@
ð 5ð@
ð )ð	@
ð
 #ð@
ð 'ð@
ð !ð@
ð 
ó@
ðJ 8:Ø+/Ø%)Ø)-ð"àð"ð 5ð"ð )ð	"ð
 #ð"ð 'ð"ð !ð"ð 
ó"ó,	ó0;ðn 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[   rb   Úcollections.abcr   Útypingr   r   r%   r   r	   r
   r   Úapi_jwkr   Ú
exceptionsr   r   r   r   r   Úutilsr   r   r   r   r   r   Útypesr   ÚobjectrU   r   Ú_jws_global_objr]   r�   re   r5   r9   rA   r…   r-   r)   r'   ú<module>r¹      s°   ðÝ "ã Û Û Ý $ß %÷ó õ ÷õ ÷ 6ß FáßAÝ!á“8Ð ÷]ñ ]ñ@ “'€Ø	×	Ñ	€Ø!×1Ñ1€Ø	×	Ñ	€Ø$×7Ñ7Ð Ø&×;Ñ;Ð Ø'×=Ñ=Ð Ø'×=Ñ=Ñ r)   