
    e<                        d Z ddlZddlZddlmZ ddlmZmZmZ ddl	Z
ddlmZ ddlmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZ  ej:                  e      Z G d dej@                        Z! G d de!e      Z" G d de"      Z# G d d      Z$ G d de$e"      Z% G d de$e"      Z& G d de"      Z'e"jQ                   e#dejR                              Z*e"jQ                   e#dejV                              Z,e"jQ                   e#dejZ                              Z.e"jQ                   e%dejR                              Z/e"jQ                   e%dejV                              Z0e"jQ                   e%dejZ                              Z1e"jQ                   e&dejR                              Z2e"jQ                   e&d ejV                              Z3e"jQ                   e&d!ejZ                              Z4e"jQ                   e'd"ejR                              Z5e"jQ                   e'd#ejV                              Z6e"jQ                   e'd$ejZ                              Z7y)%zZJSON Web Algorithms.

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

    N)Hashable)AnyCallableDict)default_backend)hasheshmac)ecpaddingrsa)decode_dss_signatureencode_dss_signature)HashAlgorithm)errors
interfacesjwkc                       e Zd ZdZy)JWAzJSON Web Algorithm.N)__name__
__module____qualname____doc__     ,/usr/lib/python3/dist-packages/josepy/jwa.pyr   r      s     r   r   c            	          e Zd ZU dZi Zeed f   ed<   eed<   deddfdZ	dede
fd	Zdefd
Zedd       ZdefdZededd fd       Zej&                  dededefd       Zej&                  dededede
fd       ZdefdZy)JWASignaturez-Base class for JSON Web Signature Algorithms.
SIGNATURESktynamereturnNc                     || _         y Nr    )selfr    s     r   __init__zJWASignature.__init__&   s	    	r   otherc                 `    t        |t              st        S | j                  |j                  k(  S r#   )
isinstancer   NotImplementedr    )r%   r'   s     r   __eq__zJWASignature.__eq__)   s%    %.!!yyEJJ&&r   c                 D    t        | j                  | j                  f      S r#   )hash	__class__r    r%   s    r   __hash__zJWASignature.__hash__.   s    T^^TYY/00r   c                 8    || j                   |j                  <   |S )z(Register class for JSON deserialization.)r   r    )clssignature_clss     r   registerzJWASignature.register1   s     .;}))*r   c                     | j                   S r#   r$   r/   s    r   to_partial_jsonzJWASignature.to_partial_json7       yyr   jobjc                      | j                   |   S r#   )r   )r2   r8   s     r   	from_jsonzJWASignature.from_json:   s    ~~d##r   keymsgc                     t               )Sign the ``msg`` using ``key``.NotImplementedError)r%   r;   r<   s      r   signzJWASignature.sign>        "##r   sigc                     t               )z-Verify the ``msg`` and ``sig`` using ``key``.r?   )r%   r;   r<   rC   s       r   verifyzJWASignature.verifyC   rB   r   c                     | j                   S r#   r$   r/   s    r   __repr__zJWASignature.__repr__H   r7   r   )r3   r   r!   r   )r   r   r   r   r   r   str__annotations__r   r&   boolr+   intr0   classmethodr4   r6   r:   abcabstractmethodbytesrA   rE   rG   r   r   r   r   r       s   7,.JS.().	HS T 'C 'D '
1# 1  
  $S $^ $ $ 	$ $% $E $ $ 	$# $E $ $$ $ $# r   r   c                   v     e Zd Zej                  Zdedeg ef   f fdZ	de
de
de
fdZde
de
de
defd	Z xZS )
_JWAHSr    hash_c                 <    t         |   |        |       | _        y r#   superr&   r-   r%   r    rR   r.   s      r   r&   z_JWAHS.__init__O       G	r   r;   r<   r!   c                     t        j                  || j                  t                     }|j	                  |       |j                         S )Nbackend)r	   HMACr-   r   updatefinalize)r%   r;   r<   signers       r   rA   z_JWAHS.signS   s4    3		?3DEc  r   rC   c                     t        j                  || j                  t                     }|j	                  |       	 |j                  |       y# t        j                  j                  $ r!}t        j                  |d       Y d }~yd }~ww xY w)NrY   Texc_infoF)r	   r[   r-   r   r\   rE   cryptography
exceptionsInvalidSignatureloggerdebug)r%   r;   r<   rC   verifiererrors         r   rE   z_JWAHS.verifyX   sn    99S$))_5FG	OOC 
 	 &&77 	LLL.	s   A B,BB)r   r   r   r   JWKOctr   rH   r   r   r&   rO   rA   rJ   rE   __classcell__r.   s   @r   rQ   rQ   L   sd    
**CS "m2C)D ! !E !e !
	% 	e 	% 	D 	r   rQ   c                       e Zd ZU ej                  ZeZee	d<   eZ
ee	d<   dej                  dedefdZdej                   dededefdZy	)
_JWARSAr   r-   r;   r<   r!   c                 N   	 |j                  || j                  | j                        S # t        $ r1}t        j                  |d       t        j                  d      d}~wt        $ r:}t        j                  |d       t        j                  t        |            d}~ww xY w)r>   Tr`   %Public key cannot be used for signingN)
rA   r   r-   AttributeErrorre   rf   r   Error
ValueErrorrH   r%   r;   r<   rh   s       r   rA   z_JWARSA.signi   s    	+88Ctyy99 	HLLL.,,FGG 	+LLL.,,s5z**	+s    &) 	B$,AB$*5BB$rC   c                     	 |j                  ||| j                  | j                         y# t        j                  j
                  $ r!}t        j                  |d       Y d}~yd}~ww xY w),Verify the ``msg` and ``sig`` using ``key``.Tr`   NF)rE   r   r-   rb   rc   rd   re   rf   )r%   r;   r<   rC   rh   s        r   rE   z_JWARSA.verifyt   sW    	JJsCtyy9
 	 &&77 	LLL.	s   (+ A)A$$A)N)r   r   r   r   JWKRSAr   r*   r   r   rI   r-   r   r   RSAPrivateKeyrO   rA   RSAPublicKeyrJ   rE   r   r   r   rm   rm   d   sf    
