
    ([fU                     b    d dl mZ d dlmZmZmZmZmZ ddlm	Z	 ddl
mZ  G d de          ZdS )	    )to_bytes)EncodingPrivateFormatPublicFormatBestAvailableEncryptionNoEncryption   )load_pem_key)Keyc                   
    e Zd ZdZg Zg ZeZeZdZ	d fd	Z
ed             Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd ZddZddZddZddZddZedd            Zedd            Zed             Zedd            Z xZ S )AsymmetricKeyz*This is the base class for a JSON Web Key.    Nc                 f    t                                          |           || _        || _        d S N)super__init__private_key
public_key)selfr   r   options	__class__s       W/var/www/piapp/venv/lib/python3.11/site-packages/authlib/jose/rfc7517/asymmetric_key.pyr   zAsymmetricKey.__init__   s.    !!!&$r   c                 .    | j         rdS d| j        v rdS dS )NFdT)r   tokensr   s    r   public_onlyzAsymmetricKey.public_only   s)     	5$+5tr   c                     |                      |           || j        v r|                                 S |                                 S )zGet the raw key for the given key_op. This method will also
        check if the given key_op is supported by this key.

        :param operation: key operation value, such as "sign", "encrypt".
        :return: raw key
        )check_key_opPUBLIC_KEY_OPSget_public_keyget_private_key)r   	operations     r   
get_op_keyzAsymmetricKey.get_op_key   sJ     	)$$$+++&&(((##%%%r   c                     | j         r| j         S |                                 }|r|                                 S | j         S r   )r   r"   )r   r   s     r   r!   zAsymmetricKey.get_public_key+   sG    ? 	#?"**,, 	,))+++r   c                 b    | j         r| j         S | j        r|                                  | j         S r   )r   r   load_raw_keyr   s    r   r"   zAsymmetricKey.get_private_key5   s;     	$##; 	 r   c                     d| j         v r|                                 | _        d S |                                 | _        d S )Nr   )r   load_private_keyr   load_public_keyr   r   s    r   r'   zAsymmetricKey.load_raw_key=   s@    $+#4466D"2244DOOOr   c                     | j         r.| j                            |                                            d S | j                            |                                            d S r   )r   
_dict_dataupdatedumps_private_keydumps_public_keyr   s    r   load_dict_keyzAsymmetricKey.load_dict_keyC   s]     	<O""4#9#9#;#;<<<<<O""4#8#8#:#:;;;;;r   c                     t                      r   NotImplementedErrorr   s    r   r.   zAsymmetricKey.dumps_private_keyI       !###r   c                     t                      r   r2   r   s    r   r/   zAsymmetricKey.dumps_public_keyL   r4   r   c                     t                      r   r2   r   s    r   r)   zAsymmetricKey.load_private_keyO   r4   r   c                     t                      r   r2   r   s    r   r*   zAsymmetricKey.load_public_keyR   r4   r   Fc                      j         |rdvrt          d                              d          }dv r"|s  fdD              j        d<   |r|d<   |s                                 d<                       |           S )z1Represent this key as a dict of the JSON Web Key.r   This is a public keykidc                 4    i | ]}|j         v ||         S  )PUBLIC_KEY_FIELDS).0kr   r   s     r   
<dictcomp>z)AsymmetricKey.as_dict.<locals>.<dictcomp>^   s,    RRRqa4;Q6Q6Qa6Q6Q6Qr   kty)r   
ValueErrorgetrA   
thumbprintr-   )r   
is_privateparamsr:   r   s   `   @r   as_dictzAsymmetricKey.as_dictU   s     	5#V++3444jj&===RRRRRFRRRF HF5M $ #u 	. OO--F5Mfr   c                 V    |r|                                  S |                                 S )zRepresent this key as raw key.)r"   r!   )r   rE   s     r   as_keyzAsymmetricKey.as_keyi   s.     	*'')))""$$$r   c                    ||dk    rt           j        }n%|dk    rt           j        }nt          d|          |                     |          }|r`|st          d          |t                      }nt          t          |                    }|                    |t          j
        |          S |                    |t          j                  S )zExport key into PEM/DER format bytes.

        :param encoding: "PEM" or "DER"
        :param is_private: export private key or public key
        :param password: encrypt private key with password
        :return: bytes
        NPEMDERzInvalid encoding: r9   )encodingformatencryption_algorithm)rM   rN   )r   rK   rL   rB   rI   r   r   r   private_bytesr   PKCS8public_bytesr   SubjectPublicKeyInfo)r   rM   rE   passwordraw_keyrO   s         r   as_byteszAsymmetricKey.as_byteso   s     x500|HH|HH>(>>???++j)) 	 9 !7888'3~~$$'>x?Q?Q'R'R$((!$*%9 )   
 ##4 $ 
 
 	
r   c                 0    |                      ||          S )N)rE   rT   rV   r   rE   rT   s      r   as_pemzAsymmetricKey.as_pem   s    }}
X}FFFr   c                 2    |                      d||          S )NrL   )rM   rE   rT   rX   rY   s      r   as_derzAsymmetricKey.as_der   s    }}e
X}VVVr   c                 V    |                      |            | |          }||_        |S )N)r   )check_required_fieldsr,   )clsrawr   keys       r   import_dict_keyzAsymmetricKey.import_dict_key   s4    !!#&&&c'"""
r   c                 T   t          ||           r||j                            |           |S t          || j                  r | ||          }nt          || j                  r | ||          }nt          |t
                    r|                     ||          }n||                    dd           }nd }t          || j	        |          }t          || j                  r | ||          }n2t          || j                  r | ||          }nt          d          |S )N)r   r   )r   r   rT   )rT   zInvalid data for importing key)
isinstancer   r-   PUBLIC_KEY_CLSPRIVATE_KEY_CLSdictrb   popr
   SSH_PUBLIC_PREFIXrB   )r_   r`   r   ra   rT   rU   s         r   
import_keyzAsymmetricKey.import_key   sZ   c3 	"""7+++Jc3-.. 	C#g666CCS011 	C##w777CCT"" 	C%%c733CC"";;z488"3(=QQQG'3#566 CcWg>>>GS%899 Ccgw??? !ABBB
r   c                 V    t          || j                  pt          || j                  S r   )rd   re   rf   )r_   ra   s     r   validate_raw_keyzAsymmetricKey.validate_raw_key   s'    #s122ZjcFY6Z6ZZr   c                     t                      r   r2   )r_   crv_or_sizer   rE   s       r   generate_keyzAsymmetricKey.generate_key   s    !###r   )NNN)F)NFN)FNr   )NF)!__name__
__module____qualname____doc__r=   PRIVATE_KEY_FIELDSbytesrf   re   ri   r   propertyr   r$   r!   r"   r'   r0   r.   r/   r)   r*   rG   rI   rV   rZ   r\   classmethodrb   rj   rl   ro   __classcell__)r   s   @r   r   r   
   s       44ON% % % % % %
   X
& 
& 
&       5 5 5< < <$ $ $$ $ $$ $ $$ $ $   (% % % % 
  
  
  
DG G G GW W W W    [    [4 [ [ [[ $ $ $ [$ $ $ $ $r   r   N)authlib.common.encodingr   ,cryptography.hazmat.primitives.serializationr   r   r   r   r   _cryptography_keyr
   base_keyr   r   r<   r   r   <module>r}      s    , , , , , ,              , + + + + +      u$ u$ u$ u$ u$C u$ u$ u$ u$ u$r   