#ifndef _SECURITY_SECKEYCHAINPRIV_H_
#define _SECURITY_SECKEYCHAINPRIV_H_
#include <Security/Security.h>
#include <Security/SecBasePriv.h>
#include <CoreFoundation/CoreFoundation.h>
#if defined(__cplusplus)
extern "C" {
#endif
enum {kSecKeychainEnteredBatchModeEvent = 14,
kSecKeychainLeftBatchModeEvent = 15};
enum {kSecKeychainEnteredBatchModeEventMask = 1 << kSecKeychainEnteredBatchModeEvent,
kSecKeychainLeftBatchModeEventMask = 1 << kSecKeychainLeftBatchModeEvent};
OSStatus SecKeychainCreateNew(SecKeychainRef keychainRef, UInt32 passwordLength, const char* inPassword);
OSStatus SecKeychainMakeFromFullPath(const char *fullPathName, SecKeychainRef *keychainRef);
OSStatus SecKeychainIsValid(SecKeychainRef keychainRef, Boolean* isValid);
OSStatus SecKeychainChangePassword(SecKeychainRef keychainRef, UInt32 oldPasswordLength, const void *oldPassword, UInt32 newPasswordLength, const void *newPassword);
OSStatus SecKeychainOpenWithGuid(const CSSM_GUID *guid, uint32 subserviceId, uint32 subserviceType, const char* dbName, const CSSM_NET_ADDRESS *dbLocation, SecKeychainRef *keychain);
OSStatus SecKeychainSetBatchMode (SecKeychainRef kcRef, Boolean mode, Boolean rollback);
UInt16 SecKeychainListGetCount(void);
OSStatus SecKeychainListCopyKeychainAtIndex(UInt16 index, SecKeychainRef *keychainRef);
OSStatus SecKeychainListRemoveKeychain(SecKeychainRef *keychainRef);
OSStatus SecKeychainRemoveFromSearchList(SecKeychainRef keychainRef);
OSStatus SecKeychainLogin(UInt32 nameLength, const void* name, UInt32 passwordLength, const void* password);
OSStatus SecKeychainLogout();
OSStatus SecKeychainCopyLogin(SecKeychainRef *keychainRef);
OSStatus SecKeychainResetLogin(UInt32 passwordLength, const void* password, Boolean resetSearchList);
enum {
kSecKeychainNotSynchronized = 0,
kSecKeychainSynchronizedWithDotMac = 1
};
typedef UInt32 SecKeychainSyncState;
OSStatus SecKeychainCopySignature(SecKeychainRef keychainRef, CFDataRef *keychainSignature);
OSStatus SecKeychainCopyBlob(SecKeychainRef keychainRef, CFDataRef *dbBlob);
OSStatus SecKeychainRecodeKeychain(SecKeychainRef keychainRef, CFArrayRef dbBlobArray, CFDataRef extraData);
OSStatus SecKeychainCreateWithBlob(const char* fullPathName, CFDataRef dbBlob, SecKeychainRef *kcRef);
OSStatus SecKeychainAddDBToKeychainList (SecPreferencesDomain domain, const char* dbName, const CSSM_GUID *guid, uint32 subServiceType);
OSStatus SecKeychainDBIsInKeychainList (SecPreferencesDomain domain, const char* dbName, const CSSM_GUID *guid, uint32 subServiceType);
OSStatus SecKeychainRemoveDBFromKeychainList (SecPreferencesDomain domain, const char* dbName, const CSSM_GUID *guid, uint32 subServiceType);
void SecKeychainSetServerMode();
OSStatus SecKeychainCleanupHandles();
OSStatus SecKeychainSystemKeychainCheckWouldDeadlock();
#if defined(__cplusplus)
}
#endif
#endif