mirror of
https://gitlab.com/cryptsetup/cryptsetup.git
synced 2025-12-11 10:50:01 +01:00
Add validation tests for non-default json area size.
Test both primary and secondary header validation tests with non-default LUKS2 json area size. Check validation rejects config.keyslots_size with zero value. Check validation rejects mismatching values for metadata size set in binary header and in config json section.
This commit is contained in:
85
tests/generators/generate-luks2-invalid-json-size-c2.img.sh
Executable file
85
tests/generators/generate-luks2-invalid-json-size-c2.img.sh
Executable file
@@ -0,0 +1,85 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary header with config json size mismatching
|
||||
# value in binary header
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
JS=$(((LUKS2_HDR_SIZE-LUKS2_BIN_HDR_SIZE)*512))
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_32K
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
|
||||
json_str=$(jq -c '.' $TMPDIR/json0)
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0
|
||||
local str_res1=$(head -c 4 $TMPDIR/hdr_res0)
|
||||
test "$str_res1" = "LUKS" || exit 2
|
||||
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 4 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "SKUL" || exit 2
|
||||
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0
|
||||
jq -c --arg js $JS 'if .config.json_size != ( $js | tostring )
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-128k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-128k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 128 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_128K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-128k.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-128k.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 128KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_128K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-16k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-16k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 16 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-1m-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-1m-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 1 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_1M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-1m.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-1m.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 1 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_1M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-256k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-256k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 256 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_256K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-256k.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-256k.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 256KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_256K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
96
tests/generators/generate-luks2-metadata-size-2m-secondary.img.sh
Executable file
96
tests/generators/generate-luks2-metadata-size-2m-secondary.img.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 2 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_2M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-2m.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-2m.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 2 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_2M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-32k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-32k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 32 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_32K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-32k.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-32k.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary header with non-default metadata json_size.
|
||||
# There's only limited set of values allowed as json size in
|
||||
# config section of LUKS2 metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 32KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_32K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
96
tests/generators/generate-luks2-metadata-size-4m-secondary.img.sh
Executable file
96
tests/generators/generate-luks2-metadata-size-4m-secondary.img.sh
Executable file
@@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 4 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_4M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-4m.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-4m.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 4 MiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_4M
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-512k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-512k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 512 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_512K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-512k.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-512k.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 512KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_512K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
97
tests/generators/generate-luks2-metadata-size-64k-secondary.img.sh
Executable file
97
tests/generators/generate-luks2-metadata-size-64k-secondary.img.sh
Executable file
@@ -0,0 +1,97 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate secondary header with one of allowed json area
|
||||
# size values. Test wheter auto-recovery code is able
|
||||
# to validate secondary header with non-default json area
|
||||
# size.
|
||||
#
|
||||
# primary header is corrupted on purpose.
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 64 KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_64K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
write_bin_hdr_offset $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area0
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr_res0 $TEST_MDA_SIZE
|
||||
local str_res0=$(head -c 6 $TMPDIR/hdr_res0)
|
||||
test "$str_res0" = "VACUUM" || exit 2
|
||||
read_luks2_json1 $TGT_IMG $TMPDIR/json_res1 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res1 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
94
tests/generators/generate-luks2-metadata-size-64k.img.sh
Executable file
94
tests/generators/generate-luks2-metadata-size-64k.img.sh
Executable file
@@ -0,0 +1,94 @@
|
||||
#!/bin/bash
|
||||
|
||||
. lib.sh
|
||||
|
||||
#
|
||||
# *** Description ***
|
||||
#
|
||||
# generate primary with predefined json_size. There's only limited
|
||||
# set of values allowed as json size in config section of LUKS2
|
||||
# metadata
|
||||
#
|
||||
# secondary header is corrupted on purpose as well
|
||||
#
|
||||
|
||||
# $1 full target dir
|
||||
# $2 full source luks2 image
|
||||
|
||||
function prepare()
|
||||
{
|
||||
cp $SRC_IMG $TGT_IMG
|
||||
test -d $TMPDIR || mkdir $TMPDIR
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json0
|
||||
read_luks2_bin_hdr0 $TGT_IMG $TMPDIR/hdr0
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr1
|
||||
}
|
||||
|
||||
function generate()
|
||||
{
|
||||
# 64KiB metadata
|
||||
TEST_MDA_SIZE=$LUKS2_HDR_SIZE_64K
|
||||
|
||||
TEST_MDA_SIZE_BYTES=$((TEST_MDA_SIZE*512))
|
||||
TEST_JSN_SIZE=$((TEST_MDA_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
KEYSLOTS_OFFSET=$((TEST_MDA_SIZE*1024))
|
||||
JSON_DIFF=$(((TEST_MDA_SIZE-LUKS2_HDR_SIZE)*1024))
|
||||
JSON_SIZE=$((TEST_JSN_SIZE*512))
|
||||
DATA_OFFSET=16777216
|
||||
|
||||
json_str=$(jq -c --arg jdiff $JSON_DIFF --arg jsize $JSON_SIZE --arg off $DATA_OFFSET \
|
||||
'.keyslots[].area.offset |= ( . | tonumber + ($jdiff | tonumber) | tostring) |
|
||||
.config.json_size = $jsize |
|
||||
.segments."0".offset = $off' $TMPDIR/json0)
|
||||
test -n "$json_str" || exit 2
|
||||
test ${#json_str} -lt $((LUKS2_JSON_SIZE*512)) || exit 2
|
||||
|
||||
write_luks2_json "$json_str" $TMPDIR/json0 $TEST_JSN_SIZE
|
||||
|
||||
write_bin_hdr_size $TMPDIR/hdr0 $TEST_MDA_SIZE_BYTES
|
||||
write_bin_hdr_size $TMPDIR/hdr1 $TEST_MDA_SIZE_BYTES
|
||||
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr0 $TMPDIR/json0 $TMPDIR/area0 $TEST_JSN_SIZE
|
||||
merge_bin_hdr_with_json $TMPDIR/hdr1 $TMPDIR/json0 $TMPDIR/area1 $TEST_JSN_SIZE
|
||||
|
||||
erase_checksum $TMPDIR/area0
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area0)
|
||||
write_checksum $chks0 $TMPDIR/area0
|
||||
|
||||
erase_checksum $TMPDIR/area1
|
||||
chks0=$(calc_sha256_checksum_file $TMPDIR/area1)
|
||||
write_checksum $chks0 $TMPDIR/area1
|
||||
|
||||
kill_bin_hdr $TMPDIR/area1
|
||||
|
||||
write_luks2_hdr0 $TMPDIR/area0 $TGT_IMG $TEST_MDA_SIZE
|
||||
write_luks2_hdr1 $TMPDIR/area1 $TGT_IMG $TEST_MDA_SIZE
|
||||
}
|
||||
|
||||
function check()
|
||||
{
|
||||
read_luks2_bin_hdr1 $TGT_IMG $TMPDIR/hdr_res1 $TEST_MDA_SIZE
|
||||
local str_res1=$(head -c 6 $TMPDIR/hdr_res1)
|
||||
test "$str_res1" = "VACUUM" || exit 2
|
||||
read_luks2_json0 $TGT_IMG $TMPDIR/json_res0 $TEST_JSN_SIZE
|
||||
jq -c --arg koff $KEYSLOTS_OFFSET --arg jsize $JSON_SIZE \
|
||||
'if ([.keyslots[].area.offset] | map(tonumber) | min | tostring != $koff) or
|
||||
(.config.json_size != $jsize)
|
||||
then error("Unexpected value in result json") else empty end' $TMPDIR/json_res0 || exit 5
|
||||
}
|
||||
|
||||
function cleanup()
|
||||
{
|
||||
rm -f $TMPDIR/*
|
||||
rm -fd $TMPDIR
|
||||
}
|
||||
|
||||
test $# -eq 2 || exit 1
|
||||
|
||||
TGT_IMG=$1/$(test_img_name $0)
|
||||
SRC_IMG=$2
|
||||
|
||||
prepare
|
||||
generate
|
||||
check
|
||||
cleanup
|
||||
@@ -1,9 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
# all in 512 bytes blocks
|
||||
# LUKS2 with 16KiB header
|
||||
LUKS2_HDR_SIZE=32 # 16 KiB
|
||||
LUKS2_BIN_HDR_SIZE=8 # 4096 B
|
||||
# all in 512 bytes blocks (including binary hdr (4KiB))
|
||||
LUKS2_HDR_SIZE=32 # 16 KiB
|
||||
LUKS2_HDR_SIZE_32K=64 # 32 KiB
|
||||
LUKS2_HDR_SIZE_64K=128 # 64 KiB
|
||||
LUKS2_HDR_SIZE_128K=256 # 128 KiB
|
||||
LUKS2_HDR_SIZE_256K=512 # 256 KiB
|
||||
LUKS2_HDR_SIZE_512K=1024 # 512 KiB
|
||||
LUKS2_HDR_SIZE_1M=2048 # 1 MiB
|
||||
LUKS2_HDR_SIZE_2M=4096 # 2 MiB
|
||||
LUKS2_HDR_SIZE_4M=8192 # 4 MiB
|
||||
|
||||
LUKS2_BIN_HDR_SIZE=8 # 4 KiB
|
||||
LUKS2_JSON_SIZE=$((LUKS2_HDR_SIZE-LUKS2_BIN_HDR_SIZE))
|
||||
|
||||
LUKS2_BIN_HDR_CHKS_OFFSET=0x1C0
|
||||
@@ -30,57 +38,88 @@ function test_img_name()
|
||||
echo $str
|
||||
}
|
||||
|
||||
# read primary bin hdr
|
||||
# 1:from 2:to
|
||||
function read_luks2_bin_hdr0()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 count=$LUKS2_BIN_HDR_SIZE
|
||||
}
|
||||
|
||||
# read primary json area
|
||||
# 1:from 2:to 3:[json only size (defaults to 12KiB)]
|
||||
function read_luks2_json0()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 skip=$LUKS2_BIN_HDR_SIZE count=$LUKS2_JSON_SIZE
|
||||
local _js=${4:-$LUKS2_JSON_SIZE}
|
||||
local _js=$((_js*512/4096))
|
||||
_dd if=$1 of=$2 bs=4096 skip=1 count=$_js
|
||||
}
|
||||
|
||||
# read secondary bin hdr
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function read_luks2_bin_hdr1()
|
||||
{
|
||||
_dd if=$1 of=$2 skip=$LUKS2_HDR_SIZE bs=512 count=$LUKS2_BIN_HDR_SIZE
|
||||
_dd if=$1 of=$2 skip=${3:-$LUKS2_HDR_SIZE} bs=512 count=$LUKS2_BIN_HDR_SIZE
|
||||
}
|
||||
|
||||
# read secondary json area
|
||||
# 1:from 2:to 3:[json only size (defaults to 12KiB)]
|
||||
function read_luks2_json1()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 skip=$((LUKS2_BIN_HDR_SIZE+LUKS2_HDR_SIZE)) count=$LUKS2_JSON_SIZE
|
||||
local _js=${3:-$LUKS2_JSON_SIZE}
|
||||
_dd if=$1 of=$2 bs=512 skip=$((2*LUKS2_BIN_HDR_SIZE+_js)) count=$_js
|
||||
}
|
||||
|
||||
# read primary metadata area (bin + json)
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function read_luks2_hdr_area0()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 count=$LUKS2_HDR_SIZE
|
||||
local _as=${3:-$LUKS2_HDR_SIZE}
|
||||
local _as=$((_as*512))
|
||||
_dd if=$1 of=$2 bs=$_as count=1
|
||||
}
|
||||
|
||||
# read secondary metadata area (bin + json)
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function read_luks2_hdr_area1()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 skip=$LUKS2_HDR_SIZE count=$LUKS2_HDR_SIZE
|
||||
local _as=${3:-$LUKS2_HDR_SIZE}
|
||||
local _as=$((_as*512))
|
||||
_dd if=$1 of=$2 bs=$_as skip=1 count=1
|
||||
}
|
||||
|
||||
# write secondary bin hdr
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function write_luks2_bin_hdr1()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 seek=$LUKS2_HDR_SIZE count=$LUKS2_BIN_HDR_SIZE conv=notrunc
|
||||
_dd if=$1 of=$2 bs=512 seek=${3:-$LUKS2_HDR_SIZE} count=$LUKS2_BIN_HDR_SIZE conv=notrunc
|
||||
}
|
||||
|
||||
# write primary metadata area (bin + json)
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function write_luks2_hdr0()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 count=$LUKS2_HDR_SIZE conv=notrunc
|
||||
local _as=${3:-$LUKS2_HDR_SIZE}
|
||||
local _as=$((_as*512))
|
||||
_dd if=$1 of=$2 bs=$_as count=1 conv=notrunc
|
||||
}
|
||||
|
||||
# write secondary metadata area (bin + json)
|
||||
# 1:from 2:to 3:[metadata size (defaults to 16KiB)]
|
||||
function write_luks2_hdr1()
|
||||
{
|
||||
_dd if=$1 of=$2 bs=512 seek=$LUKS2_HDR_SIZE count=$LUKS2_HDR_SIZE conv=notrunc
|
||||
local _as=${3:-$LUKS2_HDR_SIZE}
|
||||
local _as=$((_as*512))
|
||||
_dd if=$1 of=$2 bs=$_as seek=1 count=1 conv=notrunc
|
||||
}
|
||||
|
||||
# 1 - json str
|
||||
# write json (includes padding)
|
||||
# 1:json_string 2:to 3:[json size (defaults to 12KiB)]
|
||||
function write_luks2_json()
|
||||
{
|
||||
local _js=${3:-$LUKS2_JSON_SIZE}
|
||||
local len=${#1}
|
||||
printf '%s' "$1" | _dd of=$2 bs=1 count=$len conv=notrunc
|
||||
_dd if=/dev/zero of=$2 bs=1 seek=$len count=$((LUKS2_JSON_SIZE*512-len))
|
||||
_dd if=/dev/zero of=$2 bs=$((_js*512)) count=1
|
||||
printf '%s' "$1" | _dd of=$2 bs=$len count=1 conv=notrunc
|
||||
}
|
||||
|
||||
function kill_bin_hdr()
|
||||
@@ -117,13 +156,14 @@ function calc_sha256_checksum_stdin()
|
||||
sha256sum - | cut -d ' ' -f 1
|
||||
}
|
||||
|
||||
# 1 - bin
|
||||
# 2 - json
|
||||
# 3 - luks2_hdr_area
|
||||
# merge bin hdr with json to form metadata area
|
||||
# 1:bin_hdr 2:json 3:to 4:[json size (defaults to 12KiB)]
|
||||
function merge_bin_hdr_with_json()
|
||||
{
|
||||
_dd if=$1 of=$3 bs=512 count=$LUKS2_BIN_HDR_SIZE
|
||||
_dd if=$2 of=$3 bs=512 seek=$LUKS2_BIN_HDR_SIZE count=$LUKS2_JSON_SIZE
|
||||
local _js=${4:-$LUKS2_JSON_SIZE}
|
||||
local _js=$((_js*512/4096))
|
||||
_dd if=$1 of=$3 bs=4096 count=1
|
||||
_dd if=$2 of=$3 bs=4096 seek=1 count=$_js
|
||||
}
|
||||
|
||||
function _dd()
|
||||
@@ -131,3 +171,11 @@ function _dd()
|
||||
dd $@ 2>/dev/null
|
||||
#dd $@
|
||||
}
|
||||
|
||||
function write_bin_hdr_size() {
|
||||
printf '%016x' $2 | xxd -r -p -l 16 | _dd of=$1 bs=8 count=1 seek=1 conv=notrunc
|
||||
}
|
||||
|
||||
function write_bin_hdr_offset() {
|
||||
printf '%016x' $2 | xxd -r -p -l 16 | _dd of=$1 bs=8 count=1 seek=32 conv=notrunc
|
||||
}
|
||||
|
||||
@@ -8,9 +8,6 @@ CRYPTSETUP=../cryptsetup
|
||||
CRYPTSETUP_VALGRIND=../.libs/cryptsetup
|
||||
CRYPTSETUP_LIB_VALGRIND=../.libs
|
||||
|
||||
DM_CRYPT_SECTOR=512
|
||||
LUKS2_HDR_SIZE=2112 # 16 KiB version, stored twice, including luks2 areas with keyslots
|
||||
|
||||
START_DIR=$(pwd)
|
||||
|
||||
IMG=luks2-backend.img
|
||||
@@ -19,6 +16,8 @@ TST_IMGS=$START_DIR/luks2-images
|
||||
|
||||
GEN_DIR=generators
|
||||
|
||||
FAILS=0
|
||||
|
||||
[ -z "$srcdir" ] && srcdir="."
|
||||
|
||||
function remove_mapping()
|
||||
@@ -35,6 +34,12 @@ function fail()
|
||||
exit 2
|
||||
}
|
||||
|
||||
fail_count()
|
||||
{
|
||||
echo "$1"
|
||||
FAILS=$((FAILS+1))
|
||||
}
|
||||
|
||||
function skip()
|
||||
{
|
||||
[ -n "$1" ] && echo "$1"
|
||||
@@ -61,23 +66,24 @@ function test_load()
|
||||
case "$1" in
|
||||
R)
|
||||
if [ -n "$_debug" ]; then
|
||||
$CRYPTSETUP luksDump $_debug $IMG || fail "$2"
|
||||
$CRYPTSETUP luksDump $_debug $IMG
|
||||
else
|
||||
$CRYPTSETUP luksDump $_debug $IMG > /dev/null || fail "$2"
|
||||
$CRYPTSETUP luksDump $_debug $IMG > /dev/null 2>&1
|
||||
fi
|
||||
test $? -eq 0 || return 1
|
||||
;;
|
||||
F)
|
||||
if [ -n "$_debug" ]; then
|
||||
$CRYPTSETUP luksDump $_debug $IMG && fail "$2"
|
||||
$CRYPTSETUP luksDump $_debug $IMG
|
||||
else
|
||||
$CRYPTSETUP luksDump $_debug $IMG > /dev/null 2>&1 && fail "$2"
|
||||
$CRYPTSETUP luksDump $_debug $IMG > /dev/null 2>&1
|
||||
fi
|
||||
test $? -ne 0 || return 1
|
||||
;;
|
||||
*)
|
||||
fail "Internal test error"
|
||||
;;
|
||||
esac
|
||||
|
||||
}
|
||||
|
||||
function RUN()
|
||||
@@ -85,7 +91,11 @@ function RUN()
|
||||
echo -n "Test image: $1..."
|
||||
cp $TST_IMGS/$1 $IMG || fail "Missing test image"
|
||||
test_load $2 "$3"
|
||||
echo "OK"
|
||||
if [ $? -ne 0 ]; then
|
||||
fail_count "$3"
|
||||
else
|
||||
echo "OK"
|
||||
fi
|
||||
}
|
||||
|
||||
function valgrind_setup()
|
||||
@@ -194,5 +204,25 @@ RUN luks2-invalid-keyslots-size-c1.img "F" "Failed to detect unaligned keyslot
|
||||
RUN luks2-invalid-keyslots-size-c2.img "F" "Failed to detect too small keyslots_size config section"
|
||||
RUN luks2-invalid-json-size-c0.img "F" "Failed to detect invalid json_size config section"
|
||||
RUN luks2-invalid-json-size-c1.img "F" "Failed to detect invalid json_size config section"
|
||||
RUN luks2-invalid-json-size-c2.img "F" "Failed to detect mismatching json size in config and binary hdr"
|
||||
RUN luks2-metadata-size-32k.img "R" "Valid 32KiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-64k.img "R" "Valid 64KiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-128k.img "R" "Valid 128KiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-256k.img "R" "Valid 256KiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-512k.img "R" "Valid 512KiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-1m.img "R" "Valid 1MiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-2m.img "R" "Valid 2MiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-4m.img "R" "Valid 4MiB metadata size failed to validate"
|
||||
RUN luks2-metadata-size-16k-secondary.img "R" "Valid 16KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-32k-secondary.img "R" "Valid 32KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-64k-secondary.img "R" "Valid 64KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-128k-secondary.img "R" "Valid 128KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-256k-secondary.img "R" "Valid 256KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-512k-secondary.img "R" "Valid 512KiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-1m-secondary.img "R" "Valid 1MiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-2m-secondary.img "R" "Valid 2MiB metadata size in secondary hdr failed to validate"
|
||||
RUN luks2-metadata-size-4m-secondary.img "R" "Valid 4MiB metadata size in secondary hdr failed to validate"
|
||||
|
||||
remove_mapping
|
||||
|
||||
test $FAILS -eq 0 || fail "($FAILS wrong result(s) in total)"
|
||||
|
||||
Reference in New Issue
Block a user