blob: 6aa8be437ae594152841add8bae4bb1dceebebe5 [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
David Zeuthen18666ab2016-11-15 11:18:05 -050054 void set_expected_public_key_metadata(
55 const std::string& expected_public_key_metadata) {
56 expected_public_key_metadata_ = expected_public_key_metadata;
57 }
58
David Zeuthen8b6973b2016-09-20 12:39:49 -040059 void set_stored_rollback_indexes(
60 const std::vector<uint64_t>& stored_rollback_indexes) {
61 stored_rollback_indexes_ = stored_rollback_indexes;
62 }
63
64 std::vector<uint64_t> get_stored_rollback_indexes() {
65 return stored_rollback_indexes_;
66 }
67
68 void set_stored_is_device_unlocked(bool stored_is_device_unlocked) {
69 stored_is_device_unlocked_ = stored_is_device_unlocked;
70 }
71
72 AvbIOResult read_from_partition(const char* partition, int64_t offset,
73 size_t num_bytes, void* buffer,
74 size_t* out_num_read);
75
76 AvbIOResult write_to_partition(const char* partition, int64_t offset,
77 size_t num_bytes, const void* buffer);
78
David Zeuthen507752b2016-09-29 16:31:18 -040079 AvbIOResult validate_vbmeta_public_key(AvbOps* ops,
80 const uint8_t* public_key_data,
81 size_t public_key_length,
David Zeuthen18666ab2016-11-15 11:18:05 -050082 const uint8_t* public_key_metadata,
83 size_t public_key_metadata_length,
David Zeuthen507752b2016-09-29 16:31:18 -040084 bool* out_key_is_trusted);
David Zeuthen8b6973b2016-09-20 12:39:49 -040085
David Zeuthen40ee1da2016-11-23 15:14:49 -050086 AvbIOResult read_rollback_index(AvbOps* ops, size_t rollback_index_location,
David Zeuthen507752b2016-09-29 16:31:18 -040087 uint64_t* out_rollback_index);
David Zeuthen8b6973b2016-09-20 12:39:49 -040088
David Zeuthen40ee1da2016-11-23 15:14:49 -050089 AvbIOResult write_rollback_index(AvbOps* ops, size_t rollback_index_location,
David Zeuthen507752b2016-09-29 16:31:18 -040090 uint64_t rollback_index);
David Zeuthen8b6973b2016-09-20 12:39:49 -040091
David Zeuthen507752b2016-09-29 16:31:18 -040092 AvbIOResult read_is_device_unlocked(AvbOps* ops,
93 bool* out_is_device_unlocked);
David Zeuthen8b6973b2016-09-20 12:39:49 -040094
David Zeuthen507752b2016-09-29 16:31:18 -040095 AvbIOResult get_unique_guid_for_partition(AvbOps* ops, const char* partition,
96 char* guid_buf,
97 size_t guid_buf_size);
David Zeuthen8b6973b2016-09-20 12:39:49 -040098
99 private:
100 FakeAvbOpsC* avb_ops_;
101
102 base::FilePath partition_dir_;
103
104 std::string expected_public_key_;
David Zeuthen18666ab2016-11-15 11:18:05 -0500105 std::string expected_public_key_metadata_;
David Zeuthen8b6973b2016-09-20 12:39:49 -0400106
107 std::vector<uint64_t> stored_rollback_indexes_;
108
109 bool stored_is_device_unlocked_;
110};
111
112#endif /* FAKE_AVB_OPS_H_ */