xref: /haiku/headers/os/app/KeyStore.h (revision c8ae843f3dcba6c16eda5d2b5db1f981ee69f448)
13b3884d9SMichael Lotz /*
23b3884d9SMichael Lotz  * Copyright 2011, Haiku, Inc.
33b3884d9SMichael Lotz  * Distributed under the terms of the MIT License.
43b3884d9SMichael Lotz  */
53b3884d9SMichael Lotz #ifndef _KEY_STORE_H
63b3884d9SMichael Lotz #define _KEY_STORE_H
73b3884d9SMichael Lotz 
83b3884d9SMichael Lotz 
93b3884d9SMichael Lotz #include <Key.h>
103b3884d9SMichael Lotz 
113b3884d9SMichael Lotz 
123b3884d9SMichael Lotz class BKeyStore {
133b3884d9SMichael Lotz public:
143b3884d9SMichael Lotz 								BKeyStore();
153b3884d9SMichael Lotz 	virtual						~BKeyStore();
163b3884d9SMichael Lotz 
173b3884d9SMichael Lotz // TODO: -> GetNextPassword() - there can always be more than one key
183b3884d9SMichael Lotz // with the same identifier/secondaryIdentifier (ie. different username)
1951ab46a8SMichael Lotz 			status_t			GetKey(BKeyType type, const char* identifier,
2051ab46a8SMichael Lotz 									BKey& key);
2151ab46a8SMichael Lotz 			status_t			GetKey(BKeyType type, const char* identifier,
223b3884d9SMichael Lotz 									const char* secondaryIdentifier, BKey& key);
2351ab46a8SMichael Lotz 			status_t			GetKey(BKeyType type, const char* identifier,
243b3884d9SMichael Lotz 									const char* secondaryIdentifier,
253b3884d9SMichael Lotz 									bool secondaryIdentifierOptional,
263b3884d9SMichael Lotz 									BKey& key);
273b3884d9SMichael Lotz 
28dc1acef8SMichael Lotz 			status_t			GetKey(const char* keyring,
2951ab46a8SMichael Lotz 									BKeyType type, const char* identifier,
3051ab46a8SMichael Lotz 									BKey& key);
31dc1acef8SMichael Lotz 			status_t			GetKey(const char* keyring,
3251ab46a8SMichael Lotz 									BKeyType type, const char* identifier,
333b3884d9SMichael Lotz 									const char* secondaryIdentifier, BKey& key);
34dc1acef8SMichael Lotz 			status_t			GetKey(const char* keyring,
3551ab46a8SMichael Lotz 									BKeyType type, const char* identifier,
363b3884d9SMichael Lotz 									const char* secondaryIdentifier,
373b3884d9SMichael Lotz 									bool secondaryIdentifierOptional,
383b3884d9SMichael Lotz 									BKey& key);
393b3884d9SMichael Lotz 
40b7398289SMichael Lotz 			status_t			AddKey(const BKey& key);
41b7398289SMichael Lotz 			status_t			AddKey(const char* keyring, const BKey& key);
42b7398289SMichael Lotz 			status_t			RemoveKey(const BKey& key);
43b7398289SMichael Lotz 			status_t			RemoveKey(const char* keyring, const BKey& key);
443b3884d9SMichael Lotz 
45dc1acef8SMichael Lotz 			status_t			GetNextKey(uint32& cookie, BKey& key);
46dc1acef8SMichael Lotz 			status_t			GetNextKey(BKeyType type, BKeyPurpose purpose,
473b3884d9SMichael Lotz 									uint32& cookie, BKey& key);
48dc1acef8SMichael Lotz 			status_t			GetNextKey(const char* keyring,
493b3884d9SMichael Lotz 									uint32& cookie, BKey& key);
50dc1acef8SMichael Lotz 			status_t			GetNextKey(const char* keyring,
51dc1acef8SMichael Lotz 									BKeyType type, BKeyPurpose purpose,
52dc1acef8SMichael Lotz 									uint32& cookie, BKey& key);
533b3884d9SMichael Lotz 
543b3884d9SMichael Lotz 			// Keyrings
553b3884d9SMichael Lotz 
56b7398289SMichael Lotz 			status_t			AddKeyring(const char* keyring,
573b3884d9SMichael Lotz 									const BKey& key);
58b7398289SMichael Lotz 			status_t			RemoveKeyring(const char* keyring);
593b3884d9SMichael Lotz 
603b3884d9SMichael Lotz 			status_t			GetNextKeyring(uint32& cookie,
613b3884d9SMichael Lotz 									BString& keyring);
623b3884d9SMichael Lotz 
633b3884d9SMichael Lotz 			// Master key
643b3884d9SMichael Lotz 
65dc1acef8SMichael Lotz 			status_t			SetMasterKey(const BKey& key);
66dc1acef8SMichael Lotz 			status_t			RemoveMasterKey();
673b3884d9SMichael Lotz 
683b3884d9SMichael Lotz 			status_t			AddKeyringToMaster(const char* keyring);
693b3884d9SMichael Lotz 			status_t			RemoveKeyringFromMaster(const char* keyring);
703b3884d9SMichael Lotz 
713b3884d9SMichael Lotz 			status_t			GetNextMasterKeyring(uint32& cookie,
723b3884d9SMichael Lotz 									BString& keyring);
733b3884d9SMichael Lotz 
74*c8ae843fSMichael Lotz 			// Locking
753b3884d9SMichael Lotz 
76*c8ae843fSMichael Lotz 			bool				IsKeyringUnlocked(const char* keyring);
77*c8ae843fSMichael Lotz 			status_t			LockKeyring(const char* keyring);
78*c8ae843fSMichael Lotz 			status_t			LockMasterKeyring();
793b3884d9SMichael Lotz 
80dc1acef8SMichael Lotz 			// Applications
81dc1acef8SMichael Lotz 
82dc1acef8SMichael Lotz 			status_t			GetNextApplication(const BKey& key,
83dc1acef8SMichael Lotz 									uint32& cookie, BString& signature) const;
8464ca113fSMichael Lotz 			status_t			GetNextApplication(const char* keyring,
8564ca113fSMichael Lotz 									const BKey& key, uint32& cookie,
8664ca113fSMichael Lotz 									BString& signature) const;
87dc1acef8SMichael Lotz 			status_t			RemoveApplication(const BKey& key,
88dc1acef8SMichael Lotz 									const char* signature);
8964ca113fSMichael Lotz 			status_t			RemoveApplication(const char* keyring,
9064ca113fSMichael Lotz 									const BKey& key, const char* signature);
91dc1acef8SMichael Lotz 
923b3884d9SMichael Lotz 			// Service functions
933b3884d9SMichael Lotz 
94dc1acef8SMichael Lotz 			status_t			GeneratePassword(BPasswordKey& password,
95dc1acef8SMichael Lotz 									size_t length, uint32 flags);
96dc1acef8SMichael Lotz 			float				PasswordStrength(const char* password);
971c399649SMichael Lotz 
981c399649SMichael Lotz private:
991c399649SMichael Lotz 			status_t			_SendKeyMessage(BMessage& message,
1001c399649SMichael Lotz 									BMessage* reply) const;
1013b3884d9SMichael Lotz };
1023b3884d9SMichael Lotz 
1033b3884d9SMichael Lotz 
1043b3884d9SMichael Lotz #endif	// _KEY_STORE_H
105