blob: 2a81e17e25fbeef79981060f0a607552b37dce43 [file] [log] [blame]
David Zeuthen8b6973b2016-09-20 12:39:49 -04001/*
2 * Copyright (C) 2016 The Android Open Source Project
3 *
4 * Permission is hereby granted, free of charge, to any person
5 * obtaining a copy of this software and associated documentation
6 * files (the "Software"), to deal in the Software without
7 * restriction, including without limitation the rights to use, copy,
8 * modify, merge, publish, distribute, sublicense, and/or sell copies
9 * of the Software, and to permit persons to whom the Software is
10 * furnished to do so, subject to the following conditions:
11 *
12 * The above copyright notice and this permission notice shall be
13 * included in all copies or substantial portions of the Software.
14 *
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
19 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
20 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22 * SOFTWARE.
23 */
24
25#ifndef FAKE_AVB_OPS_H_
26#define FAKE_AVB_OPS_H_
27
28#include <base/files/file_util.h>
29#include <string>
30#include <vector>
31
David Zeuthenbaf59e22016-11-14 15:39:43 -050032#include <libavb_ab/libavb_ab.h>
David Zeuthen8b6973b2016-09-20 12:39:49 -040033
34struct FakeAvbOpsC;
35typedef struct FakeAvbOpsC FakeAvbOpsC;
36
37class FakeAvbOps {
38 public:
39 FakeAvbOps();
40 ~FakeAvbOps();
41
42 AvbOps* avb_ops() { return (AvbOps*)avb_ops_; }
43
David Zeuthenbaf59e22016-11-14 15:39:43 -050044 AvbABOps* avb_ab_ops() { return (AvbABOps*)avb_ops_; }
45
David Zeuthen8b6973b2016-09-20 12:39:49 -040046 void set_partition_dir(const base::FilePath& partition_dir) {
47 partition_dir_ = partition_dir;
48 }
49
50 void set_expected_public_key(const std::string& expected_public_key) {
51 expected_public_key_ = expected_public_key;
52 }
53
54 void set_stored_rollback_indexes(
55 const std::vector<uint64_t>& stored_rollback_indexes) {
56 stored_rollback_indexes_ = stored_rollback_indexes;
57 }
58
59 std::vector<uint64_t> get_stored_rollback_indexes() {
60 return stored_rollback_indexes_;
61 }
62
63 void set_stored_is_device_unlocked(bool stored_is_device_unlocked) {
64 stored_is_device_unlocked_ = stored_is_device_unlocked;
65 }
66
67 AvbIOResult read_from_partition(const char* partition, int64_t offset,
68 size_t num_bytes, void* buffer,
69 size_t* out_num_read);
70
71 AvbIOResult write_to_partition(const char* partition, int64_t offset,
72 size_t num_bytes, const void* buffer);
73
David Zeuthen507752b2016-09-29 16:31:18 -040074 AvbIOResult validate_vbmeta_public_key(AvbOps* ops,
75 const uint8_t* public_key_data,
76 size_t public_key_length,
77 bool* out_key_is_trusted);
David Zeuthen8b6973b2016-09-20 12:39:49 -040078
David Zeuthen507752b2016-09-29 16:31:18 -040079 AvbIOResult read_rollback_index(AvbOps* ops, size_t rollback_index_slot,
80 uint64_t* out_rollback_index);
David Zeuthen8b6973b2016-09-20 12:39:49 -040081
David Zeuthen507752b2016-09-29 16:31:18 -040082 AvbIOResult write_rollback_index(AvbOps* ops, size_t rollback_index_slot,
83 uint64_t rollback_index);
David Zeuthen8b6973b2016-09-20 12:39:49 -040084
David Zeuthen507752b2016-09-29 16:31:18 -040085 AvbIOResult read_is_device_unlocked(AvbOps* ops,
86 bool* out_is_device_unlocked);
David Zeuthen8b6973b2016-09-20 12:39:49 -040087
David Zeuthen507752b2016-09-29 16:31:18 -040088 AvbIOResult get_unique_guid_for_partition(AvbOps* ops, const char* partition,
89 char* guid_buf,
90 size_t guid_buf_size);
David Zeuthen8b6973b2016-09-20 12:39:49 -040091
92 private:
93 FakeAvbOpsC* avb_ops_;
94
95 base::FilePath partition_dir_;
96
97 std::string expected_public_key_;
98
99 std::vector<uint64_t> stored_rollback_indexes_;
100
101 bool stored_is_device_unlocked_;
102};
103
104#endif /* FAKE_AVB_OPS_H_ */