xref: /aosp_15_r20/external/open-dice/include/dice/fuzz_utils.h (revision 60b67249c2e226f42f35cc6cfe66c6048e0bae6b)
1*60b67249SAndroid Build Coastguard Worker // Copyright 2021 Google LLC
2*60b67249SAndroid Build Coastguard Worker //
3*60b67249SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); you may not
4*60b67249SAndroid Build Coastguard Worker // use this file except in compliance with the License. You may obtain a copy of
5*60b67249SAndroid Build Coastguard Worker // the License at
6*60b67249SAndroid Build Coastguard Worker //
7*60b67249SAndroid Build Coastguard Worker //     https://www.apache.org/licenses/LICENSE-2.0
8*60b67249SAndroid Build Coastguard Worker //
9*60b67249SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software
10*60b67249SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
11*60b67249SAndroid Build Coastguard Worker // WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
12*60b67249SAndroid Build Coastguard Worker // License for the specific language governing permissions and limitations under
13*60b67249SAndroid Build Coastguard Worker // the License.
14*60b67249SAndroid Build Coastguard Worker 
15*60b67249SAndroid Build Coastguard Worker #ifndef DICE_FUZZ_UTILS_H_
16*60b67249SAndroid Build Coastguard Worker #define DICE_FUZZ_UTILS_H_
17*60b67249SAndroid Build Coastguard Worker 
18*60b67249SAndroid Build Coastguard Worker #include <cstdint>
19*60b67249SAndroid Build Coastguard Worker #include <vector>
20*60b67249SAndroid Build Coastguard Worker 
21*60b67249SAndroid Build Coastguard Worker #include "dice/dice.h"
22*60b67249SAndroid Build Coastguard Worker #include "fuzzer/FuzzedDataProvider.h"
23*60b67249SAndroid Build Coastguard Worker 
24*60b67249SAndroid Build Coastguard Worker namespace dice {
25*60b67249SAndroid Build Coastguard Worker namespace fuzz {
26*60b67249SAndroid Build Coastguard Worker 
ConsumeRandomLengthStringAsBytesFrom(FuzzedDataProvider & fdp)27*60b67249SAndroid Build Coastguard Worker static inline std::vector<uint8_t> ConsumeRandomLengthStringAsBytesFrom(
28*60b67249SAndroid Build Coastguard Worker     FuzzedDataProvider& fdp) {
29*60b67249SAndroid Build Coastguard Worker   auto s = fdp.ConsumeRandomLengthString();
30*60b67249SAndroid Build Coastguard Worker   return std::vector<uint8_t>(s.begin(), s.end());
31*60b67249SAndroid Build Coastguard Worker }
32*60b67249SAndroid Build Coastguard Worker 
33*60b67249SAndroid Build Coastguard Worker struct FuzzedInputValues {
ConsumeFromFuzzedInputValues34*60b67249SAndroid Build Coastguard Worker   static FuzzedInputValues ConsumeFrom(FuzzedDataProvider& fdp) {
35*60b67249SAndroid Build Coastguard Worker     FuzzedInputValues fiv = {};
36*60b67249SAndroid Build Coastguard Worker     DiceInputValues& input_values = fiv.input_values_;
37*60b67249SAndroid Build Coastguard Worker 
38*60b67249SAndroid Build Coastguard Worker     fdp.ConsumeData(&input_values.code_hash, DICE_HASH_SIZE);
39*60b67249SAndroid Build Coastguard Worker 
40*60b67249SAndroid Build Coastguard Worker     fiv.code_descriptor_ = ConsumeRandomLengthStringAsBytesFrom(fdp);
41*60b67249SAndroid Build Coastguard Worker     input_values.code_descriptor = fiv.code_descriptor_.data();
42*60b67249SAndroid Build Coastguard Worker     input_values.code_descriptor_size = fiv.code_descriptor_.size();
43*60b67249SAndroid Build Coastguard Worker 
44*60b67249SAndroid Build Coastguard Worker     input_values.config_type = (DiceConfigType)fdp.ConsumeIntegralInRange(0, 1);
45*60b67249SAndroid Build Coastguard Worker 
46*60b67249SAndroid Build Coastguard Worker     fdp.ConsumeData(&input_values.config_value, DICE_INLINE_CONFIG_SIZE);
47*60b67249SAndroid Build Coastguard Worker 
48*60b67249SAndroid Build Coastguard Worker     fiv.config_descriptor_ = ConsumeRandomLengthStringAsBytesFrom(fdp);
49*60b67249SAndroid Build Coastguard Worker     input_values.config_descriptor = fiv.config_descriptor_.data();
50*60b67249SAndroid Build Coastguard Worker     input_values.config_descriptor_size = fiv.config_descriptor_.size();
51*60b67249SAndroid Build Coastguard Worker 
52*60b67249SAndroid Build Coastguard Worker     fdp.ConsumeData(&input_values.authority_hash, DICE_HASH_SIZE);
53*60b67249SAndroid Build Coastguard Worker 
54*60b67249SAndroid Build Coastguard Worker     fiv.authority_descriptor_ = ConsumeRandomLengthStringAsBytesFrom(fdp);
55*60b67249SAndroid Build Coastguard Worker     input_values.authority_descriptor = fiv.authority_descriptor_.data();
56*60b67249SAndroid Build Coastguard Worker     input_values.authority_descriptor_size = fiv.authority_descriptor_.size();
57*60b67249SAndroid Build Coastguard Worker 
58*60b67249SAndroid Build Coastguard Worker     input_values.mode = (DiceMode)fdp.ConsumeIntegralInRange(0, 3);
59*60b67249SAndroid Build Coastguard Worker 
60*60b67249SAndroid Build Coastguard Worker     fdp.ConsumeData(&input_values.hidden, DICE_HIDDEN_SIZE);
61*60b67249SAndroid Build Coastguard Worker 
62*60b67249SAndroid Build Coastguard Worker     return fiv;
63*60b67249SAndroid Build Coastguard Worker   }
64*60b67249SAndroid Build Coastguard Worker 
65*60b67249SAndroid Build Coastguard Worker   operator const DiceInputValues*() const { return &input_values_; }
66*60b67249SAndroid Build Coastguard Worker 
67*60b67249SAndroid Build Coastguard Worker   std::vector<uint8_t> code_descriptor_;
68*60b67249SAndroid Build Coastguard Worker   std::vector<uint8_t> config_descriptor_;
69*60b67249SAndroid Build Coastguard Worker   std::vector<uint8_t> authority_descriptor_;
70*60b67249SAndroid Build Coastguard Worker 
71*60b67249SAndroid Build Coastguard Worker   DiceInputValues input_values_;
72*60b67249SAndroid Build Coastguard Worker };
73*60b67249SAndroid Build Coastguard Worker 
74*60b67249SAndroid Build Coastguard Worker }  // namespace fuzz
75*60b67249SAndroid Build Coastguard Worker }  // namespace dice
76*60b67249SAndroid Build Coastguard Worker 
77*60b67249SAndroid Build Coastguard Worker #endif  // DICE_FUZZ_UTILS_H_
78