U
    s=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                   @  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rŠd	}n*|d
kr˜d}n|dkr¦d}ntd|› �ƒ‚nf|dkrÄd}nX|dkrÒd}nJ|dk�r|sðtd| j› �ƒ‚|dkrþd}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: ZalgÚcrvZECzP-256ÚES256zP-384ÚES384zP-521ÚES512Z	secp256k1ZES256KzUnsupported crv: ZRSAÚRS256ÚoctÚ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!   úK/var/www/html/mysite/school/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/   r1   r2   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r’t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?)	r9   r   r   ÚlistÚappendr   r   r	   Úlen)r    r9   r   Úerrorr!   r!   r"   r#   _   s     

ÿzPyJWKSet.__init__zdict[str, Any])r$   r   c                 C  s   |   dg ¡}t|ƒS )Nr9   )r   r8   )r$   r9   r!   r!   r"   r&   v   s    zPyJWKSet.from_dictr'   )r(   r   c                 C  s   t  | ¡}t |¡S r%   )r)   r*   r8   r&   )r(   r$   r!   r!   r"   r+   {   s    
zPyJWKSet.from_jsonr   )r0   r   c                 C  s0   | j D ]}|j|kr|  S qtd|› �ƒ‚d S )Nzkeyset has no key for kid: )r9   r1   ÚKeyError)r    r0   r   r!   r!   r"   Ú__getitem__€   s    


zPyJWKSet.__getitem__N)r3   r4   r5   r#   r6   r&   r+   r?   r!   r!   r!   r"   r8   ^   s   r8   c                   @  s6   e Zd Zddœdd„Zddœdd„Zddœd	d
„ZdS )ÚPyJWTSetWithTimestampr8   ©Újwk_setc                 C  s   || _ t ¡ | _d S r%   )rB   ÚtimeÚ	monotonicÚ	timestamp)r    rB   r!   r!   r"   r#   ˆ   s    zPyJWTSetWithTimestamp.__init__r,   c                 C  s   | j S r%   rA   r.   r!   r!   r"   Úget_jwk_setŒ   s    z!PyJWTSetWithTimestamp.get_jwk_setÚfloatc                 C  s   | j S r%   )rE   r.   r!   r!   r"   Úget_timestamp�   s    z#PyJWTSetWithTimestamp.get_timestampN)r3   r4   r5   r#   rF   rH   r!   r!   r!   r"   r@   ‡   s   r@   )Ú
__future__r   r)   rC   Útypingr   Ú
algorithmsr   r   r   Ú
exceptionsr   r	   r
   r   r   Útypesr   r   r8   r@   r!   r!   r!   r"   Ú<module>   s   L)