Adding a software example in the Keystone framework
This post has been written with the help of @OussamaELmnaouri2001.
The Keystone framework provides some examples. The goal of this blogpost is to explain how we can add a new example and running it easily.
@OussamaELmnaouri2001 has a repository with some examples: https://github.com/OussamaELmnaouri2001/Keystone-Examples. In this tutorial, we will add addition example.
Requirements
It is assumed that the Keystone framework repository has been cloned on the host:
KEYSTONE_REPO=$PWD/keystone
git clone https://github.com/keystone-enclave/keystone
cd keystone
git checkout 88c49ee
git submodule update --init --recursive
cd $PWD
git clone https://github.com/OussamaELmnaouri2001/Keystone-Examples
Adding an example
We will copy the existing addition example in the Keystone repository
cd $PWD
cp -R Keystone-Examples/addition keystone/examples
If you want to copy and modify an original example from the Keystone repository, the main modification is related to the CMakeLists.txt
file included in the example directory. For instance, for the hello
example: https://github.com/keystone-enclave/keystone/blob/master/examples/hello/CMakeLists.txt
You just need to modify binary and file names to match the new example. Basically, just replace the hello
string by yours:
set(eapp_bin hello)
set(eapp_src eapp/hello.c)
set(host_bin hello-runner)
set(host_src host/host.cpp)
set(package_name "hello.ke")
set(package_script "./hello-runner hello eyrie-rt loader.bin")
set(eyrie_plugins "io_syscall linux_syscall env_setup")
Then, we need to modify a CMakeLists.txt to compile the addition as for other existing examples:
nano keystone/examples/CMakeLists.txt
@@ -35,3 +35,4 @@ add_subdirectory(hello)
add_subdirectory(hello-native)
add_subdirectory(attestation)
add_subdirectory(tests)
+add_subdirectory(addition)
Compiling the new image and running the example
cd $PWD/keystone
# Compile the new image, faster than the first compilation
make -j$(nproc)
# Running the image in QEmu
make run
In the QEmu prompt, examples are still in the original location:
$ modprobe keystone-driver
$ /usr/share/keystone/examples/addition.ke
Of course, you can debug this new example as explained in a previous post.