
    ddd                        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 ddlmZ  G d d	      Z G d
 d      Z G d d      Zy)    )annotationsN)Any   )get_default_algorithms
has_cryptorequires_cryptography)InvalidKeyError
PyJWKErrorPyJWKSetError
PyJWTError)JWKDictc                  t    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
y)PyJWKNc                l   t               | _        || _        | j                  j                  dd       }|st	        d| j                         |s6t        | j                  t              r| j                  j                  dd       }|s| j                  j                  dd       }|dk(  r0|dk(  s|sd}ny|dk(  rd	}nq|d
k(  rd}ni|dk(  rd}nat	        d|       |dk(  rd}nK|dk(  rd}nC|dk(  r0|st	        d| j                         |dk(  rd}nt	        d|       t	        d|       t        s|t        v rt        | d      | j                  j                  |      | _
        | j                  st        d| j                         | j                  j                  | j                        | _        y )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from_jwkkey)selfjwk_data	algorithmr   r   s        -/usr/lib/python3/dist-packages/jwt/api_jwk.py__init__zPyJWK.__init__   s   13!nn  -!$6t~~6F"GHHZ=**5$7I..$$UD1Cd{'> 'IG^ 'IG^ 'IK' (I),=cU*CDD#	#	),>t~~>N*OPP)# 'I),=cU*CDD%(9#&?@@i+@@	{*STUU))--i8~~DT^^DTUVV>>**4>>:    c                    t        | |      S N)r   )objr+   s     r,   	from_dictzPyJWK.from_dict>   s    S)$$r.   c                X    t        j                  |       }t        j                  ||      S r0   )jsonloadsr   r2   )datar+   r1   s      r,   	from_jsonzPyJWK.from_jsonB   s!    jjsI..r.   c                :    | j                   j                  dd       S )Nr   r"   r#   r)   s    r,   key_typezPyJWK.key_typeG       ~~!!%..r.   c                :    | j                   j                  dd       S )Nkidr9   r:   s    r,   key_idzPyJWK.key_idK   r<   r.   c                :    | j                   j                  dd       S )Nuser9   r:   s    r,   public_key_usezPyJWK.public_key_useO   r<   r.   r0   )r*   r   r+   
str | NonereturnNone)r1   r   r+   rC   rD   'PyJWK')r6   strr+   rE   rD   rF   )rD   rC   )__name__
__module____qualname__r-   staticmethodr2   r7   propertyr;   r?   rB    r.   r,   r   r      sl    /;b % % / / / / / / / /r.   r   c                  @    e Zd ZddZedd       Zedd       Zd	dZy)
PyJWKSetc                   g | _         |st        d      t        |t              st        d      |D ]'  }	 | j                   j	                  t        |             ) t        | j                         dk(  rt        d      y # t        $ r Y Yw xY w)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?)keysr   r$   listappendr   r   len)r)   rQ   r(   s      r,   r-   zPyJWKSet.__init__U   s    	 FGG$% 788 	C		  s,	 tyy>Qg  	  s   $B  	BBc                <    | j                  dg       }t        |      S )NrQ   )r#   rO   )r1   rQ   s     r,   r2   zPyJWKSet.from_dictj   s    wwvr"~r.   c                V    t        j                  |       }t        j                  |      S r0   )r4   r5   rO   r2   )r6   r1   s     r,   r7   zPyJWKSet.from_jsono   s!    jj!!#&&r.   c                f    | j                   D ]  }|j                  |k(  s|c S  t        d|       )Nzkeyset has no key for kid: )rQ   r?   KeyError)r)   r>   r(   s      r,   __getitem__zPyJWKSet.__getitem__t   s;    99 	CzzS 
	 4SE:;;r.   N)rQ   zlist[JWKDict]rD   rE   )r1   zdict[str, Any]rD   
'PyJWKSet')r6   rG   rD   rZ   )r>   rG   rD   rF   )rH   rI   rJ   r-   rK   r2   r7   rY   rM   r.   r,   rO   rO   T   s4    *   ' '<r.   rO   c                  $    e Zd ZddZddZddZy)PyJWTSetWithTimestampc                D    || _         t        j                         | _        y r0   )jwk_settime	monotonic	timestamp)r)   r^   s     r,   r-   zPyJWTSetWithTimestamp.__init__|   s    )r.   c                    | j                   S r0   )r^   r:   s    r,   get_jwk_setz!PyJWTSetWithTimestamp.get_jwk_set   s    ||r.   c                    | j                   S r0   )ra   r:   s    r,   get_timestampz#PyJWTSetWithTimestamp.get_timestamp   s    ~~r.   N)r^   rO   )rD   rO   )rD   float)rH   rI   rJ   r-   rc   re   rM   r.   r,   r\   r\   {   s    *r.   r\   )
__future__r   r4   r_   typingr   
algorithmsr   r   r   
exceptionsr	   r
   r   r   typesr   r   rO   r\   rM   r.   r,   <module>rl      sB    "    Q Q N N E/ E/P$< $<N	 	r.   