
    ~h                         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 ddlmZ  G d de      Zd Zy)    )default_backend)rsa)RSAPrivateKeyWithSerialization)RSAPrivateNumbers)RSAPublicKey)RSAPublicNumbers)rsa_crt_dmp1)rsa_crt_dmq1)rsa_crt_iqmp)rsa_recover_prime_factors)base64_to_int)int_to_base64   )AsymmetricKeyc                   v    e Zd ZdZdZeZeZddgZ	g dZ
ddgZdZd Zd Zd	 Zd
 Zeddd       Zedd       Zy)RSAKeyz"Key class of the ``RSA`` key type.RSAen)ddpdqr   r   pqqis   ssh-rsac           
         | j                   j                         }t        |j                  j                        t        |j                  j
                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        t        |j                        dS )N)r   r   r   r   r   r   r   r   )private_keyprivate_numbersr   public_numbersr   r   r   r   r   dmp1dmq1iqmpselfnumberss     X/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/authlib/jose/rfc7518/rsa_key.pydumps_private_keyzRSAKey.dumps_private_key   s    ""224w55778w55778wyy)wyy)wyy)---	
 		
    c                     | j                   j                         }t        |j                        t        |j                        dS )N)r   r   )
public_keyr   r   r   r   r#   s     r&   dumps_public_keyzRSAKey.dumps_public_key+   s1    //002"799-M'))4LMMr(   c                 B   | j                   }d|v rt        d      t        t        |d         t        |d               }t	        |      r[t        t        |d         t        |d         t        |d         t        |d         t        |d	         t        |d
         |      }nbt        |d         }t        |j                  ||j                        \  }}t        |||t        ||      t        ||      t        ||      |      }|j                  t                     S )Nothz"oth" is not supported yetr   r   r   r   r   r   r   r   )r   r   r   r    r!   r"   r   )
_dict_data
ValueErrorr   r   has_all_prime_factorsr   r   r   r   r	   r
   r   r   r   )r$   objr   r%   r   r   r   s          r&   load_private_keyzRSAKey.load_private_key/   s   ooC<9::)#c(#]3s8%<
 !%'C)C)C)"3t9-"3t9-"3t9--G c#h'A,^-=-=q.BRBRSDAq'!!Q'!!Q'!!Q'-G ""?#455r(   c                     t        t        | j                  d         t        | j                  d               }|j                  t	                     S )Nr   r   )r   r   r.   r*   r   r#   s     r&   load_public_keyzRSAKey.load_public_keyS   sC    "$//#./ts?S1T
 !!/"344r(   Nc                     |dk  rt        d      |dz  dk7  rt        d      t        j                  d|t                     }|s|j	                         }| j                  ||      S )	Ni   z"key_size must not be less than 512   r   zInvalid key_size for RSAKeyi  )public_exponentkey_sizebackendoptions)r/   r   generate_private_keyr   r*   
import_key)clsr8   r;   
is_privateraw_keys        r&   generate_keyzRSAKey.generate_keyY   so    c>ABBa<1:;;**!#%

 ((*G~~gw~77r(   c                     | j                  |        | |      }||_        d|v r+t        |      s |j                          |j	                          |S )Nr:   r   )check_required_fieldsr.   r0   load_raw_keyload_dict_key)r>   rawr;   keys       r&   import_dict_keyzRSAKey.import_dict_keyh   sM    !!#&'"#:3C8
r(   )i   NF)returnr   )N)__name__
__module____qualname____doc__ktyr   PUBLIC_KEY_CLSr   PRIVATE_KEY_CLSPUBLIC_KEY_FIELDSPRIVATE_KEY_FIELDSREQUIRED_JSON_FIELDSSSH_PUBLIC_PREFIXr'   r+   r2   r4   classmethodrA   rH    r(   r&   r   r      sr    ,
C!N4Oc
D:"
N"6H5 8 8  r(   r   c                 |    g d}|D cg c]  }|| v  }}t        |      ryt        |      rt        d      yc c}w )N)r   r   r   r   r   Tz@RSA key must include all parameters if any are present besides dF)allanyr/   )r1   propspropprops_founds       r&   r0   r0   t   sK    (E+01443;1K1
;
;N
 	
  2s   9N)cryptography.hazmat.backendsr   )cryptography.hazmat.primitives.asymmetricr   -cryptography.hazmat.primitives.asymmetric.rsar   r   r   r   r	   r
   r   r   authlib.common.encodingr   r   rfc7517r   r   r0   rV   r(   r&   <module>rb      s@    8 9 X K F J F F F S 1 1 #_] _Dr(   