**C!GS!(D-(	+)) 	+ 	+% 	+#**  U t r   rm   c                   6     e Zd Zdedeg ef   ddf fdZ xZS )_JWARSr    rR   r!   Nc                 n    t         |   |       t        j                         | _         |       | _        y r#   )rU   r&   r   PKCS1v15r-   rV   s      r   r&   z_JWARS.__init__   s)    '')G	r   r   r   r   rH   r   r   r&   rj   rk   s   @r   rz   rz      ,    S "m2C)D   r   rz   c                   6     e Zd Zdedeg ef   ddf fdZ xZS )_JWAPSr    rR   r!   Nc                     t         |   |       t        j                  t        j                   |             t        j                  j
                        | _         |       | _        y )N)mgfsalt_length)rU   r&   r   PSSMGF1
MAX_LENGTHr-   rV   s      r   r&   z_JWAPS.__init__   s@    {{w||EG'<'++J`J`aG	r   r}   rk   s   @r   r   r      r~   r   r   c                        e Zd Zej                  Zdedeg ef   f fdZ	de
j                  dedefdZde
j                  dedefdZde
j                  ded	edefd
Zde
j                  dededefdZ xZS )_JWAECr    rR   c                 <    t         |   |        |       | _        y r#   rT   rV   s      r   r&   z_JWAEC.__init__   rW   r   r;   r<   r!   c                     | j                  ||      }t        |      \  }}t        j                  j	                  |j
                        }|j                  |d      |j                  |d      z   S )r>   big)length	byteorder)_signr   r   JWKECexpected_length_for_curvecurveto_bytes)r%   r;   r<   rC   drdsr   s          r   rA   z_JWAEC.sign   sh    jjc"%c*B44SYY?{{&E{:R[[U >I >
 
 	
r   c                 ^   	 |j                  |t        j                  | j                              S # t        $ r1}t
        j                  |d       t        j                  d      d }~wt        $ r:}t
        j                  |d       t        j                  t        |            d }~ww xY w)NTr`   ro   )rA   r
   ECDSAr-   rp   re   rf   r   rq   rr   rH   rs   s       r   r   z_JWAEC._sign   s    	+88C$))!455 	HLLL.,,FGG 	+LLL.,,s5z**	+s    .1 	B,,A&&B,25B''B,rC   c                    t         j                  j                  |j                        }t	        |      d|z  k7  ryt        t        j                  |d| d      t        j                  ||d d            }| j                  |||      S )ru      Fr   r   )r   N)	r   r   r   r   lenr   rK   
from_bytes_verify)r%   r;   r<   rC   rlenasn1sigs         r   rE   z_JWAEC.verify   sx    yy22399=s8q4x&NN3q;%N8NN3tu:N7
 ||Cg..r   r   c                     	 |j                  ||t        j                  | j                               y# t        j
                  j                  $ r!}t        j                  |d       Y d }~yd }~ww xY w)NTr`   F)	rE   r
   r   r-   rb   rc   rd   re   rf   )r%   r;   r<   r   rh   s        r   r   z_JWAEC._verify   sZ    	JJwRXXdii%89
 	 &&77 	LLL.	s   03 A1A,,A1)r   r   r   r   r   r   rH   r   r   r&   r
   EllipticCurvePrivateKeyrO   rA   r   EllipticCurvePublicKeyrJ   rE   r   rj   rk   s   @r   r   r      s    
))CS "m2C)D 
22 
 
5 
+33 +% +E +
/"33 
/% 
/e 
/PT 
/244 5 5 UY r   r   HS256HS384HS512RS256RS384RS512PS256PS384PS512ES256ES384ES512)8r   rM   loggingcollections.abcr   typingr   r   r   cryptography.exceptionsrb   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r	   )cryptography.hazmat.primitives.asymmetricr
   r   r   /cryptography.hazmat.primitives.asymmetric.utilsr   r   %cryptography.hazmat.primitives.hashesr   josepyr   r   r   	getLoggerr   re   JSONDeSerializabler   r   rQ   rm   rz   r   r   r4   SHA256r   SHA384r   SHA512r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s  
   $ & &  8 7 F F @ * *			8	$*
'
' )3 )X\ 0 6Wl Wl -\ -b 	fWfmm<=fWfmm<=fWfmm<= 	fWfmm<=fWfmm<=fWfmm<= 	fWfmm<=fWfmm<=fWfmm<= 	fWfmm<=fWfmm<=fWfmm<=r   