o
    ic                     @  s   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	 d	ZG d
d dZG dd dZdS )    )annotationsN)Any   )get_default_algorithms
has_cryptorequires_cryptography)InvalidKeyErrorMissingCryptographyError
PyJWKErrorPyJWKSetError
PyJWTError)JWKDictc                   @  sb   e Zd Zdddd	ZeddddZeddddZedddZedddZ	edddZ
dS )PyJWKNjwk_datar   	algorithm
str | NonereturnNonec                 C  sp  t  | _|| _| jdd }|std| j |s't| jtr'| jdd }|s| jdd }|dkrY|dks:|s=d}q|dkrDd	}q|d
krKd}q|dkrRd}qtd| |dkr`d}n*|dkrgd}n#|dkr|sutd| j |dkr|d}qtd| td| ts|tv rt	| d|| _
|| jv r| j| | _ntd| j | j| j| _d S )Nktyzkty is not found: algcrvZECzP-256ZES256zP-384ZES384zP-521ZES512Z	secp256k1ZES256KzUnsupported crv: ZRSAZRS256octZHS256ZOKPzcrv is not found: ZEd25519ZEdDSAzUnsupported kty: z) requires 'cryptography' to be installed.z%Unable to find an algorithm for key: )r   Z_algorithms	_jwk_datagetr   
isinstancedictr   r   r	   Zalgorithm_nameZ	Algorithmr
   Zfrom_jwkkey)selfr   r   r   r    r   ^/home/www/bk.finsightngr.online/finsigh_v2/venv200/lib/python3.10/site-packages/jwt/api_jwk.py__init__   sN   
zPyJWK.__init__objc                 C  s
   t | |S N)r   )r!   r   r   r   r   	from_dictH   s   
zPyJWK.from_dictdatastrc                 C  s   t | }t||S r"   )jsonloadsr   r#   )r$   r   r!   r   r   r   	from_jsonL   s   
zPyJWK.from_jsonc                 C     | j dd S )Nr   r   r   r   r   r   r   key_typeQ      zPyJWK.key_typec                 C  r)   )Nkidr*   r+   r   r   r   key_idU   r-   zPyJWK.key_idc                 C  r)   )NZuser*   r+   r   r   r   public_key_useY   r-   zPyJWK.public_key_user"   )r   r   r   r   r   r   )r!   r   r   r   r   r   )r$   r%   r   r   r   r   )r   r   )__name__
__module____qualname__r    staticmethodr#   r(   propertyr,   r/   r0   r   r   r   r   r      s    5r   c                   @  s<   e Zd ZdddZedd	d
ZedddZdddZdS )PyJWKSetkeyslist[JWKDict]r   r   c                 C  s   g | _ |s	tdt|tstd|D ]%}z
| j t| W q ty9 } zt|tr/|W Y d }~qd }~ww t| j dkrEt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?)	r7   r   r   listappendr   r   r	   len)r   r7   r   errorr   r   r   r    _   s&   

zPyJWKSet.__init__r!   dict[str, Any]c                 C  s   |  dg }t|S )Nr7   )r   r6   )r!   r7   r   r   r   r#   v   s   zPyJWKSet.from_dictr$   r%   c                 C  s   t | }t|S r"   )r&   r'   r6   r#   )r$   r!   r   r   r   r(   {   s   

zPyJWKSet.from_jsonr.   r   c                 C  s,   | j D ]}|j|kr|  S qtd| )Nzkeyset has no key for kid: )r7   r/   KeyError)r   r.   r   r   r   r   __getitem__   s
   

zPyJWKSet.__getitem__N)r7   r8   r   r   )r!   r=   r   r6   )r$   r%   r   r6   )r.   r%   r   r   )r1   r2   r3   r    r4   r#   r(   r?   r   r   r   r   r6   ^   s    
r6   c                   @  s*   e Zd ZdddZdddZdd	d
ZdS )PyJWTSetWithTimestampjwk_setr6   c                 C  s   || _ t | _d S r"   )rA   time	monotonic	timestamp)r   rA   r   r   r   r       s   zPyJWTSetWithTimestamp.__init__r   c                 C     | j S r"   )rA   r+   r   r   r   get_jwk_set      z!PyJWTSetWithTimestamp.get_jwk_setfloatc                 C  rE   r"   )rD   r+   r   r   r   get_timestamp   rG   z#PyJWTSetWithTimestamp.get_timestampN)rA   r6   )r   r6   )r   rH   )r1   r2   r3   r    rF   rI   r   r   r   r   r@      s    

r@   )
__future__r   r&   rB   typingr   Z
algorithmsr   r   r   
exceptionsr   r	   r
   r   r   typesr   r   r6   r@   r   r   r   r   <module>   s    L)