Add tf_fuzz tool

This is fully derived from tf-m repo.

Signed-off-by: Karl Zhang <karl.zhang@arm.com>
Change-Id: I8d35e70eda9081af66d8fa3f3cb4beb1d953060e
diff --git a/tf_fuzz/template/secure_template_line.cpp b/tf_fuzz/template/secure_template_line.cpp
new file mode 100644
index 0000000..73fbde3
--- /dev/null
+++ b/tf_fuzz/template/secure_template_line.cpp
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include "class_forwards.hpp"
+
+#include "boilerplate.hpp"
+#include "gibberish.hpp"
+#include "compute.hpp"
+#include "data_blocks.hpp"
+#include "psa_asset.hpp"
+#include "find_or_create_asset.hpp"
+#include "template_line.hpp"
+#include "tf_fuzz.hpp"
+#include "crypto_asset.hpp"
+#include "psa_call.hpp"
+#include "security_call.hpp"
+#include "secure_template_line.hpp"
+#include "sst_call.hpp"
+#include "sst_template_line.hpp"
+#include "sst_asset.hpp"
+#include "crypto_asset.hpp"
+
+
+
+/**********************************************************************************
+   Methods of class security_hash_template_line follow:
+**********************************************************************************/
+
+//**************** security_hash_template_line methods ****************
+
+bool security_hash_template_line::copy_template_to_call (psa_call *call)
+{
+    // Copy asset info to call object for creation code -- the entire vector:
+    for (auto as_name : asset_info.asset_name_vector) {
+        /* Also copy into template line object's local vector: */
+        call->asset_info.asset_name_vector.push_back (as_name);
+    }
+    call->asset_info.id_n = asset_info.id_n;
+        // this call is currently limited to name-based
+    call->asset_info.name_specified = true;
+    call->asset_info.asset_ser_no = asset_info.asset_ser_no;  // TODO:  Does this make sense?
+    call->asset_info.how_asset_found = asset_search::found_active;
+    call->random_asset = random_asset;
+    call->set_data.string_specified = false;  // shouldn't matter, but...
+    call->set_data.file_specified = false;
+    call->set_data.file_path.assign("");
+    call->set_data.set("");
+    call->set_data.flags_string.assign ("");
+    call->exp_data.pf_info_incomplete = true;
+    return true;
+}
+
+security_hash_template_line::security_hash_template_line (tf_fuzz_info *resources)
+    : security_template_line (resources)
+{
+}
+// Default destructor:
+security_hash_template_line::~security_hash_template_line (void)
+{
+    return;  // just to have something to pin a breakpoint onto
+}
+
+// (Default constructor not used)
+
+
+/**********************************************************************************
+   End of methods of class security_hash_template_line.
+**********************************************************************************/
+