U
    dE                     @  sj   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	 G dd dZ
G dd	 d	ZG d
d dZdS )    )annotationsN   )get_default_algorithms)InvalidKeyError
PyJWKErrorPyJWKSetErrorc                   @  sV   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 )PyJWKNc                 C  sV  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| | j|| _| jsBtd| j | j	| j| _
d S )Nktyzkty is not found: Z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$Unable to find a algorithm for key: )r   Z_algorithms	_jwk_datagetr   
isinstancedictZ	Algorithmr   Zfrom_jwkkey)selfZjwk_data	algorithmr	   r
    r   //tmp/pip-unpacked-wheel-cf9_iply/jwt/api_jwk.py__init__   sD    
zPyJWK.__init__c                 C  s
   t | |S N)r   )objr   r   r   r   	from_dict9   s    zPyJWK.from_dictc                 C  s   t | }t||S r   )jsonloadsr   r   )datar   r   r   r   r   	from_json=   s    
zPyJWK.from_jsonc                 C  s   | j dd S )Nr	   r   r   r   r   r   r   key_typeB   s    zPyJWK.key_typec                 C  s   | j dd S )Nkidr   r   r   r   r   key_idF   s    zPyJWK.key_idc                 C  s   | j dd S )NZuser   r   r   r   r   public_key_useJ   s    zPyJWK.public_key_use)N)N)N)__name__
__module____qualname__r   staticmethodr   r   propertyr   r!   r"   r   r   r   r   r   
   s   
.

r   c                   @  s<   e Zd ZdddddZedd Zedd	 Zd
d ZdS )PyJWKSetz
list[dict]None)keysreturnc              	   C  sv   g | _ |stdt|ts$td|D ]2}z| j t| W q( tk
rX   Y q(Y q(X q(t| j dkrrtdd S )Nz$The JWK Set did not contain any keyszInvalid JWK Set valuer   z+The JWK Set did not contain any usable keys)r*   r   r   listappendr   r   len)r   r*   r   r   r   r   r   P   s    
zPyJWKSet.__init__c                 C  s   |  dg }t|S )Nr*   )r   r(   )r   r*   r   r   r   r   c   s    zPyJWKSet.from_dictc                 C  s   t | }t|S r   )r   r   r(   r   )r   r   r   r   r   r   h   s    
zPyJWKSet.from_jsonc                 C  s0   | j D ]}|j|kr|  S qtd| d S )Nzkeyset has no key for kid: )r*   r!   KeyError)r   r    r   r   r   r   __getitem__m   s    


zPyJWKSet.__getitem__N)r#   r$   r%   r   r&   r   r   r0   r   r   r   r   r(   O   s   

r(   c                   @  s*   e Zd ZddddZdd Zdd Zd	S )
PyJWTSetWithTimestampr(   jwk_setc                 C  s   || _ t | _d S r   )r3   time	monotonic	timestamp)r   r3   r   r   r   r   u   s    zPyJWTSetWithTimestamp.__init__c                 C  s   | j S r   r2   r   r   r   r   get_jwk_sety   s    z!PyJWTSetWithTimestamp.get_jwk_setc                 C  s   | j S r   )r6   r   r   r   r   get_timestamp|   s    z#PyJWTSetWithTimestamp.get_timestampN)r#   r$   r%   r   r7   r8   r   r   r   r   r1   t   s   r1   )
__future__r   r   r4   Z
algorithmsr   
exceptionsr   r   r   r   r(   r1   r   r   r   r   <module>   s   E%