
    Aahc                        d dl mZ d dlZd dlZd dl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  G d d	          Z G d
 d          Z G d d          ZdS )    )annotationsN)Any   )get_default_algorithms
has_cryptorequires_cryptography)InvalidKeyErrorMissingCryptographyError
PyJWKErrorPyJWKSetError
PyJWTError)JWKDictc                      e Zd ZdddZeddd
            Zeddd            Zedd            Zedd            Z	edd            Z
dS )PyJWKNjwk_datar   	algorithm
str | NonereturnNonec                   t                      | _        || _        | j                            dd           }|st	          d| j                   |s5t          | j        t                    r| j                            dd           }|s| j                            dd           }|dk    r8|dk    s|sd}n|dk    rd	}n|d
k    rd}ny|dk    rd}npt	          d|           |dk    rd}nU|dk    rd}nL|dk    r4|st	          d| j                   |dk    rd}n$t	          d|           t	          d|           t          s|t          v rt          | d          || _
        || j        v r| j        |         | _        nt          d| j                   | j                            | j                  | _        d S )Nktyzkty is not found: algcrvECzP-256ES256zP-384ES384zP-521ES512	secp256k1ES256KzUnsupported crv: RSARS256octHS256OKPzcrv is not found: Ed25519EdDSAzUnsupported kty: z) requires 'cryptography' to be installed.z%Unable to find an algorithm for key: )r   _algorithms	_jwk_datagetr	   
isinstancedictr   r   r
   algorithm_name	Algorithmr   from_jwkkey)selfr   r   r   r   s        =/var/www/lms/venv/lib/python3.11/site-packages/jwt/api_jwk.py__init__zPyJWK.__init__   s#   133!n  -- 	I!"Gt~"G"GHHH 	8Z== 	8**5$77I 	A.$$UD11Cd{{'>>> 'IIG^^ 'IIG^^ 'IIK'' (II)*Cc*C*CDDD#		#		 Q)*Ot~*O*OPPP)## 'II)*Cc*C*CDDD%&?#&?&?@@@ 	i+@@@*GGG   ((((!-i8DNNUT^UUVVV>**4>::    objc                "    t          | |          S N)r   )r4   r   s     r1   	from_dictzPyJWK.from_dictH   s    S)$$$r3   datastrc                `    t          j        |           }t                              ||          S r6   )jsonloadsr   r7   )r8   r   r4   s      r1   	from_jsonzPyJWK.from_jsonL   s%    jsI...r3   c                8    | j                             dd           S )Nr   r(   r)   r0   s    r1   key_typezPyJWK.key_typeQ       ~!!%...r3   c                8    | j                             dd           S )Nkidr?   r@   s    r1   key_idzPyJWK.key_idU   rB   r3   c                8    | j                             dd           S )Nuser?   r@   s    r1   public_key_usezPyJWK.public_key_useY   rB   r3   r6   )r   r   r   r   r   r   )r4   r   r   r   r   r   )r8   r9   r   r   r   r   )r   r   )__name__
__module____qualname__r2   staticmethodr7   r=   propertyrA   rE   rH    r3   r1   r   r      s        3; 3; 3; 3; 3;j % % % % \% / / / / \/ / / / X/ / / / X/ / / / X/ / /r3   r   c                  N    e Zd ZddZedd            Zedd            ZddZdS )PyJWKSetkeyslist[JWKDict]r   r   c                   g | _         |st          d          t          |t                    st          d          |D ]X}	 | j                             t          |                     +# t          $ r!}t          |t                    r|Y d }~Qd }~ww xY wt          | j                   dk    rt          d          d S )Nz$The JWK Set did not contain any keyszInvalid JWK Set valuer   zUThe JWK Set did not contain any usable keys. Perhaps 'cryptography' is not installed?)	rQ   r   r*   listappendr   r   r
   len)r0   rQ   r/   errors       r1   r2   zPyJWKSet.__init___   s    	 	H FGGG$%% 	9 7888 	 	C	  s,,,,   e%=>>  K	 ty>>Qg   s   'A**
B4BBr4   dict[str, Any]c                L    |                      dg           }t          |          S )NrQ   )r)   rP   )r4   rQ   s     r1   r7   zPyJWKSet.from_dictv   s!    wwvr""~~r3   r8   r9   c                ^    t          j        |           }t                              |          S r6   )r;   r<   rP   r7   )r8   r4   s     r1   r=   zPyJWKSet.from_json{   s%    j!!#&&&r3   rD   r   c                X    | j         D ]}|j        |k    r|c S t          d|           )Nzkeyset has no key for kid: )rQ   rE   KeyError)r0   rD   r/   s      r1   __getitem__zPyJWKSet.__getitem__   sE    9 	 	CzS  


 !:S::;;;r3   N)rQ   rR   r   r   )r4   rX   r   rP   )r8   r9   r   rP   )rD   r9   r   r   )rI   rJ   rK   r2   rL   r7   r=   r]   rN   r3   r1   rP   rP   ^   s|           .    \ ' ' ' \'< < < < < <r3   rP   c                  &    e Zd Zd	dZd
dZddZdS )PyJWTSetWithTimestampjwk_setrP   c                D    || _         t          j                    | _        d S r6   )r`   time	monotonic	timestamp)r0   r`   s     r1   r2   zPyJWTSetWithTimestamp.__init__   s    ))r3   r   c                    | j         S r6   )r`   r@   s    r1   get_jwk_setz!PyJWTSetWithTimestamp.get_jwk_set   s
    |r3   floatc                    | j         S r6   )rd   r@   s    r1   get_timestampz#PyJWTSetWithTimestamp.get_timestamp   s
    ~r3   N)r`   rP   )r   rP   )r   rg   )rI   rJ   rK   r2   rf   ri   rN   r3   r1   r_   r_      sP        * * * *        r3   r_   )
__future__r   r;   rb   typingr   
algorithmsr   r   r   
exceptionsr	   r
   r   r   r   typesr   r   rP   r_   rN   r3   r1   <module>ro      s?   " " " " " "         Q Q Q Q Q Q Q Q Q Q                   I/ I/ I/ I/ I/ I/ I/ I/X&< &< &< &< &< &< &< &<R	 	 	 	 	 	 	 	 	 	r3   