
    e                     D   d dl Z d dlZd dlmZmZmZmZ d dlmZ eZ G d d      Z	 ej                   ed            Z ej                   ed            Z ej                   ed            Zej                  Zee_        eeeeeefe_        ej"                  Zee_        eeege_        ej$                  Zee_        eeej                  ge_        ej&                  Zee_        eefe_        ej(                  Zee_        eefe_        ej*                  Zee_        efe_        ej,                  Zee_        efe_        ej.                  Zee_        efe_        d	 Zd
 Zd Zd Zd Z G d de      Z G d de      Z G d de      Z  G d de      Z!ddZ"d Z#d Z$y)    N)c_void_pc_uint32c_int32byref)find_libraryc                        e Zd ZdZdZdZdZdZy)errori,ii3i*i$N)__name__
__module____qualname__item_not_foundkeychain_deniedsec_auth_failedplist_missingsec_interaction_not_allowed     </usr/lib/python3/dist-packages/keyring/backends/macOS/api.pyr	   r	      s    NOOM"(r   r	   SecurityCoreServices
Foundationc                 6    t        j                  t        |       S N)r   in_dll_secss    r   k_r   C   s    ??4##r   c           	      t    t        d dt        j                  t        | rd                  S d                  S )N	      r   )CFNumberCreatectypesr   r   )bs    r   create_cfboolr%   G   s/    $V\\'q!2H%IJJa2H%IJJr   c                 :    t        d | j                  d      d      S )Nutf8i  )CFStringCreateWithCStringencoder   s    r   create_cfstrr*   K   s    $ahhv
 r   c                     t        d t        t        |       z  | j                         D cg c]  }t	        |       c} t        t        |       z  | j                         D cg c]  }t        |t              rt        |      n|! c} t        |       t        j                  t        j                        S c c}w c c}w r   )CFDictionaryCreater   lenkeysr   values
isinstancestrr*   _foundkCFTypeDictionaryKeyCallBackskCFTypeDictionaryValueCallBacks)kwargskvs      r   create_queryr8   Q   s    	CK	&++-"@Q2a5"@A	CK	BH--/#
=>z!S1LOq8#
 	 	F,,..	 	"@#
s   B6"$B;c                 p    t        j                  t        |       t        |             j	                  d      S )Nzutf-8)r#   	string_atCFDataGetBytePtrCFDataGetLengthdecode)datas    r   cfstr_to_strr?   ^   s0    ,T2OD4IJQQ r   c                       e Zd Zed        Zy)Errorc                     |dk(  ry |t         j                  k(  rt        |d      |t         j                  k(  rt	        |d      |t         j
                  k(  s|t         j                  k(  rt        |d       | |d      )Nr   zItem not foundzKeychain Access DeniedzHSecurity Auth Failure: make sure executable is signed with codesign utilzUnknown Error)r	   r   NotFoundr   KeychainDeniedr   r   SecAuthFailure)clsstatuss     r   raise_for_statuszError.raise_for_statuse   s    Q;U)))6#344U*** )ABBU***f8K8K.K : 
 &/**r   N)r
   r   r   classmethodrH   r   r   r   rA   rA   d   s    + +r   rA   c                       e Zd Zy)rC   Nr
   r   r   r   r   r   rC   rC   v       r   rC   c                       e Zd Zy)rD   NrK   r   r   r   rD   rD   z   rL   r   rD   c                       e Zd Zy)rE   NrK   r   r   r   rE   rE   ~   rL   r   rE   c           	         t        t        d      t        d      ||t        d            }t               }t	        |t        |            }|t        j                  k(  r|ry t        j                  |       t        |      S )NkSecClassGenericPasswordkSecMatchLimitOneT)	kSecClasskSecMatchLimitkSecAttrServicekSecAttrAccountkSecReturnData)r8   r   r%   r   SecItemCopyMatchingr   r	   r   rA   rH   r?   )kc_nameserviceusernamenot_found_okqr>   rG   s          r   find_generic_passwordr]      sq    /0-. $T*	A :D E$K0F%%%,	6"r   c                     t        j                  t              5  t        | ||       d d d        t	        t        d      |||      }t        |d       }t        j                  |       y # 1 sw Y   CxY w)NrP   )rR   rT   rU   kSecValueData)	
contextlibsuppressrC   delete_generic_passwordr8   r   
SecItemAddrA   rH   )namerY   rZ   passwordr\   rG   s         r   set_generic_passwordrf      sk    			X	& 9gx89 	/0 		A 4 F	6"9 9s   A**A3c                 r    t        t        d      ||      }t        |      }t        j	                  |       y )NrP   )rR   rT   rU   )r8   r   SecItemDeleterA   rH   )rd   rY   rZ   r\   rG   s        r   rb   rb      s5    /0 	A 1F	6"r   )F)%r`   r#   r   r   r   r   ctypes.utilr   	OS_statusr	   CDLLr   _corer2   r,   restypeargtypesr(   r"   rc   rW   rh   r;   r<   r   r%   r*   r8   r?   	ExceptionrA   rC   rD   rE   r]   rf   rb   r   r   r   <module>rp      s      % 	) ) v{{<
+,L01	\,/	0.. %     #<< $,  !&.(%C  "&&! #Xv? __

 *
 .. '   ((3  ""! " ** #  %K  ((! $; $K
+I +$	u 		U 		U 	(##r   