U
    >i                     @   s   d dl Z d dlZd dlZd dlmZ d dlZd dlmZ d dlm	Z	 d dl
mZ dddd	Zeed
ddZeedddZeeeef dddZdS )    N)Tuple)RSAPrivateKey)load_pem_private_key)RSAAlgorithm)Zcrvktyxy)er   n)kr   )ZECZRSAoct)jwk_dictreturnc                    sn    d }t |}|d kr,tjd| tj fdd|D dd }t	|
 }t|d S )Nr   z Unable to canonicalize key type c                    s   i | ]}| | qS  r   ).0r   r   r   @/tmp/pip-unpacked-wheel-upujnpc2/allauth/core/internal/jwkkit.py
<dictcomp>   s      z"jwk_thumbprint.<locals>.<dictcomp>),:)
separators   =)JWK_REQUIRED_MEMBERSgetjwt
exceptionsZ
PyJWKErrorjsondumpsencodehashlibsha256digestbase64urlsafe_b64encoderstripdecode)r   Zkey_typemembersZ
json_bytesZ	json_hashr   r   r   jwk_thumbprint   s    

r'   )pemr   c                 C   s$   t | dd d}t|ts t|S )Nutf8)password)r   r   
isinstancer   
ValueError)r(   private_keyr   r   r   load_pem"   s    
r.   c                 C   s4   t | }| }tt|}t||d< ||fS )NZkid)r.   
public_keyr   loadsr   Zto_jwkr'   )r(   r-   r/   r   r   r   r   load_jwk_from_pem,   s
    r1   )r"   r   r   typingr   r   Z-cryptography.hazmat.primitives.asymmetric.rsar   Z,cryptography.hazmat.primitives.serializationr   Zjwt.algorithmsr   r   dictstrr'   r.   r1   r   r   r   r   <module>   s   
