
    k7i@                     z    S SK Jr  S SK Jr  S SK Jr  S SK Jr  S SK Jr  S SKJr  SSKJ	r	  SS	K
Jr   " S
 S\5      rg)    )BestAvailableEncryption)Encoding)NoEncryption)PrivateFormat)PublicFormat)to_bytes   )load_pem_key)Keyc                     ^  \ rS rSrSr/ r/ r\r\r	Sr
SU 4S jjr\S 5       rS rS rS rS	 rS
 rS rS rS rS rSS jrSS jrSS jrSS jrSS jr\SS j5       r\SS j5       r\S 5       r\SS j5       r Sr!U =r"$ )AsymmetricKey   z*This is the base class for a JSON Web Key.    c                 <   > [         TU ]  U5        Xl        X l        g N)super__init__private_key
public_key)selfr   r   options	__class__s       ]/home/james-whalen/.local/lib/python3.13/site-packages/authlib/jose/rfc7517/asymmetric_key.pyr   AsymmetricKey.__init__   s    !&$r   c                 J    U R                   (       a  gSU R                  ;   a  gg)NFdT)r   tokensr   s    r   public_onlyAsymmetricKey.public_only   s     $++r   c                     U R                  U5        XR                  ;   a  U R                  5       $ U R                  5       $ )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_keyAsymmetricKey.get_op_key#   s<     	)$+++&&((##%%r   c                     U R                   (       a  U R                   $ U R                  5       nU(       a  UR                  5       $ U R                   $ r   )r   r%   )r   r   s     r   r$   AsymmetricKey.get_public_key/   s=    ????"**,))++r   c                     U R                   (       a  U R                   $ U R                  (       a  U R                  5         U R                   $ r   )r   r   load_raw_keyr   s    r   r%   AsymmetricKey.get_private_key9   s6    ###;;r   c                 z    SU R                   ;   a  U R                  5       U l        g U R                  5       U l        g )Nr   )r   load_private_keyr   load_public_keyr   r   s    r   r,   AsymmetricKey.load_raw_keyA   s/    $++#446D"224DOr   c                     U R                   (       a*  U R                  R                  U R                  5       5        g U R                  R                  U R	                  5       5        g r   )r   
_dict_dataupdatedumps_private_keydumps_public_keyr   s    r   load_dict_keyAsymmetricKey.load_dict_keyG   sA    OO""4#9#9#;<OO""4#8#8#:;r   c                     [        5       er   NotImplementedErrorr   s    r   r5   AsymmetricKey.dumps_private_keyM       !##r   c                     [        5       er   r:   r   s    r   r6   AsymmetricKey.dumps_public_keyP   r=   r   c                     [        5       er   r:   r   s    r   r/   AsymmetricKey.load_private_keyS   r=   r   c                     [        5       er   r:   r   s    r   r0   AsymmetricKey.load_public_keyV   r=   r   c                 j   U R                   nU(       a  SU;  a  [        S5      eUR                  S5      nSU;   aG  U(       d@  U Vs0 s H  oUU R                  ;   d  M  XSU   _M     nnU R                  US'   U(       a  XCS'   U(       d  U R                  5       US'   UR                  U5        U$ s  snf )z1Represent this key as a dict of the JSON Web Key.r   This is a public keykidkty)r   
ValueErrorgetPUBLIC_KEY_FIELDSrG   
thumbprintr4   )r   
is_privateparamsr   rF   ks         r   as_dictAsymmetricKey.as_dictY   s    #V+344jj&=,2RFq4;Q;Q6QlalFFR HHF5M #u OO-F5Mf Ss   B0	B0c                 P    U(       a  U R                  5       $ U R                  5       $ )zRepresent this key as raw key.)r%   r$   )r   rL   s     r   as_keyAsymmetricKey.as_keym   s#    ''))""$$r   c                    Ub  US:X  a  [         R                  nO&US:X  a  [         R                  nO[        SU< 35      eU R	                  U5      nU(       aS  U(       d  [        S5      eUc  [        5       nO[        [        U5      5      nUR                  U[        R                  US9$ UR                  U[        R                  S9$ )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
PEMDERzInvalid encoding: rE   )encodingformatencryption_algorithm)rW   rX   )r   rU   rV   rH   rR   r   r   r   private_bytesr   PKCS8public_bytesr   SubjectPublicKeyInfo)r   rW   rL   passwordraw_keyrY   s         r   as_bytesAsymmetricKey.as_bytess   s     x50||H||H1(>??++j) !788'3~$'>x?Q'R$((!$**%9 )  
 ##44 $ 
 	
r   c                      U R                  XS9$ )N)rL   r^   r`   r   rL   r^   s      r   as_pemAsymmetricKey.as_pem   s    }}
}FFr   c                 "    U R                  SXS9$ )NrV   )rW   rL   r^   rc   rd   s      r   as_derAsymmetricKey.as_der   s    }}e
}VVr   c                 @    U R                  U5        U " US9nXl        U$ )N)r   )check_required_fieldsr3   )clsrawr   keys       r   import_dict_keyAsymmetricKey.import_dict_key   s$    !!#&'"
r   c                 0   [        X5      (       a   Ub  UR                  R                  U5        U$ [        XR                  5      (       a  U " XS9nU$ [        XR                  5      (       a  U " XS9nU$ [        U[
        5      (       a  U R                  X5      nU$ Ub  UR                  SS 5      nOS n[        XR                  US9n[        XPR                  5      (       a  U " XRS9nU$ [        XPR                  5      (       a  U " XRS9nU$ [        S5      e)N)r   r   )r   r   r^   )r^   zInvalid data for importing key)
isinstancer   r4   PUBLIC_KEY_CLSPRIVATE_KEY_CLSdictro   popr
   SSH_PUBLIC_PREFIXrH   )rl   rm   r   rn   r^   r_   s         r   
import_keyAsymmetricKey.import_key   s   c"""7+Jc--..6C" 
! 0011#7C 
 T""%%c3C 
 "";;z48"3(=(=QG'#5#566W>
 
	 G%8%899g? 
 !!ABBr   c                 d    [        XR                  5      =(       d    [        XR                  5      $ r   )rr   rs   rt   )rl   rn   s     r   validate_raw_keyAsymmetricKey.validate_raw_key   s*    #112 
j$$7
 	
r   c                     [        5       er   r:   )rl   crv_or_sizer   rL   s       r   generate_keyAsymmetricKey.generate_key   s    !##r   )r   r   )NNN)F)NFN)FNr   )NF)#__name__
__module____qualname____firstlineno____doc__rJ   PRIVATE_KEY_FIELDSbytesrt   rs   rw   r   propertyr   r'   r$   r%   r,   r7   r5   r6   r/   r0   rO   rR   r`   re   rh   classmethodro   rx   r{   r   __static_attributes____classcell__)r   s   @r   r   r      s    4ON%
  
& 5<$$$$(%
BGW    4 
 

 $ $r   r   N),cryptography.hazmat.primitives.serializationr   r   r   r   r   authlib.common.encodingr   _cryptography_keyr
   base_keyr   r    r   r   <module>r      s+    P A E F E , + w$C w$r   