U
    ÓZju  ã                   @   sä  d Z 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 ddlmZmZmZ zddlmZ W n  ek
r�   ddlmZ Y nX e e¡ZG d	d
„ d
ejƒZG dd„ deeƒZG dd„ deƒZG dd„ deƒZG dd„ deeƒZG dd„ deeƒZG dd„ deƒZe  edej!ƒ¡Z"e  edej#ƒ¡Z$e  edej%ƒ¡Z&e  edej!ƒ¡Z'e  edej#ƒ¡Z(e  edej%ƒ¡Z)e  edej!ƒ¡Z*e  edej#ƒ¡Z+e  edej%ƒ¡Z,e  ed ƒ¡Z-e  ed!ƒ¡Z.e  ed"ƒ¡Z/dS )#zZJSON Web Algorithms.

https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40

é    N)Údefault_backend)Úhashes)Úhmac)Úpadding)ÚerrorsÚ
interfacesÚjwk)ÚHashablec                   @   s   e Zd ZdZdS )ÚJWAzJSON Web Algorithm.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úM/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/josepy/jwa.pyr
      s   r
   c                   @   sx   e Zd ZdZi Zdd„ Zdd„ Zdd„ Zdd	„ Ze	d
d„ ƒZ
dd„ Ze	dd„ ƒZejdd„ ƒZejdd„ ƒZdd„ ZdS )ÚJWASignaturez-Base class for JSON Web Signature Algorithms.c                 C   s
   || _ d S ©N©Úname)Úselfr   r   r   r   Ú__init__$   s    zJWASignature.__init__c                 C   s   t |tƒstS | j|jkS r   )Ú
isinstancer   ÚNotImplementedr   ©r   Úotherr   r   r   Ú__eq__'   s    
zJWASignature.__eq__c                 C   s   t | j| jfƒS r   )ÚhashÚ	__class__r   ©r   r   r   r   Ú__hash__,   s    zJWASignature.__hash__c                 C   s
   | |k S r   r   r   r   r   r   Ú__ne__/   s    zJWASignature.__ne__c                 C   s   || j |j< |S )z(Register class for JSON deserialization.)Ú
SIGNATURESr   )ÚclsZsignature_clsr   r   r   Úregister2   s    zJWASignature.registerc                 C   s   | j S r   r   r   r   r   r   Úto_partial_json8   s    zJWASignature.to_partial_jsonc                 C   s
   | j | S r   )r!   )r"   Zjobjr   r   r   Ú	from_json;   s    zJWASignature.from_jsonc                 C   s
   t ƒ ‚dS )úSign the ``msg`` using ``key``.N©ÚNotImplementedError©r   ÚkeyÚmsgr   r   r   Úsign?   s    zJWASignature.signc                 C   s
   t ƒ ‚dS )z-Verify the ``msg`` and ``sig`` using ``key``.Nr'   ©r   r*   r+   Úsigr   r   r   ÚverifyD   s    zJWASignature.verifyc                 C   s   | j S r   r   r   r   r   r   Ú__repr__I   s    zJWASignature.__repr__N)r   r   r   r   r!   r   r   r   r    Úclassmethodr#   r$   r%   ÚabcÚabstractmethodr,   r/   r0   r   r   r   r   r       s    



r   c                       s2   e Zd ZejZ‡ fdd„Zdd„ Zdd„ Z‡  Z	S )Ú_JWAHSc                    s   t t| ƒ |¡ |ƒ | _d S r   )Úsuperr4   r   r   ©r   r   Úhash_©r   r   r   r   Q   s    z_JWAHS.__init__c                 C   s&   t j|| jtƒ d�}| |¡ | ¡ S )N©Úbackend)r   ÚHMACr   r   ÚupdateÚfinalize)r   r*   r+   Úsignerr   r   r   r,   U   s    
z_JWAHS.signc              
   C   sp   t j|| jtƒ d�}| |¡ z| |¡ W n: tjjk
