
    Ki                        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d Zy)NoneAlgorithmnonez%No digital signature or MAC performedTc                      y N selfraw_datas     i/home/jay/workspace/scripts/.codegraph-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description
deprecatedr   r!   r$   r   r   r   r   r      s     D9KJ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__6   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newr1   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$   )r:   r;   r<   r1   r=   compare_digest)r   r   r#   r    r?   v_sigs         r   r$   zHMACAlgorithm.verifyC   sB    )dmm4;;=""3..r   N)r%   r&   r'   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r4   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)   r0   r1   r   PKCS1v15r2   s     r   r4   zRSAAlgorithm.__init__U   sC    
O	9(DH:&67'')r   c                 ,    t        j                  |      S r   r   r6   r   s     r   r   zRSAAlgorithm.prepare_key[   r7   r   c                 z    |j                  d      }|j                  || j                  | j                               S r9   )r:   r!   r   r1   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)r:   r$   r   r1   r   r   r   r#   r    r?   s        r   r$   zRSAAlgorithm.verifyb   sF    )	MM#sDLL$--/B 		s   ,A   	AANr%   r&   r'   rC   r   rF   rH   rJ   r4   r   r!   r$   r   r   r   rL   rL   I   s8     ]]F]]F]]F*+?r   rL   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)   r0   r1   )r   r(   rY   r3   s       r   r4   zECAlgorithm.__init__w   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   r6   rY   
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 r9   )r:   r!   r   r1   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   r:   r$   r   r1   r   )
r   r   r#   r    key_sizelengthr`   ra   r_   r?   s
             r   r$   zECAlgorithm.verify   s    %%Q,1$s8q6z!s7F|$s67|$&q!,	^^H-FMM'3dmmo(>? 		s   ;B 	BBNrU   r   r   r   rW   rW   k   s8     ]]F]]F]]F89r   rW   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)   r0   r1   )r   r3   tpls      r   r4   zRSAPSSAlgorithm.__init__   s<    
O	<::h9H:&67r   c                 ,    t        j                  |      S r   rQ   r   s     r   r   zRSAPSSAlgorithm.prepare_key   r7   r   c           	          |j                  d      }|j                  |t        j                  t        j                  | j                               | j
                  j                        | j                               S )Nr!   mgfsalt_length)r:   r!   r   PSSMGF1r1   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$   rq   TF)r:   r$   r   rt   ru   r1   rv   r   rT   s        r   r$   zRSAPSSAlgorithm.verify   st    )	MMT]]_5 $ 9 9   		s   A,B   	BBNrU   r   r   r   rj   rj      s8     ]]F]]F]]F8+
r   rj      i  i   ES256zP-256ES384zP-384ES512zP-521ES256K	secp256k1)rC   rD   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,   rL   rW   rj   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   