
    h	                     |   S r SSKrSSKJr  SSKJr  SSKJrJrJ	r	  SSK
JrJrJrJrJrJrJr  SSKJr  SSKJrJrJrJrJrJrJrJrJrJrJr  SS	K J!r!J"r"  SS
K#J$r$J%r%  Sr&\S-   r'\S-   r( " S S\5      r)S\S\!4S jr*S\!S\+S\,S\-\,\+\+\,4   4S jr.S\S\,S\-\/\0\,   4   4S jr1S\S\0\,   S\/4S jr2S\SS4S jr3g)zkThis module provides some utility functions, but these shouldn't
normally be used by external applications.    N)Any)default_backend)Cipher
algorithmsmodes)DBusAddressDBusErrorResponse	MatchRuleMessageMessageType
Propertiesnew_method_call)DBusConnection)ALGORITHM_DHALGORITHM_PLAINDBUS_EXEC_FAILEDDBUS_NO_REPLYDBUS_NO_SUCH_OBJECTDBUS_NOT_SUPPORTEDDBUS_SERVICE_UNKNOWNDBUS_UNKNOWN_METHODDBUS_UNKNOWN_OBJECTSS_PATH	SS_PREFIX)Sessionint_to_bytes)ItemNotFoundException"SecretServiceNotAvailableExceptionzorg.freedesktop.secretsServicePromptc                       \ rS rSrSrS\S\S\SS4S jrS	\S\	4S
 jr
S\S\S\	S\	4S jrS\S\	4S jrS\S\S\	SS4S jrSrg)DBusAddressWrapper1   zA wrapper class around :class:`jeepney.wrappers.DBusAddress`
that adds some additional methods for calling and working with
properties, and converts error responses to SecretStorage
exceptions.

