#ifndef _SECURITY_PASSWORD_H_
#define _SECURITY_PASSWORD_H_
#include <security_keychain/Item.h>
#include <security_keychain/Access.h>
namespace Security {
namespace KeychainCore {
class PasswordImpl : public SecCFObject {
public:
SECCFFUNCTIONS(PasswordImpl, SecPasswordRef, errSecInvalidPasswordRef, gTypes().PasswordImpl)
public:
PasswordImpl(SecItemClass itemClass, SecKeychainAttributeList *searchAttrList, SecKeychainAttributeList *itemAttrList);
PasswordImpl(PasswordImpl& existing);
virtual ~PasswordImpl() throw();
bool getData(UInt32 *length, const void **data);
void setData(UInt32 length,const void *data);
void save();
bool useKeychain() const { return mUseKeychain; }
bool rememberInKeychain() const { return mRememberInKeychain; }
void setRememberInKeychain(bool remember) { mRememberInKeychain = remember; }
void setAccess(Access *access);
private:
Keychain mKeychain;
Item mItem;
bool mUseKeychain;
bool mFoundInKeychain;
bool mRememberInKeychain;
Mutex mMutex;
};
class Password : public SecPointer<PasswordImpl>
{
public:
Password(SecItemClass itemClass, SecKeychainAttributeList *searchAttrList, SecKeychainAttributeList *itemAttrList);
Password(PasswordImpl *impl);
Password(PasswordImpl &impl);
};
} }
#endif // !_SECURITY_PASSWORD_H_