o
    Y¨Êhë  ã                   @   s@   d dl Z d dlZd dlmZ d dlmZmZ G dd„ deƒZdS )é    N)Ú	Algorithm)Ústring_typesÚ	text_typec                   @   sB   e Zd ZdZejZejZej	Z
dd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚECAlgorithmzÞ
    Performs signing and verification operations using
    ECDSA and the specified hash function

    This class requires the ecdsa package to be installed.

    This is based off of the implementation in PyJWT 0.3.2
    c                 C   s
   || _ d S )N)Úhash_alg)Úselfr   © r   úQ/var/www/html/env/lib/python3.10/site-packages/jwt/contrib/algorithms/py_ecdsa.pyÚ__init__   s   
zECAlgorithm.__init__c                 C   sz   t |tjƒst |tjƒr|S t |tƒr9t |tƒr| d¡}z	tj |¡}W |S  tjj	y8   tj |¡}Y |S w t
dƒ‚)Nzutf-8zExpecting a PEM-formatted key.)Ú
isinstanceÚecdsaÚ
SigningKeyÚVerifyingKeyr   r   ÚencodeÚfrom_pemÚderÚUnexpectedDERÚ	TypeError)r   Úkeyr   r   r	   Úprepare_key   s   
ÿ


úúzECAlgorithm.prepare_keyc                 C   s   |j || jtjjd�S )N)ÚhashfuncÚ	sigencode)Úsignr   r   ÚutilÚsigencode_string)r   Úmsgr   r   r   r	   r   3   s   
ÿzECAlgorithm.signc                 C   s0   z|j ||| jtjjd�W S  ty   Y dS w )N)r   Ú	sigdecodeF)Úverifyr   r   r   Úsigdecode_stringÚAssertionError)r   r   r   Úsigr   r   r	   r   7   s   ÿÿzECAlgorithm.verifyN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚhashlibÚsha256ÚSHA256Úsha384ÚSHA384Úsha512ÚSHA512r
   r   r   r   r   r   r   r	   r      s    r   )r%   r   Újwt.algorithmsr   Ú
jwt.compatr   r   r   r   r   r   r	   Ú<module>   s
   