Ë
    ”Â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y)&z°authlib.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     úU/var/www/timesheet/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   € Ø�c‰zÐr   N)	Ú__name__Ú
__module__Ú__qualname__ÚnameÚdescriptionÚ
deprecatedr   r!   r$   r   r   r   r   r      s    „ Ø€DØ9€KØ€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)ÚHMACAlgorithmzžHMAC 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ˆŒ	Ø,¨X¨JÐ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   € à—‘ Ó'ˆÜ�x‰x˜  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   € Ø—‘ Ó)ˆÜ—‘˜  d§m¡mÓ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)ÚRSAAlgorithmzÄRSA 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 §¡¨d¯m©m«oÓ>Ð>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   € Ø—‘ Ó)ˆð	Ø�M‰M˜#˜s D§L¡L°$·-±-³/Ô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)ÚECAlgorithmzÀECDSA 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>   € ØˆŒ	ØˆŒ
Ø)¨$¯*©*¨°Y¸x¸jÐ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‰:˜Ÿ™Ò#ÜØ˜DŸI™I˜;Ð&=¸d¿j¹j¸\ÈÐ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]   € Ø—‘ Ó'ˆØ—+‘+˜c¤5¨¯©«Ó#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Ñ$ˆäˆs‹8�q˜6‘zÒ!Øä�s˜7˜F�|Ó$ˆÜ�s˜6˜7�|Ó$ˆÜ& q¨!Ó,ˆð	Ø—^‘^ HÓ-ˆFØ�M‰M˜' 3¬¨d¯m©m«oÓ(>Ô?ØøÜò 	Ùð	ú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)ÚRSAPSSAlgorithmzøRSASSA-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   € Ø—‘ Ó'ˆØ�{‰{ØÜ�K‰KÜ—L‘L §¡£Ó1¸t¿}¹}×?XÑ?Xôð �M‰M‹Oó
ð 	
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   € Ø—‘ Ó)ˆð	Ø�M‰MØØÜ—‘ÜŸ™ 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   