o a@sddlZddlmZmZmZmZddlmZeZGdddZe edZ e edZ e edZ e j Z ee _eeeeeefe _e jZee_eeege_e jZee_eeejge_e jZee_eefe_e jZee_eefe_e jZee_efe_e jZee_efe_e jZee_efe_d d Zd d Zd dZddZddZGdddeZGdddeZGdddeZGdddeZ d"ddZ!ddZ"d d!Z#dS)#N)c_void_pc_uint32c_int32byref) find_libraryc@s eZdZdZdZdZdZdZdS)errori,ii3i*i$N)__name__ __module__ __qualname__item_not_foundkeychain_deniedsec_auth_failed plist_missingsec_interaction_not_allowedrrSsz create_query..cSs"g|] }t|tr t|n|qSr) isinstancestrr#)r$vrrrr&Us")CFDictionaryCreaterlenkeysvalues_foundkCFTypeDictionaryKeyCallBackskCFTypeDictionaryValueCallBacks)kwargsrrr create_queryPs r2cCstt|t|dS)Nzutf-8)r string_atCFDataGetBytePtrCFDataGetLengthdecode)datarrr cfstr_to_str]sr8c@seZdZeddZdS)ErrorcCs\|dkrdS|tjkrt|d|tjkrt|d|tjks$|tjkr)t|d||d)NrzItem not foundzKeychain Access DeniedzDSecurity Auth Failure: make sure python is signed with codesign utilz Unknown Error)rr NotFoundr KeychainDeniedr rSecAuthFailure)clsstatusrrrraise_for_statusds     zError.raise_for_statusN)rr r classmethodr?rrrrr9csr9c@ eZdZdS)r:Nrr r rrrrr:ur:c@rA)r;NrBrrrrr;yrCr;c@rA)r<NrBrrrrr<}rCr<FcCsVttdtd||tdd}t}t|t|}|tjkr"|r"dSt |t |S)NkSecClassGenericPasswordkSecMatchLimitOneT) kSecClasskSecMatchLimitkSecAttrServicekSecAttrAccountkSecReturnData) r2rrrSecItemCopyMatchingrrr r9r?r8)kc_nameserviceusername not_found_okqr7r>rrrfind_generic_passwords rQcCsHt|||ddrt|||ttd|||d}t|d}t|dS)NT)rOrD)rFrHrI kSecValueData)rQdelete_generic_passwordr2r SecItemAddr9r?)namerMrNpasswordrPr>rrrset_generic_passwords  rWcCs(ttd||d}t|}t|dS)NrD)rFrHrI)r2r SecItemDeleter9r?)rUrMrNrPr>rrrrSsrS)F)$rrrrr ctypes.utilr OS_statusrCDLLr_corer.r*restypeargtypesr!rrTrKrXr4r5rrr#r2r8 Exceptionr9r:r;r<rQrWrSrrrrsd