2 * cryptsetup LUKS2 custom mutator
4 * Copyright (C) 2022-2023 Daniel Zatovic <daniel.zatovic@gmail.com>
5 * Copyright (C) 2022-2023 Red Hat, Inc. All rights reserved.
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 // ---------------------------------------------------------------------------
27 // ----------------------------- GENERIC OBJECTS -----------------------------
28 // ---------------------------------------------------------------------------
32 // int_id will be mapped to range -16 to 16 (mod 33)
33 // this way iy should be easier to generate valid
34 // object cross-references
40 message string_uint64 {
41 required bool negative = 1;
44 string string_num = 3;
54 // ---------------------------------------------------------------------------
55 // ----------------------------- BINARY HEADER -------------------------------
56 // ---------------------------------------------------------------------------
70 // we limit the size to 64KiB to make the fuzzing faster
71 // because the checksum needs to be calculated for the whole image
76 // size_128_KB = 131072;
77 // size_256_KB = 262144;
78 // size_512_KB = 524288;
79 // size_1_MB = 1048576;
80 // size_2_MB = 2097152;
81 // size_4_MB = 4194304;
84 enum seqid_description {
86 SECONDARY_GREATER = 1;
90 // message luks2_hdr_disk {
91 // char magic[LUKS2_MAGIC_L];
92 // //uint16_t version; /* Version 2 */
93 // uint64_t hdr_size; /* in bytes, including JSON area */
94 // uint64_t seqid; /* increased on every update */
95 // char label[LUKS2_LABEL_L];
96 // char checksum_alg[LUKS2_CHECKSUM_ALG_L];
97 // uint8_t salt[LUKS2_SALT_L]; /* unique for every header/offset */
98 // char uuid[LUKS2_UUID_L];
99 // char subsystem[LUKS2_LABEL_L]; /* owner subsystem label */
100 // uint64_t hdr_offset; /* offset from device start in bytes */
101 // char _padding[184];
102 // uint8_t csum[LUKS2_CHECKSUM_L];
104 message LUKS2_header {
105 required luks_version version = 1;
106 required luks2_magic magic = 2;
107 required hdr_size hdr_size = 3;
108 required bool use_correct_checksum = 4;
110 optional uint64 selected_offset = 5;
113 message LUKS2_both_headers {
114 required LUKS2_header primary_header = 1;
115 required LUKS2_header secondary_header = 2;
117 required seqid_description seqid = 3;
118 required JsonObject json_area = 4;
122 required string name = 1;
123 required JsonValue value = 2;
130 // null: null, will be used when 'oneof' contains nothing
132 // object: another json object of any type
133 JsonObject object_value = 1;
135 // array: an array of values
136 ArrayValue array_value = 2;
138 // number: can be an integer, a float, an exponent
139 NumberValue number_value = 3;
141 // string: unicode string
142 StringValue string_value = 4;
144 // boolean: true or talse
145 BooleanValue boolean_value = 5;
150 repeated JsonValue value = 1;
153 message NumberInteger {
154 required int64 value = 1;
157 message NumberFloat {
158 required double value = 1;
161 message NumberExponent {
162 required int32 base = 1;
163 required int32 exponent = 2;
164 required bool use_uppercase = 3;
167 message NumberExponentFrac {
168 required float base = 1;
169 required int32 exponent = 2;
170 required bool use_uppercase = 3;
173 message NumberValue {
174 required NumberInteger integer_value = 1;
176 // integer_value is used when oneof field below has nothing.
178 NumberFloat float_value = 2;
179 NumberExponent exponent_value = 3;
180 NumberExponentFrac exponent_frac_value = 4;
184 message StringValue {
185 required string value = 1;
188 message BooleanValue {
189 required bool value = 1;