o
    cQ                     @   s  d Z ddlZddlZddlmZ ddlmZmZmZ ddl	Z
ddlmZ ddlmZmZ ddlmZmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZ eeZG dd dej Z!G dd de!eZ"G dd de"Z#G dd dZ$G dd de$e"Z%G dd de$e"Z&G dd de"Z'e"(e#dej)Z*e"(e#dej+Z,e"(e#dej-Z.e"(e%dej)Z/e"(e%dej+Z0e"(e%dej-Z1e"(e&dej)Z2e"(e&d ej+Z3e"(e&d!ej-Z4e"(e'd"ej)Z5e"(e'd#ej+Z6e"(e'd$ej-Z7dS )%zZJSON Web Algorithms.

https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40

    N)Hashable)AnyCallableDict)default_backend)hasheshmac)ecpaddingrsa)decode_dss_signatureencode_dss_signature)HashAlgorithm)errors
interfacesjwkc                   @   s   e Zd ZdZdS )JWAzJSON Web Algorithm.N)__name__
__module____qualname____doc__ r   r   7/opt/certbot/lib/python3.10/site-packages/josepy/jwa.pyr      s    r   c                	   @   s   e Zd ZU dZi Zeed f ed< eed< deddfddZ	d	ede
fd
dZdefddZedddZdefddZededd fddZejdededefddZejdededede
fddZdefddZdS ) JWASignaturez-Base class for JSON Web Signature Algorithms.
SIGNATURESktynamereturnNc                 C   s
   || _ d S Nr   )selfr   r   r   r   __init__%   s   
zJWASignature.__init__otherc                 C   s   t |tstS | j|jkS r   )
isinstancer   NotImplementedr   )r    r"   r   r   r   __eq__(   s   
zJWASignature.__eq__c                 C   s   t | j| jfS r   )hash	__class__r   r    r   r   r   __hash__-   s   zJWASignature.__hash__signature_clsc                 C   s   || j |j< |S )z(Register class for JSON deserialization.)r   r   )clsr*   r   r   r   register0   s   zJWASignature.registerc                 C      | j S r   r   r(   r   r   r   to_partial_json6      zJWASignature.to_partial_jsonjobjc                 C   s
   | j | S r   )r   )r+   r0   r   r   r   	from_json9   s   
zJWASignature.from_jsonkeymsgc                 C      t  )Sign the ``msg`` using ``key``.NotImplementedError)r    r2   r3   r   r   r   sign=      zJWASignature.signsigc                 C   r4   )z-Verify the ``msg`` and ``sig`` using ``key``.r6   )r    r2   r3   r:   r   r   r   verifyB   r9   zJWASignature.verifyc                 C   r-   r   r   r(   r   r   r   __repr__G   r/   zJWASignature.__repr__)r*   r   r   r   )r   r   r   r   r   r   str__annotations__r   r!   boolr%   intr)   classmethodr,   r.   r1   abcabstractmethodbytesr8   r;   r<   r   r   r   r   r       s"   
 r   c                       sd   e Zd ZejZdedeg ef f fddZ	de
de
de
fdd	Zde
de
d
e
defddZ  ZS )_JWAHSr   hash_c                       t  | | | _d S r   superr!   r&   r    r   rF   r'   r   r   r!   N      z_JWAHS.__init__r2   r3   r   c                 C   s&   t j|| jt d}|| | S )Nbackend)r   HMACr&   r   updatefinalize)r    r2   r3   signerr   r   r   r8   R   s   
z_JWAHS.signr:   c              
   C   sh   t j|| jt d}|| z|| W dS  tjjy3 } zt	j
|dd W Y d }~dS d }~ww )NrM   Texc_infoF)r   rO   r&   r   rP   r;   cryptography
exceptionsInvalidSignatureloggerdebug)r    r2   r3   r:   verifiererrorr   r   r   r;   W   s   
z_JWAHS.verify)r   r   r   r   JWKOctr   r=   r   r   r!   rD   r8   r?   r;   __classcell__r   r   rK   r   rE   K   s
    "rE   c                   @   s`   e Zd ZU ejZeZee	d< eZ
