Files
cryptsetup/tests/generators/lib.sh
2017-09-24 19:50:17 +02:00

134 lines
2.6 KiB
Bash

#!/bin/bash
# all in 512 bytes blocks
# LUKS2 with 16KiB header
LUKS2_HDR_SIZE=32 # 16 KiB
LUKS2_BIN_HDR_SIZE=8 # 4096 B
LUKS2_JSON_SIZE=$((LUKS2_HDR_SIZE-LUKS2_BIN_HDR_SIZE))
LUKS2_BIN_HDR_CHKS_OFFSET=0x1C0
LUKS2_BIN_HDR_CHKS_LENGTH=64
[ -z "$srcdir" ] && srcdir="."
TMPDIR=$srcdir/tmp
repeat_str() {
printf "$1"'%.0s' $(eval "echo {1.."$(($2))"}");
}
function strindex()
{
local x="${1%%$2*}"
[[ $x = $1 ]] && echo -1 || echo ${#x}
}
function test_img_name()
{
local str=$(basename $1)
str=${str#generate-}
str=${str%%.sh}
echo $str
}
function read_luks2_bin_hdr0()
{
_dd if=$1 of=$2 bs=512 count=$LUKS2_BIN_HDR_SIZE
}
function read_luks2_json0()
{
_dd if=$1 of=$2 bs=512 skip=$LUKS2_BIN_HDR_SIZE count=$LUKS2_JSON_SIZE
}
function read_luks2_bin_hdr1()
{
_dd if=$1 of=$2 skip=$LUKS2_HDR_SIZE bs=512 count=$LUKS2_BIN_HDR_SIZE
}
function read_luks2_json1()
{
_dd if=$1 of=$2 bs=512 skip=$((LUKS2_BIN_HDR_SIZE+LUKS2_HDR_SIZE)) count=$LUKS2_JSON_SIZE
}
function read_luks2_hdr_area0()
{
_dd if=$1 of=$2 bs=512 count=$LUKS2_HDR_SIZE
}
function read_luks2_hdr_area1()
{
_dd if=$1 of=$2 bs=512 skip=$LUKS2_HDR_SIZE count=$LUKS2_HDR_SIZE
}
function write_luks2_bin_hdr1()
{
_dd if=$1 of=$2 bs=512 seek=$LUKS2_HDR_SIZE count=$LUKS2_BIN_HDR_SIZE conv=notrunc
}
function write_luks2_hdr0()
{
_dd if=$1 of=$2 bs=512 count=$LUKS2_HDR_SIZE conv=notrunc
}
function write_luks2_hdr1()
{
_dd if=$1 of=$2 bs=512 seek=$LUKS2_HDR_SIZE count=$LUKS2_HDR_SIZE conv=notrunc
}
# 1 - json str
function write_luks2_json()
{
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))
}
function kill_bin_hdr()
{
printf "VACUUM" | _dd of=$1 bs=1 conv=notrunc
}
function erase_checksum()
{
_dd if=/dev/zero of=$1 bs=1 seek=$(printf %d $LUKS2_BIN_HDR_CHKS_OFFSET) count=$LUKS2_BIN_HDR_CHKS_LENGTH conv=notrunc
}
function read_sha256_checksum()
{
_dd if=$1 bs=1 skip=$(printf %d $LUKS2_BIN_HDR_CHKS_OFFSET) count=32 | xxd -c 32 -p
}
# 1 - string with checksum
function write_checksum()
{
test $# -eq 2 || return 1
test $((${#1}/2)) -le $LUKS2_BIN_HDR_CHKS_LENGTH || { echo "too long"; return 1; }
echo $1 | xxd -r -p | _dd of=$2 bs=1 seek=$(printf %d $LUKS2_BIN_HDR_CHKS_OFFSET) conv=notrunc
}
function calc_sha256_checksum_file()
{
sha256sum $1 | cut -d ' ' -f 1
}
function calc_sha256_checksum_stdin()
{
sha256sum - | cut -d ' ' -f 1
}
# 1 - bin
# 2 - json
# 3 - luks2_hdr_area
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
}
function _dd()
{
dd $@ 2>/dev/null
#dd $@
}