
    kKj                         U d Z ddlZddlZddlZddlmZ ddlmZ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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! G d de      Z" e        edd       ed       ed       e dd       e d       e d       e!d d!dd       e!d"d#d       e!d$d%d       e"d       e"d       e"d      gZ#e$e   e%d&<   eZ&eZ'e Z(e!Z)e"Z*y)'z
joserfc._rfc7518
~~~~~~~~~~~~~~~~

Originally designed in ``authlib.jose.rfc7518``.

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

.. _`Section 3`: https://tools.ietf.org/html/rfc7518#section-3
    N)hashes)decode_dss_signatureencode_dss_signature)ECDSA)padding)InvalidSignature   )JWSAlgModel)InvalidKeyCurveError   )OctKey)RSAKey)ECKey)
encode_int
decode_intc                   l    e Zd ZdZdZdZdedej                  defdZ	dededej                  de
fd	Zy
)NoneAlgorithmnonez%No digital signature or MAC performedzOJWS algorithm "none" is deprecated, via draft-ietf-jose-deprecate-none-rsa15-02msgkeyreturnc                      yN     )selfr   r   s      j/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/joserfc/_rfc7518/jws_algs.pysignzNoneAlgorithm.sign$   s    r   sigc                     |dk(  S r   r   )r   r   r   r   s       r   verifyzNoneAlgorithm.verify'   s    czr   N)__name__
__module____qualname__namedescriptionsecurity_warningbytestAnyr   boolr!   r   r   r   r   r      sU    D9Kh AEE e % e !%% D r   r   c                       e Zd ZdZej
                  Zej                  Zej                  Z
ddej                  d   defdZdededefd	Zded
ededef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
    sha_type        recommendedc                 p    d| | _         d| | _        || _        t        | d|       | _        || _        y )NHSzHMAC using SHA-SHA)r%   r&   r3   getattrhash_algalgorithm_securityr   r.   r3   s      r   __init__zHMACAlgorithm.__init__7   sC    
O	,XJ7&H:&67"*r   r   r   r   c                     |j                  d      }|st        d      t        j                  ||| j                        j                         S )Nr   HMAC key must not be empty)
get_op_key
ValueErrorhmacnewr8   digestr   r   r   op_keys       r   r   zHMACAlgorithm.sign>   sA    ' 9::xxT]]3::<<r   r   c                     |j                  d      }|st        d      t        j                  ||| j                        j                         }t        j                  ||      S )Nr!   r=   )r>   r?   r@   rA   r8   rB   compare_digest)r   r   r   r   rD   v_sigs         r   r!   zHMACAlgorithm.verifyH   sQ    )9::dmm4;;=""3..r   NF)r"   r#   r$   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r)   Literalr+   r;   r(   r   r   r!   r   r   r   r-   r-   +   s{     ^^F^^F^^F+=!9 + += =F =u =/% /e /& /T /r   r-   c                       e Zd ZU dZej
                  Zej                  Zej                  Zej                  e
d<   ddej                  d   defdZdeded	efd
Zdededed	efdZy)_RSAAlgModelRSAr   r.   r/   r3   c                 H    || _         t        | d|       | _        || _        y )Nr6   )r3   r7   r8   r9   r:   s      r   r;   z_RSAAlgModel.__init__X   s'    &H:&67"*r   r   r   r   c                 z    |j                  d      }|j                  || j                  | j                               S Nr   )r>   r   r   r8   rC   s       r   r   z_RSAAlgModel.sign]   s-    '{{3dmmo>>r   r   c                     |j                  d      }	 |j                  ||| j                  | j                                y# t        $ r Y yw xY w)Nr!   TF)r>   r!   r   r8   r   )r   r   r   r   rD   s        r   r!   z_RSAAlgModel.verifya   sF    )	MM#sDLL$--/B 		s   ,A   	AANrH   )r"   r#   r$   key_typer   rL   rN   rP   r   AsymmetricPadding__annotations__r)   rQ   r+   r;   r(   r   r   r!   r   r   r   rS   rS   P   s    H]]F]]F]]F&&&+=!9 + +
? ?F ?u ?% e & T r   rS   c                   j     e Zd ZdZ ej
                         Zddej                  d   def fdZ	 xZ
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
    r.   r/   r3   c                 N    t         |   ||       d| | _        d| | _        y )NRSzRSASSA-PKCS1-v1_5 using SHA-)superr;   r%   r&   )r   r.   r3   	__class__s      r   r;   zRSAAlgorithm.__init__t   s.    ;/