ee	d< dejdedefddZdejdededefd	d
ZdS )_JWARSAr
   r&   r2   r3   r   c              
   C   sx   z
| || j| jW S  ty" } ztj|dd tdd}~w ty; } ztj|dd tt	|d}~ww )r5   TrS   %Public key cannot be used for signingN)
r8   r
   r&   AttributeErrorrX   rY   r   Error
ValueErrorr=   r    r2   r3   r[   r   r   r   r8   h   s   
z_JWARSA.signr:   c              
   C   sT   z| ||| j| j W dS  tjjy) } ztj|dd W Y d}~dS d}~ww ),Verify the ``msg` and ``sig`` using ``key``.TrS   NF)r;   r
   r&   rU   rV   rW   rX   rY   )r    r2   r3   r:   r[   r   r   r   r;   s   s   z_JWARSA.verifyN)r   r   r   r   JWKRSAr   r$   r
   r   r>   r&   r   r   RSAPrivateKeyrD   r8   RSAPublicKeyr?   r;   r   r   r   r   r^   c   s   
  r^   c                       2   e Zd Zdedeg ef ddf fddZ  ZS )_JWARSr   rF   r   Nc                    s"   t  | t | _| | _d S r   )rI   r!   r
   PKCS1v15r&   rJ   rK   r   r   r!      s   
z_JWARS.__init__r   r   r   r=   r   r   r!   r]   r   r   rK   r   ri   ~       *ri   c                       rh   )_JWAPSr   rF   r   Nc                    s4   t  | tjt| tjjd| _| | _d S )N)mgfsalt_length)rI   r!   r
   PSSMGF1
MAX_LENGTHr&   rJ   rK   r   r   r!      s   
z_JWAPS.__init__rk   r   r   rK   r   rm      rl   rm   c                       s   e Zd ZejZdedeg ef f fddZ	de
jdedefdd	Zde
jdedefd
dZde
jdededefddZde
jdededefddZ  ZS )_JWAECr   rF   c                    rG   r   rH   rJ   rK   r   r   r!      rL   z_JWAEC.__init__r2   r3   r   c                 C   sB   |  ||}t|\}}tj|j}|j|dd|j|dd S )r5   big)length	byteorder)_signr   r   JWKECexpected_length_for_curvecurveto_bytes)r    r2   r3   r:   drdsru   r   r   r   r8      s   z_JWAEC.signc              
   C   sz   z| |t| jW S  ty# } ztj|dd tdd }~w t	y< } ztj|dd tt
|d }~ww )NTrS   r_   )r8   r	   ECDSAr&   r`   rX   rY   r   ra   rb   r=   rc   r   r   r   rw      s   
z_JWAEC._signr:   c                 C   s^   t j|j}t|d| krdS ttj|d| ddtj||d dd}| |||S )rd      Fr   rt   )rv   N)	r   rx   ry   rz   lenr   r@   
from_bytes_verify)r    r2   r3   r:   rlenasn1sigr   r   r   r;      s   z_JWAEC.verifyr   c              
   C   sV   z| ||t| j W dS  tjjy* } ztj|dd W Y d }~dS d }~ww )NTrS   F)	r;   r	   r~   r&   rU   rV   rW   rX   rY   )r    r2   r3   r   r[   r   r   r   r      s   z_JWAEC._verify)r   r   r   r   rx   r   r=   r   r   r!   r	   EllipticCurvePrivateKeyrD   r8   rw   EllipticCurvePublicKeyr?   r;   r   r]   r   r   rK   r   rs      s    
$rs   HS256HS384HS512RS256RS384RS512PS256PS384PS512ES256ES384ES512)8r   rB   loggingcollections.abcr   typingr   r   r   cryptography.exceptionsrU   cryptography.hazmat.backendsr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr	   r
   r   /cryptography.hazmat.primitives.asymmetric.utilsr   r   %cryptography.hazmat.primitives.hashesr   josepyr   r   r   	getLoggerr   rX   JSONDeSerializabler   r   rE   r^   ri   rm   rs   r,   SHA256r   SHA384r   SHA512r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s@    
+
0