
    !<i                     `   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dS )&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dS )NoneAlgorithmnonez%No digital signature or MAC performedc                     d S N selfraw_datas     /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/authlib/jose/rfc7518/jws_algs.pyprepare_keyzNoneAlgorithm.prepare_key   s    t    c                     dS Nr   r   )r   msgkeys      r   signzNoneAlgorithm.sign"   s    sr   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      sK        D9K        r   r   c                   T    e Zd ZdZej        Zej        Zej	        Z
d Zd Zd Zd ZdS )HMACAlgorithmzHMAC using SHA algorithms for JWS. Available algorithms:

    - HS256: HMAC using SHA-256
    - HS384: HMAC using SHA-384
    - HS512: HMAC using SHA-512
    c                 ^    d| | _         d| | _        t          | d|           | _        d S )NHSzHMAC using SHA-SHA)r(   r)   getattrhash_algr   sha_types     r   __init__zHMACAlgorithm.__init__5   s=    #OO	7X77&6H&6&677r   c                 *    t          j        |          S r   )r   
import_keyr   s     r   r   zHMACAlgorithm.prepare_key:        ***r   c                     |                     d          }t          j        ||| j                                                  S Nr!   )
get_op_keyhmacnewr0   digestr   r   r    op_keys       r   r!   zHMACAlgorithm.sign=   s5    ''xT]33::<<<r   c                     |                     d          }t          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   sG    ))dm44;;=="3...r   N)r%   r&   r'   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r3   r   r!   r$   r   r   r   r+   r+   )   sq          ^F^F^F8 8 8
+ + += = =
/ / / / /r   r+   c                   T    e Zd ZdZej        Zej        Zej        Zd Zd Z	d Z
d ZdS )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                    | _        d S )NRSzRSASSA-PKCS1-v1_5 using SHA-r.   )r(   r)   r/   r0   r   PKCS1v15r1   s     r   r3   zRSAAlgorithm.__init__T   sM    #OO	D(DD&6H&6&677'))r   c                 *    t          j        |          S r   r   r5   r   s     r   r   zRSAAlgorithm.prepare_keyZ   r6   r   c                     |                     d          }|                    || j        |                                           S r8   )r9   r!   r   r0   r=   s       r   r!   zRSAAlgorithm.sign]   s3    ''{{3dmmoo>>>r   c                     |                     d          }	 |                    ||| j        |                                            dS # t          $ r Y dS w xY w)Nr$   TF)r9   r$   r   r0   r   r   r   r#   r    r>   s        r   r$   zRSAAlgorithm.verifya   sa    ))	MM#sDL$--//BBB4 	 	 	55	s   /A 
AANr%   r&   r'   rB   r   rE   rG   rI   r3   r   r!   r$   r   r   r   rK   rK   H   sq          ]F]F]F* * *+ + +? ? ?    r   rK   c                   T    e Zd ZdZej        Zej        Zej        Zd Zd Z	d Z
d ZdS )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|           | _        d S )NzECDSA using z	 and SHA-r.   )r(   curver)   r/   r0   )r   r(   rX   r2   s       r   r3   zECAlgorithm.__init__v   sH    	
I$*IIxII&6H&6&677r   c                     t          j        |          }|d         | j        k    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|   sV    x((u:##SDISSdjSSS   
r   c                 
   |                     d          }|                    |t          |                                                     }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   sn    ''++c5#9#9::#G,,1!!T""Z4%8%888r   c                    |j         }|dz   dz  }t          |          d|z  k    rdS t          |d |                   }t          ||d                    }t          ||          }	 |                    d          }	|	                    ||t          |                                                      dS # t          $ r Y dS 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$s88q6z!!5s7F7|$$s677|$$&q!,,	^^H--FMM'3dmmoo(>(>???4 	 	 	55	s   'AB4 4
CCNrT   r   r   r   rV   rV   j   sq          ]F]F]F8 8 8  9 9 9    r   rV   c                   T    e Zd ZdZej        Zej        Zej        Zd Zd Z	d Z
d ZdS )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                     d| | _         d}|                    ||          | _        t          | d|           | _        d S )NPSz,RSASSA-PSS using SHA-{} and MGF1 with SHA-{}r.   )r(   formatr)   r/   r0   )r   r2   tpls      r   r3   zRSAPSSAlgorithm.__init__   sH    #OO	<::h99&6H&6&677r   c                 *    t          j        |          S r   rP   r   s     r   r   zRSAPSSAlgorithm.prepare_key   r6   r   c           	         |                     d          }|                    |t          j        t          j        |                                           | j        j                  |                                           S )Nr!   mgfsalt_length)r9   r!   r   PSSMGF1r0   digest_sizer=   s       r   r!   zRSAPSSAlgorithm.sign   si    ''{{KL11t}?X   MMOO
 
 	
r   c           
      ,   |                     d          }	 |                    ||t          j        t          j        |                                           | j        j                  |                                            dS # t          $ r Y dS w xY w)Nr$   rp   TF)r9   r$   r   rs   rt   r0   ru   r   rS   s        r   r$   zRSAPSSAlgorithm.verify   s    ))	MMT]]__55 $ 9      4 	 	 	55	s   A,B 
BBNrT   r   r   r   ri   ri      sq          ]F]F]F8 8 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 4 4 4 4 4 1 1 1 1 1 1 = = = = = = > > > > > > P P P P P P P P P P P P " " " " " "                                  L   / / / / /L / / />    <   D1 1 1 1 1, 1 1 1h- - - - -l - - -b MOOM#M#M#LLLK#&&K#&&K#&&K+s++OCOCOCr   