1/*
2 * Copyright 2011, Haiku, Inc.
3 * Distributed under the terms of the MIT License.
4 */
5#ifndef _KEY_STORE_H
6#define _KEY_STORE_H
7
8
9#include <Key.h>
10
11
12class BKeyStore {
13public:
14								BKeyStore();
15	virtual						~BKeyStore();
16
17			status_t			GetKey(BKeyType type, const char* identifier,
18									BKey& key);
19			status_t			GetKey(BKeyType type, const char* identifier,
20									const char* secondaryIdentifier, BKey& key);
21			status_t			GetKey(BKeyType type, const char* identifier,
22									const char* secondaryIdentifier,
23									bool secondaryIdentifierOptional,
24									BKey& key);
25
26			status_t			GetKey(const char* keyring,
27									BKeyType type, const char* identifier,
28									BKey& key);
29			status_t			GetKey(const char* keyring,
30									BKeyType type, const char* identifier,
31									const char* secondaryIdentifier, BKey& key);
32			status_t			GetKey(const char* keyring,
33									BKeyType type, const char* identifier,
34									const char* secondaryIdentifier,
35									bool secondaryIdentifierOptional,
36									BKey& key);
37
38			status_t			AddKey(const BKey& key);
39			status_t			AddKey(const char* keyring, const BKey& key);
40			status_t			RemoveKey(const BKey& key);
41			status_t			RemoveKey(const char* keyring, const BKey& key);
42
43			status_t			GetNextKey(uint32& cookie, BKey& key);
44			status_t			GetNextKey(BKeyType type, BKeyPurpose purpose,
45									uint32& cookie, BKey& key);
46			status_t			GetNextKey(const char* keyring,
47									uint32& cookie, BKey& key);
48			status_t			GetNextKey(const char* keyring,
49									BKeyType type, BKeyPurpose purpose,
50									uint32& cookie, BKey& key);
51
52			// Keyrings
53
54			status_t			AddKeyring(const char* keyring);
55			status_t			RemoveKeyring(const char* keyring);
56
57			status_t			GetNextKeyring(uint32& cookie,
58									BString& keyring);
59
60			status_t			SetUnlockKey(const char* keyring,
61									const BKey& key);
62			status_t			RemoveUnlockKey(const char* keyring);
63
64			// Master keyring
65
66			status_t			SetMasterUnlockKey(const BKey& key);
67			status_t			RemoveMasterUnlockKey();
68
69			status_t			AddKeyringToMaster(const char* keyring);
70			status_t			RemoveKeyringFromMaster(const char* keyring);
71
72			status_t			GetNextMasterKeyring(uint32& cookie,
73									BString& keyring);
74
75			// Locking
76
77			bool				IsKeyringUnlocked(const char* keyring);
78			status_t			LockKeyring(const char* keyring);
79			status_t			LockMasterKeyring();
80
81			// Applications
82
83			status_t			GetNextApplication(uint32& cookie,
84									BString& signature) const;
85			status_t			GetNextApplication(const char* keyring,
86									uint32& cookie, BString& signature) const;
87			status_t			RemoveApplication(const char* signature);
88			status_t			RemoveApplication(const char* keyring,
89									const char* signature);
90
91			// Service functions
92
93			status_t			GeneratePassword(BPasswordKey& password,
94									size_t length, uint32 flags);
95			float				PasswordStrength(const char* password);
96
97private:
98			status_t			_SendKeyMessage(BMessage& message,
99									BMessage* reply) const;
100};
101
102
103#endif	// _KEY_STORE_H
104