
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
kZ                 @   s`   d dl Zd dlZd dlZd dlmZ d dlmZ d dlm	Z	 d dl
mZmZ G dd de	ZdS )    N)RSA)
PKCS1_v1_5)	Algorithm)string_types	text_typec               @   sH   e Zd ZdZejjZejjZejjZdd Z	dd Z
dd Zdd	 Zd
S )RSAAlgorithmz
    Performs signing and verification operations using
    RSASSA-PKCS-v1_5 and the specified hash function.

    This class requires PyCrypto 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/pycrypto.py__init__   s    zRSAAlgorithm.__init__c             C   sF   t |tjr|S t |tr:t |tr.|jd}tj|}ntd|S )Nzutf-8z&Expecting a PEM- or RSA-formatted key.)
isinstancer   Z_RSAobjr   r   encodeZ	importKey	TypeError)r	   keyr
   r
   r   prepare_key   s    


zRSAAlgorithm.prepare_keyc             C   s   t j|j| jj|S )N)r   newsignr   )r	   msgr   r
   r
   r   r   *   s    zRSAAlgorithm.signc             C   s   t j|j| jj||S )N)r   r   verifyr   )r	   r   r   Zsigr
   r
   r   r   -   s    zRSAAlgorithm.verifyN)__name__
__module____qualname____doc__CryptoZHashZSHA256ZSHA384ZSHA512r   r   r   r   r
   r
   r
   r   r      s   r   )ZCrypto.Hash.SHA256r   ZCrypto.Hash.SHA384ZCrypto.Hash.SHA512ZCrypto.PublicKeyr   ZCrypto.Signaturer   Zjwt.algorithmsr   Z
jwt.compatr   r   r   r
   r
   r
   r   <module>   s   