blob: 239f681528e15767c6c32f7a3a2752b826f55ad7 [file] [log] [blame]
// Copyright 2014 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CRYPTOHOME_BOOT_ATTRIBUTES_H_
#define CRYPTOHOME_BOOT_ATTRIBUTES_H_
#include <map>
#include <string>
#include <base/files/file_path.h>
#include <base/macros.h>
namespace cryptohome {
class BootLockbox;
class Platform;
// BootAttributes is a key-value storage that is built on top of BootLockbox.
// Data stored in BootAttributes can only be modified until a user session
// starts after boot. The data is signed and is tamper-evident. See BootLockbox
// for more detail.
class BootAttributes {
public:
static const int kAttributeFileVersion;
static const base::FilePath::CharType kAttributeFile[];
static const base::FilePath::CharType kSignatureFile[];
// Does not take ownership of pointers.
BootAttributes(BootLockbox* boot_lockbox, Platform* platform);
virtual ~BootAttributes();
// Loads the attributes from the file and verifies the signature. Returns
// true upon success. Returns false if the files do not exist, cannot be
// read, cannot be parsed, or the signature cannot be verified.
virtual bool Load();
// Gets the value of the specified attribute. Returns true upon success.
// Returns false if the attribute does not exist.
virtual bool Get(const std::string& name, std::string* value) const;
// Sets the value of the specified attribute. The value won't be available
// until FlushAndSign() is called. If |name| already exists, it will override
// the value.
virtual void Set(const std::string& name, const std::string& value);
// Applies all the pending value settings. The content is written to the file
// and the signature is updated. Returns true upon success. Returns false if
// the files cannot be written, or the content cannot be signed due to an
// underlying error.
virtual bool FlushAndSign();
private:
typedef std::map<std::string, std::string> AttributeMap;
BootLockbox* boot_lockbox_;
Platform* platform_;
AttributeMap attributes_;
AttributeMap write_buffer_;
DISALLOW_COPY_AND_ASSIGN(BootAttributes);
};
} // namespace cryptohome
#endif // CRYPTOHOME_BOOT_ATTRIBUTES_H_