
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
kZ                 @   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   /usr/lib/python3.6/py_ecdsa.py__init__   s    zECAlgorithm.__init__c             C   s~   t |tjst |tjr|S t |trrt |tr:|jd}ytjj|}W qz tjj	k
rn   tjj|}Y qzX nt
d|S )Nzutf-8zExpecting a PEM-formatted key.)
isinstanceecdsaZ
SigningKeyZVerifyingKeyr   r   encodeZfrom_pemZderZUnexpectedDER	TypeError)r   keyr   r   r	   prepare_key   s    


zECAlgorithm.prepare_keyc             C   s   |j || jtjjdS )N)hashfuncZ	sigencode)signr   r   utilZsigencode_string)r   msgr   r   r   r	   r   3   s    
zECAlgorithm.signc             C   s2   y|j ||| jtjjdS  tk
r,   dS X d S )N)r   Z	sigdecodeF)verifyr   r   r   Zsigdecode_stringAssertionError)r   r   r   Zsigr   r   r	   r   7   s
    zECAlgorithm.verifyN)__name__
__module____qualname____doc__hashlibZsha256ZSHA256Zsha384ZSHA384Zsha512ZSHA512r
   r   r   r   r   r   r   r	   r      s   r   )r   r   Zjwt.algorithmsr   Z
jwt.compatr   r   r   r   r   r   r	   <module>   s   