genode/tool/rump_cgdconf

114 lines
2.0 KiB
Bash
Executable File

#!/bin/sh
#
# \brief Create cgdconfig(8) configuration file from key or extract the key
# from the specified configuration file
# \author Josef Soentgen
# \date 2014-04-29
#
#
# Note: This script is merely just a awk(1) wrapper and only generates a
# aes-cbc 256 storedkey configuration and expects the given key to
# be a proper base64 encoded key generated by cgdconfig(8).
#
#
# Print usage
#
print_usage() {
local help=$1
printf "usage: $PROG_NAME [-h] <-f file|-k key>\n"
if [ "$help" != "" ]; then
printf "\t-h show this help screen\n"
printf "\t-k key generate config file from key and print "
printf "to stdout\n"
printf "\t-f file extract key from config file and print "
printf "to stdout\n"
fi
}
#
# Parse arguments given on the commandline
#
parse_arguments() {
local args="$(getopt hf:k: ${*})"
[ $? != 0 ] && exit 1
if [ $# -lt 1 ]
then
print_usage
exit 1
fi
set -- $args
while [ $# -ge 0 ]; do
case "$1" in
-h)
print_usage "help"
exit 0;;
-k) ARG_KEY="$2"; shift; shift;;
-f) ARG_FILE="$2"; shift; shift;;
--) shift; break;;
esac
done
}
#
# Extract the key string from the configuration file
#
extract_key() {
local cgd_file="$1"
awk 'BEGIN { found=0 }
{
if (found == 1) key=key $1
if ($1 == "keygen") { found=1; key=$4 }
}
END { sub(/;$/, "", key); print key }' $cgd_file
}
#
# Generate a proper cgd(8) configuration file from the given key
#
generate_conf() {
local key="$1"
printf "$key" | awk '{ key=$0 }
END {
printf("algorithm aes-cbc;\n")
printf("iv-method encblkno1;\n")
printf("keylength 256;\n")
printf("verify_method none;\n")
printf("keygen storedkey key ")
printf("%s \\\n", substr(key, 1, 30))
printf(" %s;\n", substr(key, 31))
}'
}
main() {
parse_arguments "$@"
if [ "$ARG_FILE" != "" ]; then
extract_key "$ARG_FILE"
fi
if [ "$ARG_KEY" != "" ]; then
generate_conf "$ARG_KEY"
fi
}
PROG_NAME=$(basename $0)
ARG_FILE=
ARG_KEY=
main "$@"
exit 0
# End of file