Initial check-in of TF-Fuzz.

Author:  Gary Morrison <gary.morrison@arm.com>
Signed-off-by:  Gary Morrison <gary.morrison@arm.com>

Change-Id: I8f739c3403bf2a2808f33c28910c7bda6aca7887
diff --git a/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/check.py b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_stdout_stderr b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_stdout_stderr
new file mode 100644
index 0000000..05de8db
--- /dev/null
+++ b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_stdout_stderr
@@ -0,0 +1,19 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to create an SST asset
+ASSET_NUMBER:  "104"
+SST-asset UID list:  "data"
+LITERAL:  "Very simple test"
+SST-create from literal data:  ""Very simple test""
+Set SST command:  ""Very simple test""
+Set command:  ""Very simple test""
+Expect pass clause:  "pass"
+Command with expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_test.c b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_test.c
new file mode 100644
index 0000000..1573156
--- /dev/null
+++ b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to create an SST asset
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to create an SST asset");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t SST_ID_104_data[] = "Very simple test";
+    static int SST_ID_104_data_size = 16;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset UID = 104 with data "Very simpl...". */
+    sst_status = psa_ps_set(104, SST_ID_104_data_size, SST_ID_104_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(104);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/template b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/template
new file mode 100644
index 0000000..7b84f11
--- /dev/null
+++ b/tools/tf_fuzz/regression/000001_set_sst_uid_data_expect_pass/template
@@ -0,0 +1,2 @@
+purpose to create an SST asset;
+set sst uid 104 data "Very simple test" expect pass;
diff --git a/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/check.py b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_stdout_stderr b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_stdout_stderr
new file mode 100644
index 0000000..da7e757
--- /dev/null
+++ b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_stdout_stderr
@@ -0,0 +1,19 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to give assets a human name
+ASSET_IDENTIFIER:  "forecast"
+SST-asset identifier list:  "data"
+LITERAL:  "sunny with a 30% chance of weather!"
+SST-create from literal data:  ""sunny with a 30% chance of weather!""
+Set SST command:  ""sunny with a 30% chance of weather!""
+Set command:  ""sunny with a 30% chance of weather!""
+Expect nothing clause:  "nothing"
+Command with expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_test.c b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_test.c
new file mode 100644
index 0000000..c382d9b
--- /dev/null
+++ b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/exp_test.c
@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to give assets a human name
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to give assets a human name");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t forecast_data[] = "sunny with a 30% chance of weather!";
+    static int forecast_data_size = 35;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "forecast," with data "sunny with...". */
+    sst_status = psa_ps_set(@@@001@@@, forecast_data_size, forecast_data,
+                            PSA_STORAGE_FLAG_********);
+    /* (No checks for this PSA call.) */
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/template b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/template
new file mode 100644
index 0000000..7292031
--- /dev/null
+++ b/tools/tf_fuzz/regression/000002_set_sst_name_data_expect_nothing/template
@@ -0,0 +1,2 @@
+purpose to give assets a human name;
+set sst name forecast data "sunny with a 30% chance of weather!" expect nothing;
diff --git a/tools/tf_fuzz/regression/000003_set_sst_name_data/check.py b/tools/tf_fuzz/regression/000003_set_sst_name_data/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000003_set_sst_name_data/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_stdout_stderr b/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_stdout_stderr
new file mode 100644
index 0000000..1dbe62d
--- /dev/null
+++ b/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_stdout_stderr
@@ -0,0 +1,18 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show that TF-Fuzz can infer results
+ASSET_IDENTIFIER:  "jonathan"
+SST-asset identifier list:  "data"
+LITERAL:  "I am the man"
+SST-create from literal data:  ""I am the man""
+Set SST command:  ""I am the man""
+Set command:  ""I am the man""
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_test.c b/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_test.c
new file mode 100644
index 0000000..ea88a13
--- /dev/null
+++ b/tools/tf_fuzz/regression/000003_set_sst_name_data/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show that TF-Fuzz can infer results
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show that TF-Fuzz can infer results");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t jonathan_data[] = "I am the man";
+    static int jonathan_data_size = 12;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "jonathan," with data "I am the m...". */
+    sst_status = psa_ps_set(@@@001@@@, jonathan_data_size, jonathan_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000003_set_sst_name_data/template b/tools/tf_fuzz/regression/000003_set_sst_name_data/template
new file mode 100644
index 0000000..53b8897
--- /dev/null
+++ b/tools/tf_fuzz/regression/000003_set_sst_name_data/template
@@ -0,0 +1,2 @@
+purpose to show that TF-Fuzz can infer results;
+set sst name jonathan data "I am the man";
diff --git a/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/check.py b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_stdout_stderr b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_stdout_stderr
new file mode 100644
index 0000000..c719302
--- /dev/null
+++ b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_stdout_stderr
@@ -0,0 +1,17 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show how to randomize data
+ASSET_IDENTIFIER:  "gibberish"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_test.c b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_test.c
new file mode 100644
index 0000000..f4743ea
--- /dev/null
+++ b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show how to randomize data
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show how to randomize data");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t gibberish_data[] = "@@002@10@@********";
+    static int gibberish_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "gibberish," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, gibberish_data_size, gibberish_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/template b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/template
new file mode 100644
index 0000000..912c23a
--- /dev/null
+++ b/tools/tf_fuzz/regression/000004_set_sst_name_rand_data/template
@@ -0,0 +1,2 @@
+purpose to show how to randomize data;
+set sst name gibberish data *;
diff --git a/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/check.py b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_stdout_stderr b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_stdout_stderr
new file mode 100644
index 0000000..466f250
--- /dev/null
+++ b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_stdout_stderr
@@ -0,0 +1,16 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show how to randomize name and data
+SST-asset random identifier:  "*"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_test.c b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_test.c
new file mode 100644
index 0000000..238af07
--- /dev/null
+++ b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show how to randomize name and data
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show how to randomize name and data");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t @@@003@@@_data[] = "@@002@10@@********";
+    static int @@@003@@@_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "@@@003@@@," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, @@@003@@@_data_size, @@@003@@@_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/template b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/template
new file mode 100644
index 0000000..5290f27
--- /dev/null
+++ b/tools/tf_fuzz/regression/000005_set_sst_rand_name_rand_data/template
@@ -0,0 +1,2 @@
+purpose to show how to randomize name and data;
+set sst name * data *;
diff --git a/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/check.py b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_stdout_stderr b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_stdout_stderr
new file mode 100644
index 0000000..1f090d1
--- /dev/null
+++ b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_stdout_stderr
@@ -0,0 +1,21 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show a nice party trick
+ASSET_IDENTIFIER:  "john"
+ASSET_IDENTIFIER:  "paul"
+ASSET_IDENTIFIER:  "george"
+ASSET_IDENTIFIER:  "and"
+ASSET_IDENTIFIER:  "ringo"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_test.c b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_test.c
new file mode 100644
index 0000000..3950c58
--- /dev/null
+++ b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/exp_test.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show a nice party trick
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show a nice party trick");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t john_data[] = "@@012@10@@********";
+    static int john_data_size = \d+;
+    static uint8_t paul_data[] = "@@013@10@@********";
+    static int paul_data_size = \d+;
+    static uint8_t george_data[] = "@@014@10@@********";
+    static int george_data_size = \d+;
+    static uint8_t and_data[] = "@@015@10@@********";
+    static int and_data_size = \d+;
+    static uint8_t ringo_data[] = "@@016@10@@********";
+    static int ringo_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "john," with data "@@012@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, john_data_size, john_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset "paul," with data "@@013@10@@...". */
+    sst_status = psa_ps_set(@@@002@@@, paul_data_size, paul_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset "george," with data "@@014@10@@...". */
+    sst_status = psa_ps_set(@@@003@@@, george_data_size, george_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset "and," with data "@@015@10@@...". */
+    sst_status = psa_ps_set(@@@004@@@, and_data_size, and_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset "ringo," with data "@@016@10@@...". */
+    sst_status = psa_ps_set(@@@005@@@, ringo_data_size, ringo_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(@@@002@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(@@@003@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(@@@004@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(@@@005@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/template b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/template
new file mode 100644
index 0000000..2e86d75
--- /dev/null
+++ b/tools/tf_fuzz/regression/000006_set_sst_multi_name_rand_data/template
@@ -0,0 +1,2 @@
+purpose to show a nice party trick;
+set sst name john paul george and ringo data *;
diff --git a/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/check.py b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_stdout_stderr b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_stdout_stderr
new file mode 100644
index 0000000..226833a
--- /dev/null
+++ b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_stdout_stderr
@@ -0,0 +1,22 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  same with UIDs
+ASSET_NUMBER:  "17"
+ASSET_NUMBER:  "19"
+ASSET_NUMBER:  "24"
+ASSET_NUMBER:  "31"
+ASSET_NUMBER:  "34"
+ASSET_NUMBER:  "41"
+SST-asset UID list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_test.c b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_test.c
new file mode 100644
index 0000000..98a2c17
--- /dev/null
+++ b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/exp_test.c
@@ -0,0 +1,146 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     same with UIDs
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test same with UIDs");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t SST_ID_17_data[] = "@@012@10@@********";
+    static int SST_ID_17_data_size = \d+;
+    static uint8_t SST_ID_19_data[] = "@@013@10@@********";
+    static int SST_ID_19_data_size = \d+;
+    static uint8_t SST_ID_24_data[] = "@@014@10@@********";
+    static int SST_ID_24_data_size = \d+;
+    static uint8_t SST_ID_31_data[] = "@@015@10@@********";
+    static int SST_ID_31_data_size = \d+;
+    static uint8_t SST_ID_34_data[] = "@@016@10@@********";
+    static int SST_ID_34_data_size = \d+;
+    static uint8_t SST_ID_41_data[] = "@@017@10@@********";
+    static int SST_ID_41_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset UID = 17 with data "@@012@10@@...". */
+    sst_status = psa_ps_set(17, SST_ID_17_data_size, SST_ID_17_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset UID = 19 with data "@@013@10@@...". */
+    sst_status = psa_ps_set(19, SST_ID_19_data_size, SST_ID_19_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset UID = 24 with data "@@014@10@@...". */
+    sst_status = psa_ps_set(24, SST_ID_24_data_size, SST_ID_24_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset UID = 31 with data "@@015@10@@...". */
+    sst_status = psa_ps_set(31, SST_ID_31_data_size, SST_ID_31_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset UID = 34 with data "@@016@10@@...". */
+    sst_status = psa_ps_set(34, SST_ID_34_data_size, SST_ID_34_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    /* Creating SST asset UID = 41 with data "@@017@10@@...". */
+    sst_status = psa_ps_set(41, SST_ID_41_data_size, SST_ID_41_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(17);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(19);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(24);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(31);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(34);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+    psa_ps_remove(41);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/template b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/template
new file mode 100644
index 0000000..903027e
--- /dev/null
+++ b/tools/tf_fuzz/regression/000007_set_sst_multi_uid_rand_data/template
@@ -0,0 +1,2 @@
+purpose same with UIDs;
+set sst uid 17 19 24 31 34 41 data *;
diff --git a/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/check.py b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_stdout_stderr b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_stdout_stderr
new file mode 100644
index 0000000..eeed4bc
--- /dev/null
+++ b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_stdout_stderr
@@ -0,0 +1,25 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to create and show an asset
+ASSET_IDENTIFIER:  "snortwaggle"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "snortwaggle"
+SST-asset identifier list:  "check"
+LITERAL:  "almost certainly not *this*"
+SST-read check against literal:  "almost certainly not *this*"
+Read SST command:  ""almost certainly not *this*""
+Read command:  ""almost certainly not *this*""
+Command with no expect:  ";"
+Lines:  Line number 4.
+Lines:  Line number 4.
+Lines:  Line number 4.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_test.c b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_test.c
new file mode 100644
index 0000000..0d304f8
--- /dev/null
+++ b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/exp_test.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to create and show an asset
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to create and show an asset");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t snortwaggle_data[] = "@@002@10@@********";
+    static int snortwaggle_data_size = \d+;
+    static uint8_t snortwaggle_exp_data[] = "almost certainly not *this*";
+    static uint8_t snortwaggle_act_data[2048] = "********";
+    static size_t snortwaggle_act_length = 0;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "snortwaggle," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, snortwaggle_data_size, snortwaggle_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    sst_status = psa_ps_get(@@@001@@@, 0, 0, snortwaggle_act_data
+                            &snortwaggle_act_length);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_get() expected PSA_SUCCESS.");
+        return;
+    }
+    /* Check that the data is correct */
+    if (tfm_memcmp(snortwaggle_act_data, snortwaggle_exp_data, 27) != 0) {
+        TEST_FAIL("Read data should be equal to result data");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/template b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/template
new file mode 100644
index 0000000..adaacfc
--- /dev/null
+++ b/tools/tf_fuzz/regression/000008_set_sst_name_rand_data_read_check_wrong/template
@@ -0,0 +1,3 @@
+purpose to create and show an asset;
+set sst name snortwaggle data *;
+read sst name snortwaggle check "almost certainly not *this*";
diff --git a/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/check.py b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_stdout_stderr b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_stdout_stderr
new file mode 100644
index 0000000..5f3d60b
--- /dev/null
+++ b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_stdout_stderr
@@ -0,0 +1,33 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to dump to a variable or to the log
+ASSET_IDENTIFIER:  "greebledorf"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "greebledorf"
+SST-asset identifier list:  "check"
+IDENTIFIER:  "a_variable"
+SST-read-arguments variable name:  "a_variable"
+SST-read check against variable:  "a_variable"
+Read SST command:  "a_variable"
+Read command:  "a_variable"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "greebledorf"
+SST-asset identifier list:  "print"
+SST-read log to test log:  "print"
+Read SST command:  "print"
+Read command:  "print"
+Command with no expect:  ";"
+Lines:  Line number 5.
+Lines:  Line number 5.
+Lines:  Line number 5.
+Lines:  Line number 5.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_test.c b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_test.c
new file mode 100644
index 0000000..4c5b171
--- /dev/null
+++ b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/exp_test.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to dump to a variable or to the log
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to dump to a variable or to the log");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t greebledorf_data[] = "@@002@10@@********";
+    static int greebledorf_data_size = \d+;
+    static uint8_t a_variable[] = "";
+    static uint8_t greebledorf_act_data[2048] = "********";
+    static int greebledorf_act_length = 0;
+    static uint8_t greebledorf_act_data[2048] = "********";
+    static int greebledorf_act_length = 0;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "greebledorf," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, greebledorf_data_size, greebledorf_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    sst_status = psa_ps_get(@@@001@@@, 0, 0, greebledorf_act_data,
+                            &greebledorf_act_length);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_get() expected PSA_SUCCESS.");
+        return;
+    }
+    /* Check that the data is correct */
+    if (tfm_memcmp(greebledorf_act_data, a_variable, 0) != 0) {
+        TEST_FAIL("Read data should be equal to result data");
+        return;
+    }
+
+    sst_status = psa_ps_get(@@@001@@@, 0, 0, greebledorf_act_data,
+                            &greebledorf_act_length);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_get() expected PSA_SUCCESS.");
+        return;
+    }
+    TEST_LOG(greebledorf_act_data);
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/template b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/template
new file mode 100644
index 0000000..72cc269
--- /dev/null
+++ b/tools/tf_fuzz/regression/000009_set_sst_name_rand_data_read_check_var_read_print/template
@@ -0,0 +1,4 @@
+purpose to dump to a variable or to the log;
+set sst name greebledorf data *;
+read sst name greebledorf check a_variable;
+read sst name greebledorf print;
diff --git a/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/check.py b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_stdout_stderr b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_stdout_stderr
new file mode 100644
index 0000000..ba723fe
--- /dev/null
+++ b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_stdout_stderr
@@ -0,0 +1,18 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show what happens when you 'read' a non-existent asset
+ASSET_IDENTIFIER:  "napoleon"
+SST-asset identifier list:  "check"
+LITERAL:  "this won't work"
+SST-read check against literal:  "this won't work"
+Read SST command:  ""this won't work""
+Read command:  ""this won't work""
+Command with no expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_test.c b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_test.c
new file mode 100644
index 0000000..7916d41
--- /dev/null
+++ b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show what happens when you 'read' a non-existent asset
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show what happens when you 'read' a non-existent asset");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t napoleon_exp_data[] = "this won't work";
+    static uint8_t napoleon_act_data[2048] = "********";
+    static int napoleon_act_length = 0;
+
+
+    /* PSA calls to test: */
+
+    sst_status = psa_ps_get(********, 0, 0, napoleon_act_data
+                            &napoleon_act_length);
+    if (sst_status != PSA_ERROR_DOES_NOT_EXIST) {
+        TEST_FAIL("psa_ps_get() expected PSA_ERROR_DOES_NOT_EXIST.");
+        return;
+    }
+    /* Check that the data is correct */
+    if (tfm_memcmp(napoleon_act_data, napoleon_exp_data, ********) != 0) {
+        TEST_FAIL("Read data should be equal to result data");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/template b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/template
new file mode 100644
index 0000000..3e70099
--- /dev/null
+++ b/tools/tf_fuzz/regression/000010_read_nonexistent_sst_check_string/template
@@ -0,0 +1,2 @@
+purpose to show what happens when you 'read' a non-existent asset;
+read sst name napoleon check "this won't work";
diff --git a/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/check.py b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_stdout_stderr b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_stdout_stderr
new file mode 100644
index 0000000..018ae91
--- /dev/null
+++ b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_stdout_stderr
@@ -0,0 +1,19 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to illustrate that you can override TF-Fuzz's expected result
+ASSET_IDENTIFIER:  "napoleon"
+SST-asset identifier list:  "check"
+LITERAL:  "this won't work"
+SST-read check against literal:  "this won't work"
+Read SST command:  ""this won't work""
+Read command:  ""this won't work""
+Expect pass clause:  "pass"
+Command with expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_test.c b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_test.c
new file mode 100644
index 0000000..277f7c3
--- /dev/null
+++ b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to illustrate that you can override TF-Fuzz's expected result
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to illustrate that you can override TF-Fuzz's expected result");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t napoleon_exp_data[] = "this won't work";
+    static uint8_t napoleon_act_data[2048] = "********";
+    static int napoleon_act_length = 0;
+
+
+    /* PSA calls to test: */
+
+    sst_status = psa_ps_get(********, 0, 0, napoleon_act_data,
+                            &napoleon_act_length);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_get() expected PSA_SUCCESS.");
+        return;
+    }
+    /* Check that the data is correct */
+    if (tfm_memcmp(napoleon_act_data, napoleon_exp_data, ********) != 0) {
+        TEST_FAIL("Read data should be equal to result data");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/template b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/template
new file mode 100644
index 0000000..5fdd0fc
--- /dev/null
+++ b/tools/tf_fuzz/regression/000011_read_nonexistent_sst_check_string_expect_pass/template
@@ -0,0 +1,2 @@
+purpose to illustrate that you can override TF-Fuzz's expected result;
+read sst name napoleon check "this won't work" expect pass;
diff --git a/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/check.py b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_stdout_stderr b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_stdout_stderr
new file mode 100644
index 0000000..6e9d933
--- /dev/null
+++ b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_stdout_stderr
@@ -0,0 +1,20 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to more-specifically override TF-Fuzz's expected result
+ASSET_IDENTIFIER:  "napoleon"
+SST-asset identifier list:  "check"
+LITERAL:  "this won't work"
+SST-read check against literal:  "this won't work"
+Read SST command:  ""this won't work""
+Read command:  ""this won't work""
+IDENTIFIER:  "PSA_ERROR_GENERIC_ERROR"
+Expect error clause:  "PSA_ERROR_GENERIC_ERROR"
+Command with expect:  ";"
+Lines:  Line number 3.
+Lines:  Line number 3.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_test.c b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_test.c
new file mode 100644
index 0000000..6e66353
--- /dev/null
+++ b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/exp_test.c
@@ -0,0 +1,71 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to more-specifically override TF-Fuzz's expected result
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to more-specifically override TF-Fuzz's expected result");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t napoleon_exp_data[] = "this won't work";
+    static uint8_t napoleon_act_data[2048] = "********";
+    static int napoleon_act_length = 0;
+
+
+    /* PSA calls to test: */
+
+    sst_status = psa_ps_get(********, 0, 0, napoleon_act_data,
+                            &napoleon_act_length);
+    if (sst_status != PSA_ERROR_GENERIC_ERROR) {
+        TEST_FAIL("psa_ps_get() expected PSA_ERROR_GENERIC_ERROR.");
+        return;
+    }
+    /* Check that the data is correct */
+    if (tfm_memcmp(napoleon_act_data, napoleon_exp_data, ********) != 0) {
+        TEST_FAIL("Read data should be equal to result data");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/template b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/template
new file mode 100644
index 0000000..c7825c5
--- /dev/null
+++ b/tools/tf_fuzz/regression/000012_read_nonexistent_sst_check_string_expect_other/template
@@ -0,0 +1,2 @@
+purpose to more-specifically override TF-Fuzz's expected result;
+read sst name napoleon check "this won't work" expect PSA_ERROR_GENERIC_ERROR;
diff --git a/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/check.py b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_stdout_stderr b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_stdout_stderr
new file mode 100644
index 0000000..4ef68d2
--- /dev/null
+++ b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_stdout_stderr
@@ -0,0 +1,31 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to illustrate deleting assets
+ASSET_IDENTIFIER:  "george"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "george"
+SST-asset identifier list:  ";"
+SST-remove arguments:  ";"
+Remove SST command:  ";"
+Remove command:  ";"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "george"
+SST-asset identifier list:  ";"
+SST-remove arguments:  ";"
+Remove SST command:  ";"
+Remove command:  ";"
+Command with no expect:  ";"
+Lines:  Line number 5.
+Lines:  Line number 5.
+Lines:  Line number 5.
+Lines:  Line number 5.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_test.c b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_test.c
new file mode 100644
index 0000000..99b68e3
--- /dev/null
+++ b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/exp_test.c
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to illustrate deleting assets
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to illustrate deleting assets");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t george_data[] = "@@002@10@@********";
+    static int george_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "george," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, george_data_size, george_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    sst_status = psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_remove() expected PSA_SUCCESS.");
+        return;
+    }
+
+    sst_status = psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_ERROR_DOES_NOT_EXIST) {
+        TEST_FAIL("psa_ps_remove() expected PSA_ERROR_DOES_NOT_EXIST.");
+        return;
+    }
+
+
+    /* Removing assets left over from testing: */
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/template b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/template
new file mode 100644
index 0000000..467ae6d
--- /dev/null
+++ b/tools/tf_fuzz/regression/000013_set_sst_name_rand_data_remove_twice/template
@@ -0,0 +1,4 @@
+purpose to illustrate deleting assets;
+set sst name george data *;
+remove sst name george;
+remove sst name george;
diff --git a/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/check.py b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/check.py
new file mode 100644
index 0000000..a215e77
--- /dev/null
+++ b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/check.py
@@ -0,0 +1,17 @@
+#!/usr/bin/env python
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+import sys, os
+
+def main():
+    if len(sys.argv) != 4:
+        print >> sys.stderr, "%s requires 3 command-line arguments. Exiting." % sys.argv[0]
+        sys.exit(1)
+
+    #print "Command line args: %s" % (', '.join(sys.argv[1:4]))
+    sys.exit(0)
+
+if __name__ == "__main__":
+    main()
diff --git a/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_stdout_stderr b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_stdout_stderr
new file mode 100644
index 0000000..25edad0
--- /dev/null
+++ b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_stdout_stderr
@@ -0,0 +1,24 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to remove something that doesn't exist
+ASSET_IDENTIFIER:  "george"
+SST-asset identifier list:  "data"
+SST-create from random data
+Set SST command:  "*"
+Set command:  "*"
+Command with no expect:  ";"
+ASSET_IDENTIFIER:  "ringo"
+SST-asset identifier list:  ";"
+SST-remove arguments:  ";"
+Remove SST command:  ";"
+Remove command:  ";"
+Command with no expect:  ";"
+Lines:  Line number 4.
+Lines:  Line number 4.
+Lines:  Line number 4.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_test.c b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_test.c
new file mode 100644
index 0000000..c66e70d
--- /dev/null
+++ b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/exp_test.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to remove something that doesn't exist
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_status_t sst_status;
+
+    /* To prevent unused variable warning, as the variable might not be used
+     * in this testcase
+     */
+    (void)sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to remove something that doesn't exist");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t george_data[] = "@@002@10@@********";
+    static int george_data_size = \d+;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "george," with data "@@002@10@@...". */
+    sst_status = psa_ps_set(@@@001@@@, george_data_size, george_data,
+                            PSA_STORAGE_FLAG_********);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_SUCCESS.");
+        return;
+    }
+
+    sst_status = psa_ps_remove(********);
+    if (sst_status != PSA_ERROR_DOES_NOT_EXIST) {
+        TEST_FAIL("psa_ps_remove() expected PSA_ERROR_DOES_NOT_EXIST.");
+        return;
+    }
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion.");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/template b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/template
new file mode 100644
index 0000000..5b9485c
--- /dev/null
+++ b/tools/tf_fuzz/regression/000014_set_sst_name_rand_data_remove_other/template
@@ -0,0 +1,3 @@
+purpose to remove something that doesn't exist;
+set sst name george data *;
+remove sst name ringo;
diff --git a/tools/tf_fuzz/regression/README b/tools/tf_fuzz/regression/README
new file mode 100644
index 0000000..d061dba
--- /dev/null
+++ b/tools/tf_fuzz/regression/README
@@ -0,0 +1,135 @@
+.../tf_fuzz/tf_fuzz_regression directory contents:
+
+ 000001_set_sst_uid_data_expect_pass
+ 000002_set_sst_name_data_expect_nothing
+ 000003_set_sst_name_data
+ 000004_set_sst_name_rand_data
+ 000005_set_sst_rand_name_rand_data
+ 000006_set_sst_multi_name_rand_data
+ 000007_set_sst_multi_uid_rand_data
+ 000008_set_sst_name_rand_data_read_check_wrong
+ 000009_set_sst_name_rand_data_read_check_var_read_print
+ 000010_read_nonexistent_sst_check_string
+ 000011_read_nonexistent_sst_check_string_expect_pass
+ 000012_read_nonexistent_sst_check_string_expect_other
+ 000013_set_sst_name_rand_data_remove_twice
+ 000014_set_sst_name_rand_data_remove_other
+ add_these_tests
+ README
+ regress
+ regress_lib
+
+--------------------------------------------------------------------------------
+
+This is the beginnings of a regression suite for TF-Fuzz.  That is, tests to
+make sure that tf_fuzz is still functioning properly after making changes.
+
+This is neither complete nor working yet, but is close to its first-pass
+implementation.
+
+Here's the basic scheme of it all:
+
+*  "bash regress" from this directory runs regression.  It will fail with an
+   error if a problem is found.  If it runs to completion, then regression has
+   passed.
+
+*  Each test is in its own sub-directory containing these files, by name (always
+   same name):
+
+  *  template:  The test-template file to be run though the TF-Fuzz under test,
+     here called "the DUT TF-Fuzz" here.
+
+  *  exp_stdout_stderr:  The *expected*, combined stdout and stderr from running
+     TF-Fuzz in verbose mode (-v).  This file contains wildcard expressions to
+     be checked (more on that below).
+
+  *  exp_test.c:  The *expected* output C code.  This file also contains
+     wildcard expressions to be resolved against the DUT TF-Fuzz output (again,
+     more on that below).
+
+  *  stdout_stderr (if present):  The combined stdout and stderr from running
+     the DUT TF-Fuzz in verbose mode (-v), during regression testing.
+
+  *  test.c (if present):  The output C code generated from running the DUT
+     TF-Fuzz in verbose mode (-v), during regression testing.
+
+  *  diff_stdout_stderr (if present):  The "diff" of stdout_stderr against
+     exp_stdout_stderr.  As mentioned above, there are wildcards in some lines
+     of exp_stdout_stderr that have to be resolved against stdout_stderr.
+
+  *  diff_test.c (if present):  The "diff" of test.c against exp_test.c.  As
+     mentioned above, there are wildcards in some lines of exp_test.c that have
+     to be resolved against test.c.
+
+  *  check.py:  This Python script doesn't yet, but will, resolve the wildcard
+     differences in diff_stdout_stderr and diff_test.c.  Each test directory
+     has its own script customized to the needs of that particular test, but
+     they all draw from functions in the regress_lib directory.
+
+To explain how check.py checks -- or will check! -- a regression test, consider
+one example of the ./000005_set_sst_rand_name_rand_data/diff_test.c file, below:
+
+    45,46c45,46
+    <     static uint8_t gibberish_data[] = "Gof jav ofdomviv wazauyicef zoc xut rus sekneiqiv eidzai yefrabxiyob abjie pah jashui ziuven qetuvraqwiu omwid xenmav fipwiy meftofc.";
+    <     int gibberish_data_size = 133;
+    ---
+    >     static uint8_t gibberish_data[] = "@@002@10@@********";
+    >     int gibberish_data_size = ********;
+    51,52c51,52
+    <     /* Creating SST asset "gibberish," with data "Gof jav of...". */
+    <     sst_status = psa_ps_set(8617, gibberish_data_size, gibberish_data, PSA_PS_FLAG_NONE);
+    ---
+    >     /* Creating SST asset "gibberish," with data "@@002@10@@...". */
+    >     sst_status = psa_ps_set(@@@001@@@, gibberish_data_size, gibberish_data, PSA_PS_FLAG_********);
+    60c60
+    <     psa_ps_remove(8617);
+    ---
+    >     psa_ps_remove(@@@001@@@);
+
+So, by this process, a simple "diff" itself checks the vast majority of the
+correctness of the result.  check.py has only to resolve the wildcards, and in
+the process will also immediately see cases where "diff" discovered disparities.
+
+The wildcards in the exp_stdout_stderr and exp_test.c files are of three basic
+natures, using the examples shown above (please reference them above to
+clearly understand the ideas here):
+
+  ******** (exactly 8 *s):
+      This denotes any pattern of characters, until the expected and actual
+      character streams re-converge (sync up) again.  The characters in the
+      output from stdout_stderr or test.c from the DUT TF-Fuzz, that
+      correspond to the ******** in the exp_stdout_stderr or exp_test.c files
+      are *not* checked;  anything in the output from the DUT TF-Fuzz at this
+      position is acceptable.
+
+  @@@001@@@ ("@@@", a pattern number, "@@@"):
+      This denotes a particular pattern of characters, until the expected and
+      actual character streams re-sync again.  The important thing, however,
+      is that what this wildcard stands for *must be consistent* throughout the
+      comparison!  In this case above, @@@001@@@ in the exp_test.c must consis-
+      tently correspond to "8617" everywhere throughout the test.c file.  The
+      number between the two "@@@"s in the wildcard designates which pattern
+      must consistently match.
+
+  @@002@10@@ ("@@", a pattern number, "@", a pattern size, "@@"):
+      This is a slight variant upon the previous wildcard, in which a specific
+      match length is required.  In lines 45 and 46 above, random data generated
+      consists of 10 characters (thus the ...@10@@ in the wildcard) "Gof jav of"
+      followed by other characters we don't care about;  they can be anything.
+      Thus "@@002@10@@********" in line 45 of exp_test.c:  the "@@002@10@@"
+      denotes a pattern number 002 for a length of 10 characters that must match
+      "Gof jav of" in this case, followed by some arbitrary number of characters
+      we don't care about, thus ******** in exp_test.c, line 45.
+
+After the check.py capability -- resolving these wildcards -- for this purpose
+is fleshed out, we shall have to figure out how to address "shuffle" and
+"2 to 5 of {}" randomizations.
+
+--------------------------------------------------------------------------------
+
+The add_these_tests directory contains regression-test information of the above
+nature that the regression framework is not currently able to address.
+
+--------------
+
+*Copyright (c) 2019-2020, Arm Limited. All rights reserved.*
diff --git a/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_stdout_stderr b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_stdout_stderr
new file mode 100644
index 0000000..6bfbee2
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_stdout_stderr
@@ -0,0 +1,28 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show a more-interesting removal case
+ASSET_IDENTIFIER:  "president"
+ASSET_IDENTIFIER:  "george"
+ASSET_IDENTIFIER:  "herbert"
+ASSET_IDENTIFIER:  "walker"
+ASSET_IDENTIFIER:  "bush"
+SST-asset identifier list:  "data"
+LITERAL:  "read my lips"
+SST-create from literal data:  ""read my lips""
+Set SST command:  ""read my lips""
+Set command:  ""read my lips""
+Command with no expect:  ";"
+SST-asset random active:  "active"
+SST-remove arguments:  "active"
+Remove SST command:  "active"
+Remove command:  "active"
+Command with no expect:  ";"
+Lines:  Line number 4.
+Lines:  Line number 4.
+Lines:  Line number 4.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_test.c b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_test.c
new file mode 100644
index 0000000..2d6e9e8
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/exp_test.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show a more-interesting removal case
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+/* For now, just a single test_result_t struct is sufficient.*/
+static struct test_result_t ret;
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_ps_status_t sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show a more-interesting removal case");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t president_data[] = "read my lips";
+    int president_data_size = 12;
+    static uint8_t george_data[] = "read my lips";
+    int george_data_size = 12;
+    static uint8_t herbert_data[] = "read my lips";
+    int herbert_data_size = 12;
+    static uint8_t walker_data[] = "read my lips";
+    int walker_data_size = 12;
+    static uint8_t bush_data[] = "read my lips";
+    int bush_data_size = 12;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "president," with data "read my li...". */
+    sst_status = psa_ps_set(@@@001@@@, president_data_size, president_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "george," with data "read my li...". */
+    sst_status = psa_ps_set(5517, george_data_size, george_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "herbert," with data "read my li...". */
+    sst_status = psa_ps_set(4661, herbert_data_size, herbert_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "walker," with data "read my li...". */
+    sst_status = psa_ps_set(3441, walker_data_size, walker_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "bush," with data "read my li...". */
+    sst_status = psa_ps_set(5446, bush_data_size, bush_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    sst_status = psa_ps_remove(5517);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_remove() expected PSA_PS_SUCCESS, got #%d", (int) sst_status);
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(@@@001@@@);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+    psa_ps_remove(4661);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+    psa_ps_remove(3441);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+    psa_ps_remove(5446);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/template b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/template
new file mode 100644
index 0000000..613439e
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000015_set_sst_multi_name_remove_rand_active/template
@@ -0,0 +1,3 @@
+purpose to show a more-interesting removal case;
+set sst name president george herbert walker bush data "read my lips";
+remove sst *active;  // remove *some* active asset
diff --git a/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_stdout_stderr b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_stdout_stderr
new file mode 100644
index 0000000..fea4857
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_stdout_stderr
@@ -0,0 +1,46 @@
+Trusted Firmware Fuzzer (TF-Fuzz) starting...
+
+Info:  random seed was not specified.
+
+Using seed value of \d+ \(0x[a-f\d]+\).
+Purpose line:  to show a more-interesting removal case
+ASSET_IDENTIFIER:  "president"
+ASSET_IDENTIFIER:  "george"
+ASSET_IDENTIFIER:  "herbert"
+ASSET_IDENTIFIER:  "walker"
+ASSET_IDENTIFIER:  "bush"
+SST-asset identifier list:  "data"
+LITERAL:  "no new taxes"
+SST-create from literal data:  ""no new taxes""
+Set SST command:  ""no new taxes""
+Set command:  ""no new taxes""
+Command with no expect:  ";"
+SST-asset random active:  "active"
+SST-remove arguments:  "active"
+Remove SST command:  "active"
+Remove command:  "active"
+Command with no expect:  ";"
+SST-asset random active:  "active"
+SST-remove arguments:  "active"
+Remove SST command:  "active"
+Remove command:  "active"
+Command with no expect:  ";"
+SST-asset random active:  "active"
+SST-remove arguments:  "active"
+Remove SST command:  "active"
+Remove command:  "active"
+Command with no expect:  ";"
+SST-asset random deleted:  "deleted"
+SST-remove arguments:  "deleted"
+Remove SST command:  "deleted"
+Remove command:  "deleted"
+Command with no expect:  ";"
+Lines:  Line number 7.
+Lines:  Line number 7.
+Lines:  Line number 7.
+Lines:  Line number 7.
+Lines:  Line number 7.
+Lines:  Line number 7.
+Writing test file, test.c.
+
+TF-Fuzz test generation complete.
diff --git a/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_test.c b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_test.c
new file mode 100644
index 0000000..c4ac4f3
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/exp_test.c
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/*
+ * Test purpose:
+ *     to show a more-interesting removal case
+ *
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <time.h>
+#include <string.h>
+#include <stdint.h>
+
+#include "../sst/non_secure/ns_test_helpers.h"
+#include "psa/protected_storage.h"
+#include "test/framework/test_framework_helpers.h"
+#include "crypto_tests_common.h"
+#include "tfm_memory_utils.h"
+/* For now, just a single test_result_t struct is sufficient.*/
+static struct test_result_t ret;
+
+/* This is not yet right for how to run a test;  need to register tests, etc. */
+
+void test_thread (struct test_result_t *ret) {
+    psa_status_t crypto_status;  // result from Crypto calls
+    psa_ps_status_t sst_status;
+
+    crypto_status = psa_crypto_init();
+    if (crypto_status != PSA_SUCCESS) {
+        TEST_FAIL("Could not initialize Crypto.");
+        return;
+    }
+
+    TEST_LOG("Test to show a more-interesting removal case");
+
+
+    /* Variables (etc.) to initialize and check PSA assets: */
+    static uint8_t president_data[] = "no new taxes";
+    int president_data_size = 12;
+    static uint8_t george_data[] = "no new taxes";
+    int george_data_size = 12;
+    static uint8_t herbert_data[] = "no new taxes";
+    int herbert_data_size = 12;
+    static uint8_t walker_data[] = "no new taxes";
+    int walker_data_size = 12;
+    static uint8_t bush_data[] = "no new taxes";
+    int bush_data_size = 12;
+
+
+    /* PSA calls to test: */
+
+    /* Creating SST asset "president," with data "no new tax...". */
+    sst_status = psa_ps_set(4713, president_data_size, president_data,
+                            PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "george," with data "no new tax...". */
+    sst_status = psa_ps_set(5517, george_data_size, george_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "herbert," with data "no new tax...". */
+    sst_status = psa_ps_set(4661, herbert_data_size, herbert_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "walker," with data "no new tax...". */
+    sst_status = psa_ps_set(3441, walker_data_size, walker_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    /* Creating SST asset "bush," with data "no new tax...". */
+    sst_status = psa_ps_set(5446, bush_data_size, bush_data, PSA_PS_FLAG_WRITE_ONCE);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_set() expected PSA_PS_SUCCESS, got #%d, (int) sst_status);
+        return;
+    }
+
+    sst_status = psa_ps_remove(5517);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_remove() expected PSA_PS_SUCCESS, got #%d", (int) sst_status);
+    }
+
+    sst_status = psa_ps_remove(4713);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_remove() expected PSA_PS_SUCCESS, got #%d", (int) sst_status);
+    }
+
+    sst_status = psa_ps_remove(3441);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("psa_ps_remove() expected PSA_PS_SUCCESS, got #%d", (int) sst_status);
+    }
+
+    sst_status = psa_ps_remove(3441);
+    if (sst_status != PSA_PS_ERROR_UID_NOT_FOUND) {
+        TEST_FAIL("psa_ps_remove() expected PSA_PS_ERROR_UID_NOT_FOUND, got #%d", (int) sst_status);
+    }
+
+
+    /* Removing assets left over from testing: */
+    psa_ps_remove(4661);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+    psa_ps_remove(5446);
+    if (sst_status != PSA_PS_SUCCESS) {
+        TEST_FAIL("Failed to tear down an SST asset upon test completion!");
+        return;
+    }
+
+    /* Test completed */
+    ret->val = TEST_PASSED;
+}
diff --git a/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/template b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/template
new file mode 100644
index 0000000..e7a21b3
--- /dev/null
+++ b/tools/tf_fuzz/regression/add_these_tests/000016_set_sst_multi_name_remove_multi_rand_active_remove_rand_deleted/template
@@ -0,0 +1,6 @@
+purpose to show a more-interesting removal case;
+set sst name president george herbert walker bush data "no new taxes";
+remove sst *active;  // remove *some* active asset
+remove sst *active;  // remove *some other* active asset
+remove sst *active;  // remove *yet another* active asset
+remove sst *deleted;  // attempt to remove some asset that's already been removed
diff --git a/tools/tf_fuzz/regression/regress b/tools/tf_fuzz/regression/regress
new file mode 100644
index 0000000..ff51ba2
--- /dev/null
+++ b/tools/tf_fuzz/regression/regress
@@ -0,0 +1,18 @@
+# Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+echo
+echo TF-Fuzz Regression Testing
+echo
+for reg_test in `ls -F | grep \/$ | grep -v add_these_tests | grep -v regress_lib`; do
+    echo Running "$reg_test"...
+    cd $reg_test
+    rm -f test.c stdout_stderr
+    ../../tfz -v ./template test.c >stdout_stderr 2>&1
+    rm -f diff_stdout_stderr diff_test.c
+    diff stdout_stderr exp_stdout_stderr >diff_stdout_stderr
+    diff test.c exp_test.c >diff_test.c
+    python ./check.py diff_stdout_stderr diff_test.c stdout_stderr
+    cd ..
+done