haiku/src/servers/keystore/Keyring.h

77 lines
2.1 KiB
C++

/*
* Copyright 2012, Michael Lotz, mmlr@mlotz.ch. All Rights Reserved.
* Distributed under the terms of the MIT License.
*/
#ifndef _KEYRING_H
#define _KEYRING_H
#include <Key.h>
#include <Message.h>
class Keyring {
public:
Keyring();
Keyring(const char* name);
~Keyring();
const char* Name() const { return fName; }
status_t ReadFromMessage(const BMessage& message);
status_t WriteToMessage(BMessage& message);
status_t Unlock(const BMessage* keyMessage);
void Lock();
bool IsUnlocked() const;
bool HasUnlockKey() const;
const BMessage& UnlockKey() const;
status_t SetUnlockKey(const BMessage& keyMessage);
status_t RemoveUnlockKey();
status_t GetNextApplication(uint32& cookie,
BString& signature, BString& path);
status_t FindApplication(const char* signature,
const char* path, BMessage& appMessage);
status_t AddApplication(const char* signature,
const BMessage& appMessage);
status_t RemoveApplication(const char* signature,
const char* path);
status_t FindKey(const BString& identifier,
const BString& secondaryIdentifier,
bool secondaryIdentifierOptional,
BMessage* _foundKeyMessage) const;
status_t FindKey(BKeyType type, BKeyPurpose purpose,
uint32 index,
BMessage& _foundKeyMessage) const;
status_t AddKey(const BString& identifier,
const BString& secondaryIdentifier,
const BMessage& keyMessage);
status_t RemoveKey(const BString& identifier,
const BMessage& keyMessage);
static int Compare(const Keyring* one,
const Keyring* two);
static int Compare(const BString* name,
const Keyring* keyring);
private:
status_t _EncryptToFlatBuffer();
status_t _DecryptFromFlatBuffer();
BString fName;
BMallocIO fFlatBuffer;
BMessage fData;
BMessage fApplications;
BMessage fUnlockKey;
bool fHasUnlockKey;
bool fUnlocked;
bool fModified;
};
#endif // _KEYRING_H