
    ~h                        d 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 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 ddlmZ ddlmZ  G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z e        ed       ed       ed       ed       ed       ed       eddd       ed d!d       ed"d#d       ed$d%d       ed       ed       ed      gZy)&zauthlib.jose.rfc7518.
~~~~~~~~~~~~~~~~~~~~

"alg" (Algorithm) Header Parameter Values for JWS per `Section 3`_.

.. _`Section 3`: https://tools.ietf.org/html/rfc7518#section-3
    N)InvalidSignature)hashes)padding)ECDSA)decode_dss_signature)encode_dss_signature   )JWSAlgorithm   )ECKey)OctKey)RSAKey)
decode_int)
encode_intc                   &    e Zd ZdZdZd Zd Zd Zy)NoneAlgorithmnonez%No digital signature or MAC performedc                      y N selfraw_datas     Y/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7518/jws_algs.pyprepare_keyzNoneAlgorithm.prepare_key   s        c                      yNr   r   )r   msgkeys      r   signzNoneAlgorithm.sign"   s    r   c                     |dk(  S r   r   )r   r   sigr    s       r   verifyzNoneAlgorithm.verify%   s    czr   N)__name__
__module____qualname__namedescriptionr   r!   r$   r   r   r   r   r      s    D9Kr   r   c                   p    e Zd ZdZej
                  Zej                  Zej                  Z
d Zd Zd Zd Zy)HMACAlgorithmzHMAC using SHA algorithms for JWS. Available algorithms:

    - HS256: HMAC using SHA-256
    - HS384: HMAC using SHA-384
    - HS512: HMAC using SHA-512
    c                 T    d| | _         d| | _        t        | d|       | _        y )NHSzHMAC using SHA-SHA)r(   r)   getattrhash_algr   sha_types     r   __init__zHMACAlgorithm.__init__5   s3    
O	,XJ7H:&67r   c                 ,    t        j                  |      S r   )r   
import_keyr   s     r   r   zHMACAlgorithm.prepare_key:         **r   c                     |j                  d      }t        j                  ||| j                        j	                         S Nr!   )
get_op_keyhmacnewr0   digestr   r   r    op_keys       r   r!   zHMACAlgorithm.sign=   s0    'xxT]]3::<<r   c                     |j                  d      }t        j                  ||| j                        j	                         }t        j
                  ||      S )Nr$   )r9   r:   r;   r0   r<   compare_digest)r   r   r#   r    r>   v_sigs         r   r$   zHMACAlgorithm.verifyB   sB    )dmm4;;=""3..r   N)r%   r&   r'   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r3   r   r!   r$   r   r   r   r+   r+   )   s8     ^^F^^F^^F8
+=
/r   r+   c                   p    e Zd ZdZej
                  Zej                  Zej                  Zd Zd Z	d Z
d Zy)RSAAlgorithmzRSA using SHA algorithms for JWS. Available algorithms:

    - RS256: RSASSA-PKCS1-v1_5 using SHA-256
    - RS384: RSASSA-PKCS1-v1_5 using SHA-384
    - RS512: RSASSA-PKCS1-v1_5 using SHA-512
    c                     d| | _         d| | _        t        | d|       | _        t	        j
                         | _        y )NRSzRSASSA-PKCS1-v1_5 using SHA-r.   )r(   r)   r/   r0   r   PKCS1v15r1   s     r   r3   zRSAAlgorithm.__init__T   sC    
O	9(DH:&67'')r   c                 ,    t        j                  |      S r   r   r5   r   s     r   r   zRSAAlgorithm.prepare_keyZ   r6   r   c                 z    |j                  d      }|j                  || j                  | j                               S r8   )r9   r!   r   r0   r=   s       r   r!   zRSAAlgorithm.sign]   s-    '{{3dmmo>>r   c                     |j                  d      }	 |j                  ||| j                  | j                                y# t        $ r Y yw xY w)Nr$   TF)r9   r$   r   r0   r   r   r   r#   r    r>   s        r   r$   zRSAAlgorithm.verifya   sF    )	MM#sDLL$--/B 		s   ,A   	AANr%   r&   r'   rB   r   rE   rG   rI   r3   r   r!   r$   r   r   r   rK   rK   H   s8     ]]F]]F]]F*+?r   rK   c                   p    e Zd ZdZej
                  Zej                  Zej                  Zd Zd Z	d Z
