o
    Df]                     @   sN  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 deZG dd deZG dd deZG dd deZG d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                   @   s,   e Zd ZdZdZdd Zdd Zdd Zd	S )
NoneAlgorithmnonez%No digital signature or MAC performedc                 C   s   d S N selfraw_datar   r   V/home/ubuntu/webapp/venv/lib/python3.10/site-packages/authlib/jose/rfc7518/jws_algs.pyprepare_key      zNoneAlgorithm.prepare_keyc                 C      dS )N    r   )r   msgkeyr   r   r   sign!   r   zNoneAlgorithm.signc                 C   r   )NFr   )r   r   sigr   r   r   r   verify$   r   zNoneAlgorithm.verifyN)__name__
__module____qualname__namedescriptionr   r   r    r   r   r   r   r      s    r   c                   @   sB   e Zd ZdZejZejZej	Z
dd Zdd Zdd Zd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                 C   s.   d| | _ d| | _t| d| | _d S )NHSzHMAC using SHA-SHA)r$   r%   getattrhash_algr   sha_typer   r   r   __init__3   s   zHMACAlgorithm.__init__c                 C   
   t |S r   )r   
import_keyr   r   r   r   r   8      
zHMACAlgorithm.prepare_keyc                 C   s   | d}t||| j S Nr   )
get_op_keyhmacnewr*   digestr   r   r   op_keyr   r   r   r   ;   s   
zHMACAlgorithm.signc                 C   s*   | d}t||| j }t||S )Nr    )r2   r3   r4   r*   r5   compare_digest)r   r   r   r   r7   v_sigr   r   r   r    @   s   
zHMACAlgorithm.verifyN)r!   r"   r#   __doc__hashlibsha256SHA256sha384SHA384sha512SHA512r-   r   r   r    r   r   r   r   r&   (   s    r&   c                   @   B   e Zd ZdZejZejZejZdd Zdd Z	dd Z
d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                 C   s8   d| | _ d| | _t| d| | _t | _d S )NRSzRSASSA-PKCS1-v1_5 using SHA-r(   )r$   r%   r)   r*   r   PKCS1v15r+   r   r   r   r-   Q   s   zRSAAlgorithm.__init__c                 C   r.   r   r   r/   r   r   r   r   r   W   r0   zRSAAlgorithm.prepare_keyc                 C   s   | d}||| j|  S r1   )r2   r   r   r*   r6   r   r   r   r   Z   s   
zRSAAlgorithm.signc                 C   s<   | d}z|||| j|   W dS  ty   Y dS w )Nr    TF)r2   r    r   r*   r   r   r   r   r   r7   r   r   r   r    ^   s   
zRSAAlgorithm.verifyNr!   r"   r#   r:   r   r=   r?   rA   r-   r   r   r    r   r   r   r   rC   F   s    rC   c                   @   rB   )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                 C   s6   || _ || _d| j d| | _t| d| | _d S )NzECDSA using z	 and SHA-r(   )r$   curver%   r)   r*   )r   r$   rJ   r,   r   r   r   r-   r   s   zECAlgorithm.__init__c                 C   s6   t |}|d | jkrtd| j d| j d|S )Ncrvz	Key for "z" not supported, only "z	" allowed)r   r/   rJ   
ValueErrorr$   )r   r   r   r   r   r   r   x   s   
zECAlgorithm.prepare_keyc                 C   sD   | d}||t|  }t|\}}|j}t||t|| S r1   )r2   r   r   r*   r   curve_key_sizer   )r   r   r   r7   der_sigrssizer   r   r   r   ~   s
   
zECAlgorithm.signc           
      C   s   |j }|d d }t|d| krdS t|d | }t||d  }t||}z|d}	|	||t|   W dS  tyE   Y dS w )N      r   Fr    T)	rM   lenr   r   r2   r    r   r*   r   )
r   r   r   r   key_sizelengthrO   rP   rN   r7   r   r   r   r       s   

zECAlgorithm.verifyNrH   r   r   r   r   rI   g   s    rI   c                   @   rB   )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                 C   s4   d| | _ d}|||| _t| d| | _d S )NPSz,RSASSA-PSS using SHA-{} and MGF1 with SHA-{}r(   )r$   formatr%   r)   r*   )r   r,   tplr   r   r   r-      s   zRSAPSSAlgorithm.__init__c                 C   r.   r   rF   r   r   r   r   r      r0   zRSAPSSAlgorithm.prepare_keyc                 C   s4   | d}||tjt|  | jjd|  S )Nr   mgfsalt_length)r2   r   r   PSSMGF1r*   digest_sizer6   r   r   r   r      s   
zRSAPSSAlgorithm.signc              	   C   sR   | d}z|||tjt|  | jjd|   W dS  ty(   Y dS w )Nr    r[   TF)r2   r    r   r^   r_   r*   r`   r   rG   r   r   r   r       s   
	zRSAPSSAlgorithm.verifyNrH   r   r   r   r   rW      s    rW      i  i   ES256zP-256ES384zP-384ES512zP-521ES256K	secp256k1)r:   r3   r;   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&   rC   rI   rW   JWS_ALGORITHMSr   r   r   r   <module>   sB    	!11



