1*62c56f98SSadaf Ebrahimi#!/bin/sh 2*62c56f98SSadaf Ebrahimi# 3*62c56f98SSadaf Ebrahimi# Copyright The Mbed TLS Contributors 4*62c56f98SSadaf Ebrahimi# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 5*62c56f98SSadaf Ebrahimi 6*62c56f98SSadaf Ebrahimiset -e -u 7*62c56f98SSadaf Ebrahimi 8*62c56f98SSadaf Ebrahimiprogram_name="key_ladder_demo" 9*62c56f98SSadaf Ebrahimiprogram="${0%/*}/$program_name" 10*62c56f98SSadaf Ebrahimifiles_to_clean= 11*62c56f98SSadaf Ebrahimi 12*62c56f98SSadaf Ebrahimiif [ ! -e "$program" ]; then 13*62c56f98SSadaf Ebrahimi # Look for programs in the current directory and the directories above it 14*62c56f98SSadaf Ebrahimi for dir in "." ".." "../.."; do 15*62c56f98SSadaf Ebrahimi program="$dir/programs/psa/$program_name" 16*62c56f98SSadaf Ebrahimi if [ -e "$program" ]; then 17*62c56f98SSadaf Ebrahimi break 18*62c56f98SSadaf Ebrahimi fi 19*62c56f98SSadaf Ebrahimi done 20*62c56f98SSadaf Ebrahimi if [ ! -e "$program" ]; then 21*62c56f98SSadaf Ebrahimi echo "Could not find $program_name executable" 22*62c56f98SSadaf Ebrahimi 23*62c56f98SSadaf Ebrahimi echo "If building out-of-tree, this script must be run" \ 24*62c56f98SSadaf Ebrahimi "from the project build directory." 25*62c56f98SSadaf Ebrahimi exit 1 26*62c56f98SSadaf Ebrahimi fi 27*62c56f98SSadaf Ebrahimifi 28*62c56f98SSadaf Ebrahimi 29*62c56f98SSadaf Ebrahimirun () { 30*62c56f98SSadaf Ebrahimi echo 31*62c56f98SSadaf Ebrahimi echo "# $1" 32*62c56f98SSadaf Ebrahimi shift 33*62c56f98SSadaf Ebrahimi echo "+ $*" 34*62c56f98SSadaf Ebrahimi "$@" 35*62c56f98SSadaf Ebrahimi} 36*62c56f98SSadaf Ebrahimi 37*62c56f98SSadaf Ebrahimiif [ -e master.key ]; then 38*62c56f98SSadaf Ebrahimi echo "# Reusing the existing master.key file." 39*62c56f98SSadaf Ebrahimielse 40*62c56f98SSadaf Ebrahimi files_to_clean="$files_to_clean master.key" 41*62c56f98SSadaf Ebrahimi run "Generate a master key." \ 42*62c56f98SSadaf Ebrahimi "$program" generate master=master.key 43*62c56f98SSadaf Ebrahimifi 44*62c56f98SSadaf Ebrahimi 45*62c56f98SSadaf Ebrahimifiles_to_clean="$files_to_clean input.txt hello_world.wrap" 46*62c56f98SSadaf Ebrahimiecho "Here is some input. See it wrapped." >input.txt 47*62c56f98SSadaf Ebrahimirun "Derive a key and wrap some data with it." \ 48*62c56f98SSadaf Ebrahimi "$program" wrap master=master.key label=hello label=world \ 49*62c56f98SSadaf Ebrahimi input=input.txt output=hello_world.wrap 50*62c56f98SSadaf Ebrahimi 51*62c56f98SSadaf Ebrahimifiles_to_clean="$files_to_clean hello_world.txt" 52*62c56f98SSadaf Ebrahimirun "Derive the same key again and unwrap the data." \ 53*62c56f98SSadaf Ebrahimi "$program" unwrap master=master.key label=hello label=world \ 54*62c56f98SSadaf Ebrahimi input=hello_world.wrap output=hello_world.txt 55*62c56f98SSadaf Ebrahimirun "Compare the unwrapped data with the original input." \ 56*62c56f98SSadaf Ebrahimi cmp input.txt hello_world.txt 57*62c56f98SSadaf Ebrahimi 58*62c56f98SSadaf Ebrahimifiles_to_clean="$files_to_clean hellow_orld.txt" 59*62c56f98SSadaf Ebrahimi! run "Derive a different key and attempt to unwrap the data. This must fail." \ 60*62c56f98SSadaf Ebrahimi "$program" unwrap master=master.key input=hello_world.wrap output=hellow_orld.txt label=hellow label=orld 61*62c56f98SSadaf Ebrahimi 62*62c56f98SSadaf Ebrahimifiles_to_clean="$files_to_clean hello.key" 63*62c56f98SSadaf Ebrahimirun "Save the first step of the key ladder, then load it as a master key and construct the rest of the ladder." \ 64*62c56f98SSadaf Ebrahimi "$program" save master=master.key label=hello \ 65*62c56f98SSadaf Ebrahimi input=hello_world.wrap output=hello.key 66*62c56f98SSadaf Ebrahimirun "Check that we get the same key by unwrapping data made by the other key." \ 67*62c56f98SSadaf Ebrahimi "$program" unwrap master=hello.key label=world \ 68*62c56f98SSadaf Ebrahimi input=hello_world.wrap output=hello_world.txt 69*62c56f98SSadaf Ebrahimi 70*62c56f98SSadaf Ebrahimi# Cleanup 71*62c56f98SSadaf Ebrahimirm -f $files_to_clean 72