
    k7i                        S r SSKrSSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  S	S
KJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr   " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\" 5       \" S5      \" S5      \" S5      \" S5      \" S5      \" S5      \" SSS5      \" S S!S5      \" S"S#S5      \" S$S%S5      \" S5      \" S5      \" S5      /rg)&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                   .    \ rS rSrSrSrS rS rS rSr	g)	NoneAlgorithm   nonez%No digital signature or MAC performedc                     g N selfraw_datas     W/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7518/jws_algs.pyprepare_keyNoneAlgorithm.prepare_key   s        c                     gNr   r   )r   msgkeys      r   signNoneAlgorithm.sign"   s    r   c                     US:H  $ r    r   )r   r!   sigr"   s       r   verifyNoneAlgorithm.verify%   s    czr   r   N)
__name__
__module____qualname____firstlineno__namedescriptionr   r#   r'   __static_attributes__r   r   r   r   r      s    D9Kr   r   c                   x    \ rS rSrSr\R                  r\R                  r	\R                  rS rS rS rS rSrg)	HMACAlgorithm)   zHMAC using SHA algorithms for JWS. Available algorithms:

- HS256: HMAC using SHA-256
- HS384: HMAC using SHA-384
- HS512: HMAC using SHA-512
c                 T    SU 3U l         SU 3U l        [        U SU 35      U l        g )NHSzHMAC using SHA-SHA)r-   r.   getattrhash_algr   sha_types     r   __init__HMACAlgorithm.__init__5   s3    
O	,XJ7H:&67r   c                 .    [         R                  " U5      $ r   )r   
import_keyr   s     r   r   HMACAlgorithm.prepare_key:         **r   c                     UR                  S5      n[        R                  " X1U R                  5      R	                  5       $ Nr#   )
get_op_keyhmacnewr7   digestr   r!   r"   op_keys       r   r#   HMACAlgorithm.sign=   s.    'xxT]]3::<<r   c                     UR                  S5      n[        R                  " XAU R                  5      R	                  5       n[        R
                  " X%5      $ )Nr'   )rB   rC   rD   r7   rE   compare_digest)r   r!   r&   r"   rG   v_sigs         r   r'   HMACAlgorithm.verifyB   s>    )dmm4;;=""3..r   r.   r7   r-   N)r)   r*   r+   r,   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r:   r   r#   r'   r/   r   r   r   r1   r1   )   s8     ^^F^^F^^F8
+=
/r   r1   c                   x    \ rS rSrSr\R                  r\R                  r\R                  rS r	S r
S rS rSrg)	RSAAlgorithmH   zRSA 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                     SU 3U l         SU 3U l        [        U SU 35      U l        [        R
                  " 5       U l        g )NRSzRSASSA-PKCS1-v1_5 using SHA-r5   )r-   r.   r6   r7   r   PKCS1v15r8   s     r   r:   RSAAlgorithm.__init__T   sC    
O	9(DH:&67'')r   c                 .    [         R                  " U5      $ r   r   r=   r   s     r   r   RSAAlgorithm.prepare_keyZ   r?   r   c                 x    UR                  S5      nUR                  XR                  U R                  5       5      $ rA   )rB   r#   r   r7   rF   s       r   r#   RSAAlgorithm.sign]   s+    '{{3dmmo>>r   c                     UR                  S5      n UR                  X!U R                  U R                  5       5        g! [         a     gf = f)Nr'   TF)rB   r'   r   r7   r   r   r!   r&   r"   rG   s        r   r'   RSAAlgorithm.verifya   sD    )	MM#DLL$--/B 		s   +? 
AA)r.   r7   r-   r   Nr)   r*   r+   r,   rN   r   rQ   rS   rU   r:   r   r#   r'   r/   r   r   r   rW   rW   H   s8     ]]F]]F]]F*+?r   rW   c                   x    \ rS rSrSr\R                  r\R                  r\R                  rS r	S r
S rS rSrg)	ECAlgorithmj   zECDSA 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                 r    Xl         X l        SU R                   SU 3U l        [        U SU 35      U l        g )NzECDSA using z	 and SHA-r5   )r-   curver.   r6   r7   )r   r-   rj   r9   s       r   r:   ECAlgorithm.__init__v   s:    	
)$**YxjIH:&67r   c                     [         R                  " U5      nUS   U R                  :w  a&  [        SU R                   SU R                   S35      eU$ )Ncrvz	Key for "z" not supported, only "z	" allowed)r   r=   rj   
ValueErrorr-   )r   r   r"   s      r   r   ECAlgorithm.prepare_key|   sQ    x(u:#DII;&=djj\S  
r   c                     UR                  S5      nUR                  U[        U R                  5       5      5      n[	        U5      u  pVUR
                  n[        XW5      [        Xg5      -   $ rA   )rB   r#   r   r7   r   curve_key_sizer   )r   r!   r"   rG   der_sigrssizes           r   r#   ECAlgorithm.sign   sW    '++c5#9:#G,!!!"Z%888r   c                 4   UR                   nUS-   S-  n[        U5      SU-  :w  a  g[        US U 5      n[        X%S  5      n[        Xg5      n UR	                  S5      n	U	R                  X[        U R                  5       5      5        g! [         a     gf = f)N      r	   Fr'   T)	rq   lenr   r   rB   r'   r   r7   r   )
r   r!   r&   r"   key_sizelengthrs   rt   rr   rG   s
             r   r'   ECAlgorithm.verify   s    %%Q,1$s8q6z!s7F|$s7|$&q,	^^H-FMM'dmmo(>? 		s   :B
 

BB)rj   r.   r7   r-   Nre   r   r   r   rg   rg   j   s8     ]]F]]F]]F89r   rg   c                   x    \ rS rSrSr\R                  r\R                  r\R                  rS r	S r
S rS rSrg)	RSAPSSAlgorithm   zRSASSA-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                 p    SU 3U l         SnUR                  X5      U l        [        U SU 35      U l        g )NPSz,RSASSA-PSS using SHA-{} and MGF1 with SHA-{}r5   )r-   formatr.   r6   r7   )r   r9   tpls      r   r:   RSAPSSAlgorithm.__init__   s:    
O	<::h9H:&67r   c                 .    [         R                  " U5      $ r   r^   r   s     r   r   RSAPSSAlgorithm.prepare_key   r?   r   c           	          UR                  S5      nUR                  U[        R                  " [        R                  " U R                  5       5      U R
                  R                  S9U R                  5       5      $ )Nr#   mgfsalt_length)rB   r#   r   PSSMGF1r7   digest_sizerF   s       r   r#   RSAPSSAlgorithm.sign   sY    '{{KKLL1t}}?X?X MMO
 	
r   c           
         UR                  S5      n UR                  UU[        R                  " [        R                  " U R                  5       5      U R
                  R                  S9U R                  5       5        g! [         a     gf = f)Nr'   r   TF)rB   r'   r   r   r   r7   r   r   rc   s        r   r'   RSAPSSAlgorithm.verify   st    )	MMT]]_5 $ 9 9   		s   A+A? ?
BBrM   Nre   r   r   r   r   r      s8     ]]F]]F]]F8+
r   r      i  i   ES256zP-256ES384zP-384ES512zP-521ES256K	secp256k1)rN   rO   rC   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   r1   rW   rg   r   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   