Adapt existing code to future reencryption changes.

This commit is contained in:
Ondrej Kozina
2019-02-18 18:05:15 +01:00
committed by Milan Broz
parent e295d01505
commit 8dc1a74df8
3 changed files with 24 additions and 7 deletions

View File

@@ -278,8 +278,8 @@ int json_segments_count(json_object *jobj_segments);
json_object *json_segments_get_segment_by_flag(json_object *jobj_segments, const char *flag); json_object *json_segments_get_segment_by_flag(json_object *jobj_segments, const char *flag);
void json_segment_remove_flag(json_object *jobj_segment, const char *flag); void json_segment_remove_flag(json_object *jobj_segment, const char *flag);
uint64_t json_segments_get_minimal_offset(json_object *jobj_segments, unsigned blockwise); uint64_t json_segments_get_minimal_offset(json_object *jobj_segments, unsigned blockwise);
json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length); json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length, unsigned reencryption);
json_object *json_segment_create_crypt(uint64_t offset, uint64_t iv_offset, const uint64_t *length, const char *cipher, uint32_t sector_size); json_object *json_segment_create_crypt(uint64_t offset, uint64_t iv_offset, const uint64_t *length, const char *cipher, uint32_t sector_size, unsigned reencryption);
int json_segments_segment_in_reencrypt(json_object *jobj_segments); int json_segments_segment_in_reencrypt(json_object *jobj_segments);
int LUKS2_segments_count(struct luks2_hdr *hdr); int LUKS2_segments_count(struct luks2_hdr *hdr);

View File

@@ -231,7 +231,7 @@ int LUKS2_generate_hdr(
if (LUKS2_digest_segment_assign(cd, hdr, CRYPT_DEFAULT_SEGMENT, digest, 1, 0) < 0) if (LUKS2_digest_segment_assign(cd, hdr, CRYPT_DEFAULT_SEGMENT, digest, 1, 0) < 0)
goto err; goto err;
jobj_segment = json_segment_create_crypt(data_offset, 0, NULL, cipher, sector_size); jobj_segment = json_segment_create_crypt(data_offset, 0, NULL, cipher, sector_size, 0);
if (!jobj_segment) if (!jobj_segment)
goto err; goto err;

View File

@@ -42,6 +42,9 @@ uint64_t json_segments_get_minimal_offset(json_object *jobj_segments, unsigned b
json_object_object_foreach(jobj_segments, key, val) { json_object_object_foreach(jobj_segments, key, val) {
UNUSED(key); UNUSED(key);
if (LUKS2_segment_ignore(val))
continue;
tmp = json_segment_get_offset(val, blockwise); tmp = json_segment_get_offset(val, blockwise);
if (!tmp) if (!tmp)
@@ -146,10 +149,18 @@ json_object *json_segments_get_segment(json_object *jobj_segments, int segment)
int json_segments_count(json_object *jobj_segments) int json_segments_count(json_object *jobj_segments)
{ {
int count = 0;
if (!jobj_segments) if (!jobj_segments)
return -EINVAL; return -EINVAL;
return json_object_object_length(jobj_segments); json_object_object_foreach(jobj_segments, slot, val) {
UNUSED(slot);
if (!LUKS2_segment_ignore(val))
count++;
}
return count;
} }
static void _get_segment_or_id_by_flag(json_object *jobj_segments, const char *flag, unsigned id, void *retval) static void _get_segment_or_id_by_flag(json_object *jobj_segments, const char *flag, unsigned id, void *retval)
@@ -218,14 +229,18 @@ static json_object *_segment_create_generic(const char *type, uint64_t offset, c
return jobj; return jobj;
} }
json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length) json_object *json_segment_create_linear(uint64_t offset, const uint64_t *length, unsigned reencryption)
{ {
return _segment_create_generic("linear", offset, length); json_object *jobj = _segment_create_generic("linear", offset, length);
if (reencryption)
LUKS2_segment_set_flag(jobj, "in-reencryption");
return jobj;
} }
json_object *json_segment_create_crypt(uint64_t offset, json_object *json_segment_create_crypt(uint64_t offset,
uint64_t iv_offset, const uint64_t *length, uint64_t iv_offset, const uint64_t *length,
const char *cipher, uint32_t sector_size) const char *cipher, uint32_t sector_size,
unsigned reencryption)
{ {
json_object *jobj = _segment_create_generic("crypt", offset, length); json_object *jobj = _segment_create_generic("crypt", offset, length);
if (!jobj) if (!jobj)
@@ -234,6 +249,8 @@ json_object *json_segment_create_crypt(uint64_t offset,
json_object_object_add(jobj, "iv_tweak", json_object_new_uint64(iv_offset)); json_object_object_add(jobj, "iv_tweak", json_object_new_uint64(iv_offset));
json_object_object_add(jobj, "encryption", json_object_new_string(cipher)); json_object_object_add(jobj, "encryption", json_object_new_string(cipher));
json_object_object_add(jobj, "sector_size", json_object_new_int(sector_size)); json_object_object_add(jobj, "sector_size", json_object_new_int(sector_size));
if (reencryption)
LUKS2_segment_set_flag(jobj, "in-reencryption");
return jobj; return jobj;
} }