o
    shc                     @  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}nM|dkrDd	}nF|d
krKd}n?|dkrRd}n8td| |dkr`d}n*|dkrgd}n#|dkr|sutd| j |dkr|d}nt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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    r.   _/var/www/html/construction_image-detection-poc/venv/lib/python3.10/site-packages/jwt/api_jwk.py__init__   sN   
zPyJWK.__init__objc                 C  s
   t | |S N)r   )r1   r   r.   r.   r/   	from_dictH   s   
zPyJWK.from_dictdatastrc                 C  s   t | }t||S r2   )jsonloadsr   r3   )r4   r   r1   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  r9   )Nkidr:   r;   r.   r.   r/   key_idU   r=   zPyJWK.key_idc                 C  r9   )Nuser:   r;   r.   r.   r/   public_key_useY   r=   zPyJWK.public_key_user2   )r   r   r   r   r   r   )r1   r   r   r   r   r   )r4   r5   r   r   r   r   )r   r   )__name__
__module____qualname__r0   staticmethodr3   r8   propertyr<   r?   rA   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?)	rH   r   r'   listappendr   r   r	   len)r-   rH   r,   errorr.   r.   r/   r0   _   s&   

zPyJWKSet.__init__r1   dict[str, Any]c                 C  s   |  dg }t|S )NrH   )r&   rG   )r1   rH   r.   r.   r/   r3   v   s   zPyJWKSet.from_dictr4   r5   c                 C  s   t | }t|S r2   )r6   r7   rG   r3   )r4   r1   r.   r.   r/   r8   {   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: )rH   r?   KeyError)r-   r>   r,   r.   r.   r/   __getitem__   s
   

zPyJWKSet.__getitem__N)rH   rI   r   r   )r1   rN   r   rG   )r4   r5   r   rG   )r>   r5   r   r   )rB   rC   rD   r0   rE   r3   r8   rP   r.   r.   r.   r/   rG   ^   s    
rG   c                   @  s*   e Zd ZdddZdddZdd	d
ZdS )PyJWTSetWithTimestampjwk_setrG   c                 C  s   || _ t | _d S r2   )rR   time	monotonic	timestamp)r-   rR   r.   r.   r/   r0      s   zPyJWTSetWithTimestamp.__init__r   c                 C     | j S r2   )rR   r;   r.   r.   r/   get_jwk_set      z!PyJWTSetWithTimestamp.get_jwk_setfloatc                 C  rV   r2   )rU   r;   r.   r.   r/   get_timestamp   rX   z#PyJWTSetWithTimestamp.get_timestampN)rR   rG   )r   rG   )r   rY   )rB   rC   rD   r0   rW   rZ   r.   r.   r.   r/   rQ      s    

rQ   )
__future__r   r6   rS   typingr   
algorithmsr   r   r   
exceptionsr   r	   r
   r   r   typesr   r   rG   rQ   r.   r.   r.   r/   <module>   s    L)