
    ([f]                     P   d 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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 )$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)hashes)decode_dss_signatureencode_dss_signature)ECDSA)padding)InvalidSignature   )JWSAlgorithm   )OctKey)RSAKey)ECKey)
encode_int
decode_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     Q/var/www/piapp/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S )NFr   )r   r   sigr   s       r   verifyzNoneAlgorithm.verify$   s    ur   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__3   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_key8        ***r   c                     |                     d          }t          j        ||| j                                                  S Nr    )
get_op_keyhmacnewr/   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#   )r8   r9   r:   r/   r;   compare_digest)r   r   r"   r   r=   v_sigs         r   r#   zHMACAlgorithm.verify@   sG    ))dm44;;=="3...r   N)r$   r%   r&   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r2   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.   r/   r   PKCS1v15r0   s     r   r2   zRSAAlgorithm.__init__Q   sM    #OO	D(DD&6H&6&677'))r   c                 *    t          j        |          S r   r   r4   r   s     r   r   zRSAAlgorithm.prepare_keyW   r5   r   c                     |                     d          }|                    || j        |                                           S r7   )r8   r    r   r/   r<   s       r   r    zRSAAlgorithm.signZ   s3    ''{{3dmmoo>>>r   c                     |                     d          }	 |                    ||| j        |                                            dS # t          $ r Y dS w xY w)Nr#   TF)r8   r#   r   r/   r   r   r   r"   r   r=   s        r   r#   zRSAAlgorithm.verify^   sa    ))	MM#sDL$--//BBB4 	 	 	55	s   /A 
AANr$   r%   r&   rA   r   rD   rF   rH   r2   r   r    r#   r   r   r   rJ   rJ   F   sq          ]F]F]F* * *+ + +? ? ?    r   rJ   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.   r/   )r   r'   rW   r1   s       r   r2   zECAlgorithm.__init__r   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   r4   rW   
ValueErrorr'   )r   r   r   s      r   r   zECAlgorithm.prepare_keyx   sN    x((u:##```4:```aaa
r   c                 
   |                     d          }|                    |t          |                                                     }t	          |          \  }}|j        }t          ||          t          ||          z   S r7   )r8   r    r   r/   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   r8   r#   r   r/   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NrS   r   r   r   rU   rU   g   sq          ]F]F]F8 8 8  9 9 9    r   rU   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.   r/   )r   r1   tpls      r   r2   zRSAPSSAlgorithm.__init__   sH    #OO	<::h99&6H&6&677r   c                 *    t          j        |          S r   rO   r   s     r   r   zRSAPSSAlgorithm.prepare_key   r5   r   c           	         |                     d          }|                    |t          j        t          j        |                                           | j        j                  |                                           S )Nr    mgfsalt_length)r8   r    r   PSSMGF1r/   digest_sizer<   s       r   r    zRSAPSSAlgorithm.sign   sj    ''{{KL11 M5   MMOO
 
 	
r   c           
      ,   |                     d          }	 |                    ||t          j        t          j        |                                           | j        j                  |                                            dS # t          $ r Y dS w xY w)Nr#   ro   TF)r8   r#   r   rr   rs   r/   rt   r   rR   s        r   r#   zRSAPSSAlgorithm.verify   s    ))	MMT]]__55 $ 9      4 	 	 	55	s   A,B 
BBNrS   r   r   r   rh   rh      sq          ]F]F]F8 8 8+ + +	
 	
 	
    r   rh      i  i   ES256zP-256ES384zP-384ES512zP-521ES256K	secp256k1)rA   r9   rB   cryptography.hazmat.primitivesr   /cryptography.hazmat.primitives.asymmetric.utilsr   r   ,cryptography.hazmat.primitives.asymmetric.ecr   )cryptography.hazmat.primitives.asymmetricr   cryptography.exceptionsr   rfc7515r
   oct_keyr   rsa_keyr   ec_keyr   utilr   r   r   r*   rJ   rU   rh   JWS_ALGORITHMSr   r   r   <module>r      s      1 1 1 1 1 1        ? > > > > > = = = = = = 4 4 4 4 4 4 " " " " " "                   ( ( ( ( ( ( ( (    L   / / / / /L / / /<    <   B. . . . ., . . .b- - - - -l - - -b MOOM#M#M#LLLK#&&K#&&K#&&K+s++OCOCOCr   