diff --git a/tf_fuzz/calls/security_call.cpp b/tf_fuzz/calls/security_call.cpp
new file mode 100644
index 0000000..a99496a
--- /dev/null
+++ b/tf_fuzz/calls/security_call.cpp
@@ -0,0 +1,93 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <cstdlib>
+
+#include "class_forwards.hpp"
+
+#include "boilerplate.hpp"
+#include "gibberish.hpp"
+#include "compute.hpp"
+#include "randomization.hpp"
+#include "string_ops.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 "sst_asset.hpp"
+
+
+
+/**********************************************************************************
+   Methods of class hash_call follow:
+**********************************************************************************/
+
+hash_call::hash_call (tf_fuzz_info *test_state,    // (constructor)
+                          long &call_ser_no,
+                          asset_search how_asset_found)
+                             : security_call(test_state, call_ser_no, how_asset_found)
+{
+    call_description = "hash call";
+}
+hash_call::~hash_call (void)
+{
+    // Nothing further to delete.
+    return;  // just to have something to pin a breakpoint onto
+}
+
+bool hash_call::copy_call_to_asset (void)
+{
+    // The assets are not directly involved in this call.
+    return true;
+}
+
+bool hash_call::copy_asset_to_call (void)
+{
+    // The assets are not directly involved in this call.
+    return true;
+}
+
+/* Note:  These functions are overridden in all subclasses, but they still need to be
+          defined, or the linker gives the error "undefined reference to `vtable... */
+void hash_call::fill_in_prep_code (void)
+{
+    // No prep code for hash comparisons.
+}
+
+void hash_call::fill_in_command (void)
+{
+    if (asset_info.asset_name_vector.size() > 1) {  // nothing to compare with less than 2
+        // Fill in preceding comment:
+        // Fill in the hash-comparison code itself:
+        for (auto outer = asset_info.asset_name_vector.begin();
+             outer < asset_info.asset_name_vector.end();
+             ++outer) {
+            for (auto inner = outer+1;
+                 inner < asset_info.asset_name_vector.end();
+                 ++inner) {
+                call_code.append ("    if (  " + *outer + "_act_hash == " + *inner
+                                           + "_act_hash) {\n");
+                call_code.append (  "        TEST_FAIL(\"Probable data leak between assets "
+                                  + *outer + " and " + *inner + ".\\n\");\n");
+                call_code.append ("        return;\n");
+                call_code.append ("    }\n");
+                // TODO:  Pull this from boilerplate!!
+            }
+        }
+    } else {
+        call_code.assign ("    /* Cannot compare hashes;  only one asset specified. */\n");
+
+    }
+}
+
+/**********************************************************************************
+   End of methods of class hash_call.
+**********************************************************************************/