rf } zt	j
|dd� W Y ¢dS d }~X Y nX dS d S )Nr9   T©Úexc_infoF)r   r;   r   r   r<   r/   ÚcryptographyÚ
exceptionsÚInvalidSignatureÚloggerÚdebug)r   r*   r+   r.   ÚverifierÚerrorr   r   r   r/   Z   s    
z_JWAHS.verify)
r   r   r   r   ZJWKOctÚktyr   r,   r/   Ú__classcell__r   r   r8   r   r4   M   s   r4   c                   @   s*   e Zd ZejZeZeZdd„ Z	dd„ Z
dS )Ú_JWARSAc              
   C   s  t |dƒ}z,|r$| || j| j¡W S | | j| j¡}W nv tk
rp } ztj|dd� t 	d¡‚W 5 d}~X Y n> t
k
r¬ } z tj|dd� t 	t|ƒ¡‚W 5 d}~X Y nX | |¡ z
| ¡ W S  t
k
�r } z tj|dd� t 	t|ƒ¡‚W 5 d}~X Y nX dS )r&   r,   Tr?   z%Public key cannot be used for signingN)Úhasattrr,   r   r   r>   ÚAttributeErrorrD   rE   r   ÚErrorÚ
ValueErrorÚstrr<   r=   )r   r*   r+   Únew_apir>   rG   r   r   r   r,   l   s"    
 

z_JWARSA.signc              
   C   s”   t |dƒ}|s*| || j| j¡}| |¡ z&|rF| ||| j| j¡ n| ¡  W n: tjjk
rŠ } zt	j
|dd� W Y ¢dS d}~X Y nX dS dS )z,Verify the ``msg` and ``sig`` using ``key``.r/   Tr?   FN)rK   rF   r   r   r<   r/   rA   rB   rC   rD   rE   )r   r*   r+   r.   rP   rF   rG   r   r   r   r/   �   s    

z_JWARSA.verifyN)r   r   r   r   ZJWKRSArH   r   r   r   r,   r/   r   r   r   r   rJ   f   s
   rJ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_JWARSc                    s&   t t| ƒ |¡ t ¡ | _|ƒ | _d S r   )r5   rQ   r   r   ZPKCS1v15r   r6   r8   r   r   r   –   s    
z_JWARS.__init__©r   r   r   r   rI   r   r   r8   r   rQ   ”   s   rQ   c                       s   e Zd Z‡ fdd„Z‡  ZS )Ú_JWAPSc                    s8   t t| ƒ |¡ tjt |ƒ ¡tjjd�| _|ƒ | _d S )N)ZmgfZsalt_length)r5   rS   r   r   ZPSSZMGF1Z
MAX_LENGTHr   r6   r8   r   r   r   ž   s    
þz_JWAPS.__init__rR   r   r   r8   r   rS   œ   s   rS   c                   @   s   e Zd Zdd„ Zdd„ ZdS )Ú_JWAESc                 C   s
   t ƒ ‚d S r   r'   r)   r   r   r   r,   ª   s    z_JWAES.signc                 C   s
   t ƒ ‚d S r   r'   r-   r   r   r   r/   ­   s    z_JWAES.verifyN)r   r   r   r,   r/   r   r   r   r   rT   ¦   s   rT   ÚHS256ÚHS384ÚHS512ÚRS256ÚRS384ÚRS512ÚPS256ÚPS384ÚPS512ÚES256ÚES384ÚES512)0r   r2   ÚloggingZcryptography.exceptionsrA   Zcryptography.hazmat.backendsr   Zcryptography.hazmat.primitivesr   r   Z)cryptography.hazmat.primitives.asymmetricr   Zjosepyr   r   r   Úcollections.abcr	   ÚImportErrorÚcollectionsÚ	getLoggerr   rD   ZJSONDeSerializabler
   r   r4   ÚobjectrJ   rQ   rS   rT   r#   ÚSHA256rU   ÚSHA384rV   ÚSHA512rW   rX   rY   rZ   r[   r\   r]   r^   r_   r`   r   r   r   r   Ú<module>   s@   
-.