.. versionadded:: 3.0
path	interface
connectionreturnNc                 H    [         R                  " X[        U5        X0l        g N)r   __init__BUS_NAME_connection)selfr$   r%   r&   s       2lib/python3.13/site-packages/secretstorage/util.pyr*   DBusAddressWrapper.__init__9   s    T9=%    msgc                     U R                   R                  U5      nUR                  R                  [        R
                  :X  a  [        U5      eUR                  $ ! [         a  nUR                  [        [        [        4;   a  [        S5      UeUR                  [        [        [        4;   a2  UR                   n[#        U[$        5      (       a  US   n['        U5      Uee S nAff = f)NzItem does not exist!r   )r,   send_and_get_replyheadermessage_typer   errorr	   bodynamer   r   r   r   r   r   r   data
isinstancetupler   )r-   r1   resp_msgrespr9   s        r.   r3   %DBusAddressWrapper.send_and_get_reply>   s    	 $ 0 0 C CC HH++{/@/@@'11==   	yy### 
 ,,BCM35E,. .yydE**7D8>DH	s   AA 
C(&A=C##C(method	signaturer7   c                 <    [        XX#5      nU R                  U5      $ r)   )r   r3   )r-   r?   r@   r7   r1   s        r.   callDBusAddressWrapper.callS   s    dI<&&s++r0   r8   c                 d    [        U 5      R                  U5      nU R                  U5      u  u  p4U$ r)   )r   getr3   )r-   r8   r1   r@   values        r.   get_propertyDBusAddressWrapper.get_propertyW   s2    ""4("55c:r0   rF   c                 \    [        U 5      R                  XU5      nU R                  U5        g r)   )r   setr3   )r-   r8   r@   rF   r1   s        r.   set_propertyDBusAddressWrapper.set_property\   s'    ""4E:$r0   )r,   )__name__
__module____qualname____firstlineno____doc__strr   r*   r   r   r3   rB   rG   rK   __static_attributes__ r0   r.   r"   r"   1   s    &S &S &+&04&
g # *,3 ,3 ,s ,s ,  
% % %S %T %r0   r"   r&   r'   c           	         [        [        [        U 5      n[        5       n UR	                  SS[
        S[        UR                  5      45      u  p4Uu  pVUS:X  d   e[        R                  US5      nUR                  U5        XBl        U$ ! [         a@  nUR                  [        :w  a  e UR	                  SS[        S5      u  p4SUl         SnANMSnAff = f)z%Returns a new Secret Service session.OpenSessionsvaybig)s FN)r"   r   SERVICE_IFACEr   rB   r   r   my_public_keyint
from_bytesset_server_public_keyr	   r8   r   r   	encryptedobject_path)	r&   servicesessionoutputresultr@   rF   keyr=   s	            r.   open_sessionrh   a   s     -DGiG+ 4< 5 5679 "	D   nnUE*%%c* N  "99** 4 ""s   /B 
C6CCrd   secretcontent_typec                    [        U[        5      (       a  UR                  S5      nO [        U[        5      (       d  [	        S5      eU R
                  c   eU R                  (       d  U R
                  SX4$ U R                  c   eS[        U5      S-  -
  nU[        U4U-  5      -  n[        R                  " S5      n[        R                  " U R                  5      n[        U[        R                  " U5      [!        5       5      R#                  5       nUR%                  U5      UR'                  5       -   nU R
                  UUU4$ )zGFormats `secret` to make possible to pass it to the
Secret Service API.zutf-8zsecret must be bytesr0         )r:   rR   encodebytes	TypeErrorrb   ra   aes_keylenosurandomr   AESr   r   CBCr   	encryptorupdatefinalize)rd   ri   rj   paddingaes_ivaesrw   encrypted_secrets           r.   format_secretr~   {   s    &#w'&&.//***##S&????&&&c&kC'(G
eWJ())FZZF
..
)CsEIIf-/@AKKMI ''/)2D2D2FF	 r0   prompt_pathc                 0   [        U[        U 5      n[        U[        S[        R                  S9nU R                  U5       nUR                  SSS5        U R                  U5      R                  u  pVSSS5        Wc   eWc   eXV4$ ! , (       d  f       N= f)zExecutes the prompt in a blocking mode.

:returns: a tuple; the first element is a boolean value showing
          whether the operation was dismissed, the second element
          is a list of unlocked object paths
	Completed)r$   r%   membertyper    rZ   r[   N)	r"   PROMPT_IFACEr
   r   signalfilterrB   recv_until_filteredr7   )r&   r   promptrulesignals	dismissedrf   s          r.   exec_promptr      s      \:FF	D 
		4	 GHc2&&::7CHH	 
!     
!	 s   1B
Bpathsc                     [        [        [        U 5      nUR                  SSU5      u  p4[	        U5      S:  a  [        X5      u  nu  pgUS:X  d   eU$ g)zRequests unlocking objects specified in `paths`.
Returns a boolean representing whether the operation was dismissed.

.. versionadded:: 2.1.2Unlockao   F)r"   r   r\   rB   rr   r   )r&   r   rc   unlocked_pathsr   r   r@   unlockeds           r.   unlock_objectsr      s[    
 !-DG$\\(D%@N
6{Q+6z+J(	(ID   r0   c                     [        [        [        S9n[        SSU S9nSUl        UR                  SSUR                  5       5        g)zAdds match rules for the given connection.

Currently it matches all messages from the Prompt interface, as the
mock service (unlike GNOME Keyring) does not specify the signal
destination.

.. versionadded:: 3.1
)senderr%   z/org/freedesktop/DBuszorg.freedesktop.DBus)r$   r%   r&   AddMatchrZ   N)r
   r+   r   r"   bus_namerB   	serialise)r&   r   dbuss      r.   add_match_rulesr      sC     H=D#:(>)35D +DMIIj#t~~/0r0   )4rQ   rs   typingr   cryptography.hazmat.backendsr   &cryptography.hazmat.primitives.ciphersr   r   r   jeepneyr   r	   r
   r   r   r   r   jeepney.io.blockingr   secretstorage.definesr   r   r   r   r   r   r   r   r   r   r   secretstorage.dhcryptor   r   secretstorage.exceptionsr   r   r+   r\   r   r"   rh   ro   rR   r;   r~   boollistr   r   r   rT   r0   r.   <module>r      s  . 
  8 L L   /    9
 %I%8#-% -%`^  47 E  #(-c5%.D(E6N  %*4c?%;.~ d3i D 1 14 1r0   