o
    ^[2h                     @   s^  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 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 )&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                   @   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   n/home/skpark/git/infrasmart_work/infrasmart/venv/lib/python3.10/site-packages/authlib/jose/rfc7518/jws_algs.pyprepare_key      zNoneAlgorithm.prepare_keyc                 C   s   dS N    r   )r   msgkeyr   r   r   sign"   r   zNoneAlgorithm.signc                 C   s   |dkS r   r   )r   r   sigr   r   r   r   verify%   s   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__5   s   zHMACAlgorithm.__init__c                 C   
   t |S r   )r   
import_keyr   r   r   r   r   :      
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    B   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-   T   s   zRSAAlgorithm.__init__c                 C   r.   r   r   r/   r   r   r   r   r   Z   r0   zRSAAlgorithm.prepare_keyc                 C   s   | d}||| j|  S r1   )r2   r   r   r*   r6   r   r   r   r   ]   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    a   s   
zRSAAlgorithm.verifyNr!   r"   r#   r:   r   r=   r?   rA   r-   r   r   r    r   r   r   r   rC   H   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-   v   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   |   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   j   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:   r;   r3   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&   rC   rI   rW   JWS_ALGORITHMSr   r   r   r   <module>   sF    "41