d Zy)ECAlgorithmzECDSA using SHA algorithms for JWS. Available algorithms:

    - ES256: ECDSA using P-256 and SHA-256
    - ES384: ECDSA using P-384 and SHA-384
    - ES512: ECDSA using P-521 and SHA-512
    c                 v    || _         || _        d| j                   d| | _        t        | d|       | _        y )NzECDSA using z	 and SHA-r.   )r(   curver)   r/   r0   )r   r(   rX   r2   s       r   r3   zECAlgorithm.__init__v   s>    	
)$**YxjIH:&67r   c                     t        j                  |      }|d   | j                  k7  r&t        d| j                   d| j                   d      |S )Ncrvz	Key for "z" not supported, only "z	" allowed)r   r5   rX   
ValueErrorr(   )r   r   r    s      r   r   zECAlgorithm.prepare_key|   sQ    x(u:#DII;&=djj\S  
r   c                     |j                  d      }|j                  |t        | j                                     }t	        |      \  }}|j
                  }t        ||      t        ||      z   S r8   )r9   r!   r   r0   r   curve_key_sizer   )r   r   r    r>   der_sigrssizes           r   r!   zECAlgorithm.sign   s]    '++c5#9:#G,1!!!T"Z4%888r   c                 6   |j                   }|dz   dz  }t        |      d|z  k7  ryt        |d |       }t        ||d        }t        ||      }	 |j	                  d      }	|	j                  ||t        | j                                      y# t        $ r Y yw xY w)N      r	   Fr$   T)	r]   lenr   r   r9   r$   r   r0   r   )
r   r   r#   r    key_sizelengthr_   r`   r^   r>   s
             r   r$   zECAlgorithm.verify   s    %%Q,1$s8q6z!s7F|$s67|$&q!,	^^H-FMM'3dmmo(>? 		s   ;B 	BBNrT   r   r   r   rV   rV   j   s8     ]]F]]F]]F89r   rV   c                   p    e Zd ZdZej
                  Zej                  Zej                  Zd Zd Z	d Z
d Zy)RSAPSSAlgorithmzRSASSA-PSS using SHA algorithms for JWS. Available algorithms:

    - PS256: RSASSA-PSS using SHA-256 and MGF1 with SHA-256
    - PS384: RSASSA-PSS using SHA-384 and MGF1 with SHA-384
    - PS512: RSASSA-PSS using SHA-512 and MGF1 with SHA-512
    c                 r    d| | _         d}|j                  ||      | _        t        | d|       | _        y )NPSz,RSASSA-PSS using SHA-{} and MGF1 with SHA-{}r.   )r(   formatr)   r/   r0   )r   r2   tpls      r   r3   zRSAPSSAlgorithm.__init__   s<    
O	<::h9H:&67r   c                 ,    t        j                  |      S r   rP   r   s     r   r   zRSAPSSAlgorithm.prepare_key   r6   r   c           	          |j                  d      }|j                  |t        j                  t        j                  | j                               | j
                  j                        | j                               S )Nr!   mgfsalt_length)r9   r!   r   PSSMGF1r0   digest_sizer=   s       r   r!   zRSAPSSAlgorithm.sign   sY    '{{KKLL1t}}?X?X MMO
 	
r   c           
         |j                  d      }	 |j                  ||t        j                  t        j                  | j                               | j
                  j                        | j                                y# t        $ r Y yw xY w)Nr$   rp   TF)r9   r$   r   rs   rt   r0   ru   r   rS   s        r   r$   zRSAPSSAlgorithm.verify   st    )	MMT]]_5 $ 9 9   		s   A,B   	BBNrT   r   r   r   ri   ri      s8     ]]F]]F]]F8+
r   ri      i  i   ES256zP-256ES384zP-384ES512zP-521ES256K	secp256k1)rB   rC   r:   cryptography.exceptionsr   cryptography.hazmat.primitivesr   )cryptography.hazmat.primitives.asymmetricr   ,cryptography.hazmat.primitives.asymmetric.ecr   /cryptography.hazmat.primitives.asymmetric.utilsr   r   rfc7515r
   ec_keyr   oct_keyr   rsa_keyr   utilr   r   r   r+   rK   rV   ri   JWS_ALGORITHMSr   r   r   <module>r      s      4 1 = > P P "     L /L />< D1, 1h-l -b O####&#&#&+s+CCCr   