�
L�g�v � �� � d dl mZ d dlZd dlZd dlZd dlmZmZ d dlm Z m
Z
mZmZm
Z
mZmZ ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZmZ d d lm Z m!Z! d d
l"m#Z# d dl$m%Z% d dl&m'Z' d d
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2 d dl3m4Z4m5Z5 d dl6m7Z7m8Z8 d dl9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZA d dlBmCZCmDZDmEZEmFZFmGZGmHZHmIZI dZJn
# eK$ r dZJY nw xY we r3e:e<z ZLe/e1z ZMe7e8z e4z e5z ZNeLeMz eNz ZOe:e/z e7z e4z ZPe<e1z e8z e5z ZQh d�ZRd&d�ZS G d� de� � ZT G d� deT� � ZU G d� deT� � ZVeJr: G d� deT� � ZW G d � d!eT� � ZX G d"� d#eW� � ZY G d$� d%eT� � ZZdS dS )'� )�annotationsN)�ABC�abstractmethod)�
TYPE_CHECKING�Any�ClassVar�Literal�NoReturn�cast�overload� ��InvalidKeyError)�HashlibHash�JWKDict) �base64url_decode�base64url_encode�der_to_raw_signature�force_bytes�from_base64url_uint�
is_pem_format�
is_ssh_key�raw_to_der_signature�to_base64url_uint)�InvalidSignature�UnsupportedAlgorithm)�default_backend)�hashes)�padding)
�ECDSA� SECP256K1� SECP256R1� SECP384R1� SECP521R1�
EllipticCurve�EllipticCurvePrivateKey�EllipticCurvePrivateNumbers�EllipticCurvePublicKey�EllipticCurvePublicNumbers)�Ed448PrivateKey�Ed448PublicKey)�Ed25519PrivateKey�Ed25519PublicKey)�
RSAPrivateKey�RSAPrivateNumbers�RSAPublicKey�RSAPublicNumbers�rsa_crt_dmp1�rsa_crt_dmq1�rsa_crt_iqmp�rsa_recover_prime_factors)�Encoding�NoEncryption�
PrivateFormat�PublicFormat�load_pem_private_key�load_pem_public_key�load_ssh_public_keyTF> �ES256�ES384�ES512�ES521�EdDSA�PS256�PS384�PS512�RS256�RS384�RS512�ES256K�return�dict[str, Algorithm]c � � t � � t t j � � t t j � � t t j � � d�} t
�r+| � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t t j � � t � � d�� � | S )zE
Returns the algorithms that are implemented by the library.
)�none�HS256�HS384�HS512)rE rF rG r= rH r>