U
    "FZhc                     @  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                   @  s   e Zd ZdddddddZedddd dd	d
Zedddd dddZeddddZeddddZ	eddddZ
dS )PyJWKNr   z
str | NoneNone)jwk_data	algorithmreturnc                 C  s~  t  | _|| _| jdd }|s0td| j |sNt| jtrN| jdd }|s| jdd }|dkr|dksv|s|d}n8|dkrd	}n*|d
krd}n|dkrd}ntd| nf|dkrd}nX|dkrd}nJ|dkr|std| j |dkrd}ntd| ntd| ts:|tkr:t	| d|| _
|| jkrZ| 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   R/home/aprabhat/apps/x.techxrdev.in/venv/lib/python3.8/site-packages/jwt/api_jwk.py__init__   sN    
zPyJWK.__init__)objr   r   c                 C  s
   t | |S N)r   )r    r   r   r   r   	from_dictH   s    zPyJWK.from_dictstr)datar   r   c                 C  s   t | }t||S r!   )jsonloadsr   r"   )r$   r   r    r   r   r   	from_jsonL   s    
zPyJWK.from_jsonr   c                 C  s   | j dd S )Nr   r   r   r   r   r   r   key_typeQ   s    zPyJWK.key_typec                 C  s   | j dd S )Nkidr)   r*   r   r   r   key_idU   s    zPyJWK.key_idc                 C  s   | j dd S )NZuser)   r*   r   r   r   public_key_useY   s    zPyJWK.public_key_use)N)N)N)__name__
__module____qualname__r   staticmethodr"   r'   propertyr+   r-   r.   r   r   r   r   r      s   5r   c                   @  sT   e Zd ZdddddZedd ddd	Zed
d dddZd
ddddZdS )PyJWKSetzlist[JWKDict]r   )keysr   c                 C  s   g | _ |stdt|ts$td|D ]R}z| j t| W q( tk
rx } zt|tr`|W Y q(W 5 d }~X Y q(X q(t| j dkrt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?)	r5   r   r   listappendr   r   r	   len)r   r5   r   errorr   r   r   r   _   s     

zPyJWKSet.__init__zdict[str, Any])r    r   c                 C  s   |  dg }t|S )Nr5   )r   r4   )r    r5   r   r   r   r"   v   s    zPyJWKSet.from_dictr#   )r$   r   c                 C  s   t | }t|S r!   )r%   r&   r4   r"   )r$   r    r   r   r   r'   {   s    
zPyJWKSet.from_jsonr   )r,   r   c                 C  s0   | j D ]}|j|kr|  S qtd| d S )Nzkeyset has no key for kid: )r5   r-   KeyError)r   r,   r   r   r   r   __getitem__   s    


zPyJWKSet.__getitem__N)r/   r0   r1   r   r2   r"   r'   r;   r   r   r   r   r4   ^   s   r4   c                   @  s6   e Zd ZddddZddddZddd	d
ZdS )PyJWTSetWithTimestampr4   jwk_setc                 C  s   || _ t | _d S r!   )r>   time	monotonic	timestamp)r   r>   r   r   r   r      s    zPyJWTSetWithTimestamp.__init__r(   c                 C  s   | j S r!   r=   r*   r   r   r   get_jwk_set   s    z!PyJWTSetWithTimestamp.get_jwk_setfloatc                 C  s   | j S r!   )rA   r*   r   r   r   get_timestamp   s    z#PyJWTSetWithTimestamp.get_timestampN)r/   r0   r1   r   rB   rD   r   r   r   r   r<      s   r<   )
__future__r   r%   r?   typingr   Z
algorithmsr   r   r   
exceptionsr   r	   r
   r   r   typesr   r   r4   r<   r   r   r   r   <module>   s   L)