
    g-                    z   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 dd	lmZmZ dd
lmZ erddl
mZmZ  G d d      Z e       Zej<                  Zej>                  Zej@                  Z ejB                  Z!ejD                  Z"ejF                  Z#ejH                  Z$y)    )annotationsN)Sequence)TYPE_CHECKINGAny   )	Algorithmget_default_algorithms
has_cryptorequires_cryptography)PyJWK)DecodeErrorInvalidAlgorithmErrorInvalidSignatureErrorInvalidTokenError)base64url_decodebase64url_encode)RemovedInPyjwt3Warning)AllowedPrivateKeysAllowedPublicKeysc                      e Zd ZdZ	 	 d	 	 	 	 	 ddZedd       ZddZddZddZ	ddZ
	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd	Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd
Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 ddZddZddZ	 	 d	 	 	 	 	 	 	 	 	 	 	 d dZd!dZd"dZy)#PyJWSJWTNc                2   t               | _        |t        |      nt        | j                        | _        t	        | j                  j                               D ]  }|| j                  vs| j                  |=   |i }i | j                         || _        y )N)r	   _algorithmsset_valid_algslistkeys_get_default_optionsoptions)self
algorithmsr    keys       K/var/www/api/v1/venv_getwork_v1/lib/python3.12/site-packages/jwt/api_jws.py__init__zPyJWS.__init__    s    
 23)5C
O3t?O?O;P 	
 ((--/0C$***$$S) 1 ?GA$335AA    c                 
    ddiS )Nverify_signatureT r)   r&   r$   r   zPyJWS._get_default_options3   s    "D))r&   c                    || j                   v rt        d      t        |t              st	        d      || j                   |<   | j
                  j                  |       y)zW
        Registers a new Algorithm for use when creating and verifying tokens.
        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_algorithm7   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
        Throws KeyError if algorithm is not registered.
        zJThe specified algorithm could not be removed because it is not registered.N)r   KeyErrorr   remove)r!   r/   s     r$   unregister_algorithmzPyJWS.unregister_algorithmD   sH    
 )))1 
 V$'r&   c                ,    t        | j                        S )zM
        Returns a list of supported values for the 'alg' parameter.
        )r   r   )r!   s    r$   get_algorithmszPyJWS.get_algorithmsR   s     D$$%%r&   c                    	 | j                   |   S # t        $ r/}t        s|t        v rt	        d| d      |t	        d      |d}~ww xY w)z
        For a given string name, return the matching Algorithm object.

        Example usage:

        >>> jws_obj.get_algorithm_by_name("RS256")
        zAlgorithm 'z9' could not be found. Do you have cryptography installed?Algorithm not supportedN)r   r3   r
   r   NotImplementedError)r!   alg_namees      r$   get_algorithm_by_namezPyJWS.get_algorithm_by_nameX   sc    	H##H-- 	H(.C"C)!(+de &&?@aG	Hs    	A	*AA	c                P   g }| t        |t              r|j                  }	nd}	n|}	|r/|j                  d      }
|
r|d   }	|j                  d      }|du rd}| j                  |	d}|r"| j                  |       |j                  |       |d   s|d= |r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!                  ||      }|j                  t        |             |rd|d<   d
j                  |      }|j#                  d      S )NHS256algb64FT)typr@   rB   ),:)
separatorscls	sort_keys   .r&   r   utf-8)r,   r   algorithm_nameget
header_typ_validate_headersupdatejsondumpsencodeappendr   joinr=   r#   prepare_keysigndecode)r!   payloadr#   	algorithmheadersjson_encoderis_payload_detachedsort_headerssegments
algorithm_headers_algheaders_b64headerjson_headermsg_payloadsigning_inputr0   	signatureencoded_strings                      r$   rQ   zPyJWS.encodei   s     #u% //
$
"J !++e,K$U^
!++e,Ke#&*# *.!L""7+MM'"e}u!F5Mf_ujjz||

