U
    –6{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: ÚalgÚcrvZECzP-256ZES256zP-384ZES384zP-521ZES512Ú	secp256k1ZES256KzUnsupported crv: Ú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   ú//tmp/pip-unpacked-wheel-6i4o_yj7/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/   r0   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?)	r7   r   r   ÚlistÚappendr   r   r	   Úlen)r   r7   r   Úerrorr   r   r    r!   _   s     

ÿzPyJWKSet.__init__zdict[str, Any])r"   r   c                 C  s   |   dg ¡}t|ƒS )Nr7   )r   r6   )r"   r7   r   r   r    r$   v   s    zPyJWKSet.from_dictr%   )r&   r   c                 C  s   t  | ¡}t |¡S r#   )r'   r(   r6   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: )r7   r/   ÚKeyError)r   r.   r   r   r   r    Ú__getitem__€   s    


zPyJWKSet.__getitem__N)r1   r2   r3   r!   r4   r$   r)   r=   r   r   r   r    r6   ^   s   r6   c                   @  s6   e Zd Zddœdd„Zddœdd„Zddœd	d
„ZdS )ÚPyJWTSetWithTimestampr6   ©Ú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#   )rC   r,   r   r   r    Úget_timestamp�   s    z#PyJWTSetWithTimestamp.get_timestampN)r1   r2   r3   r!   rD   rF   r   r   r   r    r>   ‡   s   r>   )Ú
__future__r   r'   rA   Útypingr   Ú
algorithmsr   r   r   Ú
exceptionsr   r	   r
   r   r   Útypesr   r   r6   r>   r   r   r   r    Ú<module>   s   L)