summaryrefslogtreecommitdiff
blob: 33b51b6b1028a9d02b6a816b7d21e3729ac12615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
diff --git a/home/salahx/Downloads/run-with-simulator b/home/salahx/Downloads/run-with-simulator
new file mode 100755
index 000000000000..e29b591f8d8b
--- /dev/null
+++ b/test/run-with-simulator
@@ -0,0 +1,126 @@
+#!/bin/bash
+# SPDX-License-Identifier: BSD-3-Clause
+
+SIM_PORT_DATA=2321
+SIM_PORT_CMD=$((SIM_PORT_DATA+1))
+
+# Run from top dir of this repository
+SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
+TOP_DIR="$(realpath "$SCRIPT_DIR/..")"
+cd "$TOP_DIR" || { echo "Error: cd to cd $TOP_DIR failed"; exit 1; }
+
+
+verify_simulator_is_running() {
+    local pid_tpm=$1
+
+    sleep 1
+    ss -lntp4 2> /dev/null | grep "${pid_tpm}" | grep -q "${SIM_PORT_DATA}"
+    ret_data=$?
+    ss -lntp4 2> /dev/null | grep "${pid_tpm}" | grep -q "${SIM_PORT_CMD}"
+    ret_cmd=$?
+    if [ $ret_data -eq 0 ] && [ $ret_cmd -eq 0 ]; then
+        echo "Simulator with PID ${pid_tpm} bound to port ${SIM_PORT_DATA} and ${SIM_PORT_CMD} successfully."
+        return 0
+    else
+        echo "Error: Port conflict? Cleaning up PID: ${pid_tpm}"
+        return 1
+    fi
+}
+
+build_tpm2_simulator_ibm() (
+    test -d ibmtpm && return
+    echo "---> compiling IBM tpm simulator"
+    mkdir ibmtpm
+    curl -Ls https://downloads.sourceforge.net/project/ibmswtpm2/ibmtpm1682.tar.gz | tar xz -C ibmtpm
+    cd ibmtpm/src && make
+)
+
+start_tpm2_simulator_ibm () {
+    build_tpm2_simulator_ibm || return 1
+
+    echo "---> starting IBM tpm simulator"
+    ibmtpm/src/tpm_server &
+    pid_tpm=$!
+    verify_simulator_is_running $pid_tpm
+}
+
+start_tpm2_simulator_swtpm () {
+    echo "---> starting swtpm simulator"
+    swtpm socket --tpm2 \
+        --server port=$SIM_PORT_DATA \
+        --ctrl type=tcp,port=$SIM_PORT_CMD \
+        --flags not-need-init \
+        --tpmstate dir="$PWD" \
+        --seccomp action=none &
+    pid_tpm=$!
+    verify_simulator_is_running $pid_tpm
+}
+
+start_dbusd () {
+    echo "---> starting dbus daemon"
+    dbus-daemon --session --print-address > /tmp/bus-socket-path.txt &
+    sleep 1
+    DBUS_SESSION_BUS_ADDRESS="$(tail -n1 /tmp/bus-socket-path.txt)"
+    export DBUS_SESSION_BUS_ADDRESS
+}
+
+start_tpm2_abrmd() {
+    local tabrmd_tcti=$1
+
+    echo "---> starting abrmd"
+    local tabrmd_name="com.intel.tss2.Tabrmd${SIM_PORT_DATA}"
+    tpm2-abrmd --session --dbus-name="${tabrmd_name}" --tcti "${tabrmd_tcti}:host=localhost,port=${SIM_PORT_DATA}" &
+    TCTI_ADDRESS="tabrmd:bus_name=${tabrmd_name},bus_type=session"
+    TPM2TOOLS_TCTI="$TCTI_ADDRESS"
+    TPM2OPENSSL_TCTI="$TCTI_ADDRESS"
+    export TPM2TOOLS_TCTI
+    export TPM2OPENSSL_TCTI
+    sleep 1
+#    busctl --address="${DBUS_SESSION_BUS_ADDRESS}" list | grep "$tabrmd_name"
+}
+
+start_tpm2_sim_env() {
+    local sim_type=$1
+
+    start_dbusd
+
+    if [ "$sim_type" = "swtpm" ]; then
+        start_tpm2_simulator_swtpm || return 1
+        start_tpm2_abrmd swtpm || return 1
+    elif [ "$sim_type" = "ibm" ]; then
+        start_tpm2_simulator_ibm || return 1
+        start_tpm2_abrmd mssim || return 1
+    else
+        echo "invalid tpm simulator typ"
+        return 1
+    fi
+}
+
+make_check () {
+    echo "Running make check"
+    openssl version
+    tpm2_getcap properties-fixed | head -n 20
+    make check
+}
+
+function cleanup()
+{
+    pkill -P $$
+}
+trap cleanup EXIT
+
+build_tpm2_openssl() {
+    ./bootstrap
+    ./configure CC=gcc --enable-op-digest --enable-op-cipher
+    make
+}
+
+SIM_TYPE=${1:-swtpm}
+SKIP_BUILD=${2:-build}
+if [ "$SKIP_BUILD" = "skip-build" ]; then
+    echo "Skipping the build"
+else
+    build_tpm2_openssl || { echo "Compiling tpm2-openssl failed"; exit 1; }
+fi
+start_tpm2_sim_env "${SIM_TYPE}" || { echo "Starting tpm2 simulator failed ($SIM_TYPE)"; exit 1; }
+make_check || { echo "tpm2-openssl make check failed"; exit 1; }