Files
s390-tools/rust/pvattest/tools/pvattest-info
Steffen Eiden c382e7ef44 Remove pvattest-C and switch to pvattest-Rust implementation
Removes the C implementation of pvattest.
Use the Rust implementation instead.

Closes: https://github.com/ibm-s390-linux/s390-tools/issues/164
Acked-by: Marc Hartmayer <mhartmay@linux.ibm.com>
Signed-off-by: Steffen Eiden <seiden@linux.ibm.com>
2024-05-27 16:54:06 +02:00

95 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
#
# pvattest-info - get additional information from an attestation measurement
#
# Sample:
# ./pvattest-info attestresp.bin
#
# Copyright IBM Corp. 2022
#
# s390-tools is free software; you can redistribute it and/or modify
# it under the terms of the MIT license. See LICENSE for details.
set -o pipefail
set -o nounset
set -e
XDUMP='od -A x -t x2z -v --endian=big'
usage() {
cat <<-EOF
Usage: $(basename "$0") FILE
Prints config UID and additional data if available.
EOF
}
function check_is_pvattest_binary() {
local input="$1"
local size
local version
size=$(wc -c <"$input")
if [ "$size" -lt 64 ]; then
echo "ERROR: Input file is too small." >&2
exit 1
fi
${XDUMP} --read-bytes 16 -- "${input}" 2>/dev/null | grep -q pvattest ||
{ echo "ERROR: ${input} does not contain a pvattest binary output." >&2 && exit 1; }
size=$(${XDUMP} --skip-bytes 12 --read-bytes 4 -- "${input}" 2>/dev/null | awk 'NR==1 {print "0x" $2 $3}')
if [ $((size)) -lt 64 ]; then
echo "ERROR: ${input} does not contain a pvattest binary output." >&2
exit 1
fi
version=$(${XDUMP} --skip-bytes 8 --read-bytes 4 -- "$input" 2>/dev/null)
echo "$version" | grep -q "0000 0100" ||
{ echo -n "WARNING: unknown hdr version " >&2 &&
echo "$version" | awk '{print "0x" $2 $3}'>&2 ; }
}
function print_entry() {
local file_off="$1"
local text="$2"
local input="$3"
local size
local off
size=$(${XDUMP} --skip-bytes $((file_off)) --read-bytes 4 -- "${input}" 2>/dev/null |
awk 'NR==1 {print "0x" $2 $3}')
off=$(${XDUMP} --skip-bytes $((file_off + 4)) --read-bytes 4 -- "${input}" 2>/dev/null |
awk 'NR==1 {print "0x" $2 $3}')
if [[ $size != "0x00000000" ]] || [[ $off != "0x00000000" ]]; then
echo "${text}:"
od -A n -w$((size)) -t x8 --skip-bytes $((off)) --read-bytes $((size)) -- "${input}" 2>/dev/null |\
sed -e 's/\s//g'
fi
}
function require_command() {
local cmd="$1"
command -v "$cmd" >/dev/null 2>&1 || \
{ echo >&2 "ERROR: $cmd required but not installed."; exit 1; }
}
require_command awk
require_command wc
require_command od
if [ $# -eq 0 ]; then
echo "ERROR: Input not set. Use '$(basename "$0") [FILE]' to specify the Input file" >&2
exit 1
fi
input="$1"
[ -e "$input" ] || { echo "ERROR: File '$1' not found" >&2 && exit 1; }
check_is_pvattest_binary "$input"
print_entry 0x38 "Config UID" "$input"
print_entry 0x28 "Additional Data" "$input"