Skip to content

Commit

Permalink
add test scripts
Browse files Browse the repository at this point in the history
Add a minimal test script to validate decryption via kmstool.

Signed-off-by: Petre Eftime <[email protected]>
  • Loading branch information
Petre Eftime authored and petreeftime committed May 2, 2023
1 parent e342525 commit e1af40c
Showing 1 changed file with 61 additions and 0 deletions.
61 changes: 61 additions & 0 deletions tests/integration/test_kms.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
#!/bin/sh

# Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
# SPDX-License-Identifier: Apache-2.0.

# This script builds the current repo and runs a quick smoke test against KMS.
# Prerequisites:
# * aws-nitro-enclaves-cli and aws-nitro-enclaves-cli-devel packages installed
# * a KMS Key configured for debug mode (all zeroes)
# * docker
# * vsock-proxy running
# * nitro-enclaves-allocator with at least 1G RAM and 2 CPUs
#
# Usage:
# KMS_KEY_ARN=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab ./tests/integration/test_kms.sh

set -eu

cleanup() {
docker rmi kmstool-instance:$RAND_TAG &>/dev/null ||:
docker rmi kmstool-enclave:$RAND_TAG &>/dev/null ||:

rm -rf "$TEMP_DIR" &>/dev/null ||:

if [[ ! -z "${ENCLAVE_ID+x}" ]]; then
nitro-cli terminate-enclave --enclave-id "$ENCLAVE_ID" &>/dev/null ||:
fi
}

fail() {
echo "$(tput bold)$(tput setaf 1) $1 $(tput sgr0)"
echo "TEST: FAILED"
exit 1
}

nitro-cli --version || fail "aws-nitro-enclaves-cli not installed"
test -c /dev/nitro_enclaves || fail "not running on an instance with Nitro Enclaves enabled"
test ! -z "${KMS_KEY_ARN+x}" || fail "KMS_KEY_ARN not set"

readonly RAND_TAG=$(dd if=/dev/urandom bs=12 count=1 2>/dev/null | base64 | tr -cd "[[:alnum:]]")
readonly RAND_MSG=$(dd if=/dev/urandom bs=16 count=1 2>/dev/null | base64)
readonly TEMP_DIR=$(mktemp -d)
readonly KMS_KEY_REGION=${KMS_KEY_REGION:-us-east-1}

trap cleanup EXIT

docker build -f containers/Dockerfile.al2 --target kmstool-instance -t "kmstool-instance:$RAND_TAG" . || fail "Unable to build kmstool-instance"
docker build -f containers/Dockerfile.al2 --target kmstool-enclave -t "kmstool-enclave:$RAND_TAG" . || fail "Unable to build kmstool-enclave"

nitro-cli build-enclave --docker-uri kmstool-enclave:$RAND_TAG --output-file $TEMP_DIR/test.eif | jq . || fail "Unable to build EIF"

ENCLAVE_ID=$(nitro-cli run-enclave --eif-path $TEMP_DIR/test.eif --memory 1024 --cpu-count 2 --enclave-cid 7777 --debug-mode | jq -r .EnclaveID) || fail "Unable to start enclave"

MESSAGE="Test message: $RAND_MSG"
BASE64_MESSAGE=$(echo "$MESSAGE" | base64)

ENCRYPTED=$(aws kms encrypt --key-id "$KMS_KEY_ARN" --plaintext "$BASE64_MESSAGE" --query CiphertextBlob --output text)
docker run --network host -t kmstool-instance:$RAND_TAG bash -c "/kmstool_instance --cid 7777 '$ENCRYPTED' 2>/dev/null | grep -q '$MESSAGE'" || fail "Message could not be decrypted"


echo "TEST: SUCCESS"

0 comments on commit e1af40c

Please sign in to comment.