o
    ©D®fú  ã                   @   s>   d dl mZ ddlmZ ddlmZ G dd„ dƒZdd„ Zd	S )
é    )Ú
json_loadsé   )ÚKeySet)Úload_pem_keyc                   @   s8   e Zd Zi Zed	dd„ƒZed
dd„ƒZedd„ ƒZdS )Ú
JsonWebKeyNFc                 C   s   | j | }| |||¡S )aP  Generate a Key with the given key type, curve name or bit size.

        :param kty: string of ``oct``, ``RSA``, ``EC``, ``OKP``
        :param crv_or_size: curve name or bit size
        :param options: a dict of other options for Key
        :param is_private: create a private key or public key
        :return: Key instance
        )ÚJWK_KEY_CLSÚgenerate_key)ÚclsÚktyÚcrv_or_sizeÚoptionsÚ
is_privateÚkey_cls© r   úQ/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc7517/jwk.pyr   	   s   

zJsonWebKey.generate_keyc                 C   sˆ   d}|dur|  d¡}|du rt|tƒr|  d¡}|du r9t|ƒ}| jD ]}| j| }| |¡r8| ||¡  S q$| j| }| ||¡S )zUImport a Key from bytes, string, PEM or dict.

        :return: Key instance
        Nr
   )ÚgetÚ
isinstanceÚdictr   r   Úvalidate_raw_keyÚ
import_key)r	   Úrawr   r
   Úraw_keyÚ_ktyr   r   r   r   r      s   




ÿ
zJsonWebKey.import_keyc                    sB   t |ƒ}t|tƒrd|v r| d¡}t‡ fdd„|D ƒƒS tdƒ‚)z]Import KeySet from string, dict or a list of keys.

        :return: KeySet instance
        Úkeysc                    s   g | ]}ˆ   |¡‘qS r   )r   )Ú.0Úk©r	   r   r   Ú
<listcomp>6   s    z-JsonWebKey.import_key_set.<locals>.<listcomp>zInvalid key set format)Ú_transform_raw_keyr   r   r   r   Ú
ValueError)r	   r   r   r   r   r   Úimport_key_set-   s
   
zJsonWebKey.import_key_set)NF)N)Ú__name__Ú
__module__Ú__qualname__r   Úclassmethodr   r   r    r   r   r   r   r      s    r   c                 C   s@   t | tƒr|  d¡r|  d¡rt| ƒS t | ttfƒrd| iS | S )NÚ{Ú}r   )r   ÚstrÚ
startswithÚendswithr   ÚtupleÚlist)r   r   r   r   r   :   s   
ÿÿr   N)Úauthlib.common.encodingr   Úkey_setr   Ú_cryptography_keyr   r   r   r   r   r   r   Ú<module>   s
    4