| // Copyright (c) 2012 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_LOCKBOX_CACHE_H_ |
| #define CRYPTOHOME_LOCKBOX_CACHE_H_ |
| |
| #include <stdio.h> |
| #include <unistd.h> |
| |
| #include <string> |
| |
| #include <base/files/file_path.h> |
| #include <base/logging.h> |
| |
| #include "cryptohome/platform.h" |
| #include "cryptohome/tpm.h" |
| |
| namespace cryptohome { |
| |
| // Implements a simple writer wrapper for arbitrary Lockboxes |
| class LockboxCache { |
| public: |
| LockboxCache() : loaded_(false), tpm_(NULL), platform_(NULL) {} |
| virtual ~LockboxCache() {} |
| // Prepares the cache for use. |
| // Does not take ownership of any pointers. |
| virtual bool Initialize(Platform* platform, Tpm* tpm); |
| // Resets the cache for another Load->Write cycle. |
| virtual void Reset(); |
| // Loads the supplied |lockbox_path| and validates it against the TPM. |
| // If the data loads and verifies, returns true; |
| virtual bool LoadAndVerify(uint32_t index, |
| const base::FilePath& lockbox_path); |
| // Iff LoadAndVerify() returned true, will write out the loaded lockbox |
| // contents to |cache_path|. |
| virtual bool Write(const base::FilePath& cache_path) const; |
| private: |
| bool loaded_; |
| Tpm* tpm_; |
| Platform* platform_; |
| brillo::Blob contents_; |
| }; |
| } // namespace cryptohome |
| |
| #endif // CRYPTOHOME_LOCKBOX_CACHE_H_ |