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/utility/variables.cpp b/tf_fuzz/utility/variables.cpp
new file mode 100644
index 0000000..ab2a823
--- /dev/null
+++ b/tf_fuzz/utility/variables.cpp
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/* This file defines information to track regarding variables in the generated test
+   code. */
+
+#include <string>
+#include <vector>
+#include <list>
+#include <iostream>
+#include <fstream>
+
+#include "class_forwards.hpp"
+
+#include "data_blocks.hpp"
+#include "psa_asset.hpp"
+#include "crypto_asset.hpp"
+#include "psa_call.hpp"
+#include "find_or_create_asset.hpp"
+#include "variables.hpp"
+#include "gibberish.hpp"
+
+/* This project's header files #including other project headers quickly becomes
+   unrealistically complicated.  The only solution is for each .cpp to include
+   the headers it needs.  However these in particular are mostly axiomatic:  Not
+   dependent upon other classes. */
+
+
+using namespace std;
+
+
+/**********************************************************************************
+   Methods of class variable_info follow:
+**********************************************************************************/
+
+variable_info::variable_info (void)  // (default constructor)
+{
+    gibberish *gib = new gibberish;
+
+    hash_declared = value_known = false;
+    name = "";
+    length = 100 + (rand() % 800);
+    gib->sentence ((char*) value, (char*) value + length);
+        // TODO:  Sizes of random data neesds to be strategized better
+    type = psa_asset_type::unknown;
+    delete gib;
+}
+
+variable_info::variable_info (string var_name, psa_asset_type var_type)
+{  // (constructor with known name and type)
+    gibberish *gib = new gibberish;
+
+    hash_declared = value_known = false;
+    name.assign (var_name);
+    length = 100 + (rand() % 800);
+    gib->sentence ((char*) value, (char*) value + length);
+        // TODO:  Sizes of random data needs to be strategized better
+    type = var_type;
+    delete gib;
+}
+
+variable_info::~variable_info (void)  // (destructor)
+{}
+
+
+/**********************************************************************************
+   End of methods of class variable_info.
+**********************************************************************************/