O	9(Dr   rH   )r"   r#   r$   rI   r   PKCS1v15r)   rQ   r+   r;   __classcell__ra   s   @r   r]   r]   j   s?     g GE=!9 E E Er   r]   c            	            e Zd ZdZdZej                  Zej                  Zej                  Zdde	de	de
j                  d   defdZd	ed
d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 )ESAlgorithmzECDSA 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
    ECr%   curver.   r/   r3   c                     || _         || _        d| j                   d| | _        || _        t	        | d|       | _        || _        y )NzECDSA using z	 and SHA-r6   )r%   rh   r&   r3   r7   r8   r9   )r   r%   rh   r.   r3   s        r   r;   zESAlgorithm.__init__   sN    	
)$**YxjI&H:&67"*r   r   r   Nc                     t         |   |       |j                  | j                  k7  r&t	        d| j
                   d| j                   d      y )Nz	Key for 'z' not supported, only 'z	' allowed)r`   	check_key
curve_namerh   r   r%   )r   r   ra   s     r   rk   zESAlgorithm.check_key   sM    #>>TZZ'&499+=TUYU_U_T``i'jkk (r   r   c                     |j                  d      }|j                  |t        | j                                     }t	        |      \  }}|j
                  }t        ||      t        ||      z   S rW   )r>   r   r   r8   r   curve_key_sizer   )r   r   r   rD   der_sigrssizes           r   r   zESAlgorithm.sign   s]    '++c5#9:#G,1!!!T"Z4%888r   r   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)	rn   lenr   r   r>   r!   r   r8   r   )
r   r   r   r   key_sizelengthrp   rq   ro   rD   s
             r   r!   zESAlgorithm.verify   s    %%Q,1$s8q6z!s7F|$s67|$&q!,	^^H-FMM'3dmmo(>? 		s   ;B 	BBrH   )r"   r#   r$   rI   rY   r   rL   rN   rP   strr)   rQ   r+   r;   r   rk   r(   r   r!   rc   rd   s   @r   rf   rf   z   s     H]]F]]F]]F+S + +		-8P +_c +lU lt l
9 9E 9e 9% e % D r   rf   c                   B     e Zd ZdZdej
                  d   f fdZ xZ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
    r.   r/   c                     t         |   |d       d| | _        d| d| | _        t	        j
                  t	        j                  | j                               | j                  j                        | _        y )NFPSzRSASSA-PSS using SHA-z and MGF1 with SHA-)mgfsalt_length)	r`   r;   r%   r&   r   PSSMGF1r8   digest_size)r   r.   ra   s     r   r;   zRSAPSSAlgorithm.__init__   sd    5)
O	28*<OPXzZ{{w||DMMO'DRVR_R_RkRklr   )r"   r#   r$   rI   r)   rQ   r;   rc   rd   s   @r   r{   r{      s%    m=!9 m mr   r{   r0   Tr1   r2   ES256zP-256ES384zP-384ES512zP-521JWS_ALGORITHMS)+rI   r@   rJ   typingr)   cryptography.hazmat.primitivesr   /cryptography.hazmat.primitives.asymmetric.utilsr   r   ,cryptography.hazmat.primitives.asymmetric.ecr   )cryptography.hazmat.primitives.asymmetricr   cryptography.exceptionsr   _rfc7515.modelr
   errorsr   oct_keyr   rsa_keyr   ec_keyr   utilr   r   r   r-   rS   r]   rf   r{   r   listr[   NoneAlgModelHMACAlgModelRSAAlgModel
ECAlgModelRSAPSSAlgModelr   r   r   <module>r      s/  	    1 ? = 4 ( )    (	K 	"/K "/J; 4E< E 2+ 2jml m  O#t##d#t,#&#&CCC%[! " 
 r   