&( 	 	(56!K*73K$ 		(+,,Z8c5!''C!!#&LL4	(34 HQK8,$$W--r&   c                   |r6t        j                  dt        |j                                t        d       |i }i | j
                  |}|d   }|r|st        |t              st        d      | j                  |      \  }	}
}}|j                  dd      du r5|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:    
stacklevelr(   z\It is required that you pass in a value for the "algorithms" argument when calling decode().rA   TFzIt is required that you pass in a value for the "detached_payload" argument to decode a message having the b64 header set to false.rH   r   r   )rW   ra   re   )warningswarntupler   r   r    r,   r   r   _loadrK   rS   rsplit_verify_signature)r!   jwtr#   r"   r    detached_payloadkwargsmerged_optionsr(   rW   rd   ra   re   s                r$   decode_completezPyJWS.decode_complete   s    MM'',V[[]';&<> ' ?G4DLL4G4)*<=Jz#u7Mn  59JJsO1	::eT"e+'! Z  'G II}';';D!'DQ'G&QRM""=&)S*U "
 	
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: rh   ri   )rr   rW   )rk   rl   rm   r   r   ru   )r!   rq   r#   r"   r    rr   rs   decodeds           r$   rV   zPyJWS.decode   sf     MM'',V[[]';&<> ' &&j'<L ' 
 y!!r&   c                P    | j                  |      d   }| j                  |       |S )zReturns 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
        rh   )rn   rM   )r!   rq   rY   s      r$   get_unverified_headerzPyJWS.get_unverified_header   s)     **S/!$w'r&   c                   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      	 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)NrI   z$Invalid token type. Token must be a rH   r   zNot enough segmentszInvalid header paddingzInvalid header string: z,Invalid header string: must be a json objectzInvalid payload paddingzInvalid crypto padding)r,   strrQ   bytesr   ro   splitr+   r   r-   binasciiErrorrO   loadsdict)r!   rq   rd   crypto_segmentheader_segmentpayload_segmenterrheader_datara   r<   rW   re   s               r$   rn   zPyJWS._load  s   c3**W%C#u% DUGLMM	>,/JJtQ,?)M>.;.A.A$.J+NO	A*>:K	DZZ,F &$'LMM	B&7G	A(8I 	::5  	>34#=	>
 8>>* 	A67S@	A
  	D 7s;<!C	D 8>>* 	B78cA	B
 8>>* 	A67S@	Asx   *C
 0C' <D -D4 9E! 
	C$CC$'D DD	D1D,,D14EEE!F:FFc                   |t        |t              r|j                  g}	 |d   }|r|||vrt	        d      t        |t              r|j
                  }|j                  }n#	 | j                  |      }|j                  |      }|j                  |||      st        d      y # t        $ r t	        d      d w xY w# t        $ r}	t	        d      |	d }	~	ww xY w)Nr@   zAlgorithm not specifiedz&The specified alg value is not allowedr9   zSignature verification failed)r,   r   rJ   r3   r   r   r#   r=   r:   rT   verifyr   )
r!   rd   ra   re   r#   r"   r@   r0   prepared_keyr<   s
             r$   rp   zPyJWS._verify_signature+  s     *S%"8,,-J	M-C z-#Z2G'(PQQc5!mmG77LN44S9 #..s3L~~m\9E'(GHH F!  	M'(ABL	M ' N+,EFAMNs#   B$ #B= $B:=	CCCc                6    d|v r| j                  |d          y y )Nkid)_validate_kid)r!   rY   s     r$   rM   zPyJWS._validate_headersJ  s!    Gwu~. r&   c                :    t        |t              st        d      y )Nz(Key ID header parameter must be a string)r,   r{   r   )r!   r   s     r$   r   zPyJWS._validate_kidN  s    #s##$NOO $r&   )NN)r"   Sequence[str] | Noner    dict[str, Any] | NonereturnNone)r   zdict[str, bool])r/   r{   r0   r   r   r   )r/   r{   r   r   )r   z	list[str])r;   r{   r   r   )NNNFT)rW   r|   r#   z(AllowedPrivateKeys | PyJWK | str | bytesrX   z
str | NonerY   r   rZ   ztype[json.JSONEncoder] | Noner[   boolr\   r   r   r{   ) NNN)rq   str | bytesr#   'AllowedPublicKeys | PyJWK | str | bytesr"   r   r    r   rr   bytes | Noner   dict[str, Any])rq   r   r#   r   r"   r   r    r   rr   r   r   r   )rq   r   r   r   )rq   r   r   z*tuple[bytes, bytes, dict[str, Any], bytes])r   N)rd   r|   ra   r   re   r|   r#   r   r"   r   r   r   )rY   r   r   r   )r   r   r   r   )__name__
__module____qualname__rL   r%   staticmethodr   r1   r5   r7   r=   rQ   ru   rV   ry   rn   rp   rM   r   r)   r&   r$   r   r      s   J ,0)-B(B 'B 
	B& * *%(&H* !%)-6:$)!K.K. 6K. 	K.
 'K. 4K. "K. K. 
K.` 8:+/)-)-,
,
 5,
 )	,

 ',
 ',
 
,
b 8:+/)-)-"" 5" )	"
 '" '" 
",	$;V 8:+/II I 	I
 5I )I 
I>/Pr&   r   )%
__future__r   r~   rO   rk   collections.abcr   typingr   r   r"   r   r	   r
   r   api_jwkr   
exceptionsr   r   r   r   utilsr   r   r   r   r   r   _jws_global_objrQ   ru   rV   r1   r5   r=   ry   r)   r&   r$   <module>r      s    "    $ %    6 ,AsP sPl	 '			!11			$77 &;; '== '== r&   