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/utility/randomization.cpp b/tools/tf_fuzz/utility/randomization.cpp
new file mode 100644
index 0000000..8abfe5c
--- /dev/null
+++ b/tools/tf_fuzz/utility/randomization.cpp
@@ -0,0 +1,139 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+/**********************************************************************************
+ Functions in this file are exactly that: functions, not methods of any class.
+ That is, they are stand-alone, utility functions linked in to the executable,
+ and available to whomever needs them.
+**********************************************************************************/
+
+#include "randomization.hpp"
+
+/**
+ * \brief Selects and returns a random key_usage_t value.
+ *
+ * \details
+ *
+ * \note
+ *
+ */
+string rand_key_usage (void)
+{
+ switch (rand() % 6) {
+ case 0: return "PSA_KEY_USAGE_EXPORT";
+ case 1: return "PSA_KEY_USAGE_ENCRYPT";
+ case 2: return "PSA_KEY_USAGE_DECRYPT";
+ case 3: return "PSA_KEY_USAGE_SIGN";
+ case 4: return "PSA_KEY_USAGE_VERIFY";
+ case 5: return "PSA_KEY_USAGE_DERIVE";
+ }
+ return ""; /* placate compiler */
+}
+
+/**
+ * \brief Selects and returns a random psa_algorithm_t value.
+ *
+ * \details
+ *
+ * \note
+ *
+ */
+/* TODO: Likely want to make additional versions of these specific for TLS,
+ asymmetric, symmetric... */
+string rand_key_algorithm (void)
+{
+ switch (rand() % 47) {
+ case 0: return "PSA_ALG_VENDOR_FLAG";
+ case 1: return "PSA_ALG_CATEGORY_MASK";
+ case 2: return "PSA_ALG_CATEGORY_HASH";
+ case 3: return "PSA_ALG_CATEGORY_MAC";
+ case 4: return "PSA_ALG_CATEGORY_CIPHER";
+ case 5: return "PSA_ALG_CATEGORY_AEAD";
+ case 6: return "PSA_ALG_CATEGORY_SIGN";
+ case 7: return "PSA_ALG_CATEGORY_ASYMMETRIC_ENCRYPTION";
+ case 8: return "PSA_ALG_CATEGORY_KEY_AGREEMENT";
+ case 9: return "PSA_ALG_CATEGORY_KEY_DERIVATION";
+ case 10: return "PSA_ALG_CATEGORY_KEY_SELECTION";
+ case 11: return "PSA_ALG_KEY_SELECTION_FLAG";
+ case 12: return "PSA_ALG_HASH_MASK";
+ case 13: return "PSA_ALG_MD2";
+ case 14: return "PSA_ALG_MD4";
+ case 15: return "PSA_ALG_MD5";
+ case 16: return "PSA_ALG_RIPEMD160";
+ case 17: return "PSA_ALG_SHA_1";
+ case 18: return "PSA_ALG_SHA_224";
+ case 19: return "PSA_ALG_SHA_256";
+ case 20: return "PSA_ALG_SHA_384";
+ case 21: return "PSA_ALG_SHA_512";
+ case 22: return "PSA_ALG_SHA_512_224";
+ case 23: return "PSA_ALG_SHA_512_256";
+ case 24: return "PSA_ALG_SHA3_224";
+ case 25: return "PSA_ALG_SHA3_256";
+ case 26: return "PSA_ALG_SHA3_384";
+ case 27: return "PSA_ALG_SHA3_512";
+ case 28: return "PSA_ALG_ANY_HASH";
+ case 29: return "PSA_ALG_MAC_SUBCATEGORY_MASK";
+ case 30: return "PSA_ALG_HMAC_BASE";
+ case 31: return "PSA_ALG_MAC_TRUNCATION_MASK";
+ case 32: return "PSA_ALG_CIPHER_MAC_BASE";
+ case 33: return "PSA_ALG_CBC_MAC";
+ case 34: return "PSA_ALG_CMAC";
+ case 35: return "PSA_ALG_GMAC";
+ case 36: return "PSA_ALG_CIPHER_STREAM_FLAG";
+ case 37: return "PSA_ALG_CIPHER_FROM_BLOCK_FLAG";
+ case 38: return "PSA_ALG_ARC4";
+ case 39: return "PSA_ALG_CTR";
+ case 40: return "PSA_ALG_CFB";
+ case 41: return "PSA_ALG_OFB";
+ case 42: return "PSA_ALG_XTS";
+ case 43: return "PSA_ALG_CBC_NO_PADDING";
+ case 44: return "PSA_ALG_CBC_PKCS7";
+ case 45: return "PSA_ALG_CCM";
+ case 46: return "PSA_ALG_GCM";
+ }
+ return ""; /* placate compiler */
+}
+
+
+/**
+ * \brief Selects and returns a random psa_key_type_t value.
+ *
+ * \details
+ *
+ * \note
+ *
+ */
+string rand_key_type (void)
+{
+ switch (rand() % 22) {
+ case 0: return "PSA_KEY_TYPE_NONE";
+ case 1: return "PSA_KEY_TYPE_VENDOR_FLAG";
+ case 2: return "PSA_KEY_TYPE_CATEGORY_MASK";
+ case 3: return "PSA_KEY_TYPE_CATEGORY_SYMMETRIC";
+ case 4: return "PSA_KEY_TYPE_CATEGORY_RAW";
+ case 5: return "PSA_KEY_TYPE_CATEGORY_PUBLIC_KEY";
+ case 6: return "PSA_KEY_TYPE_CATEGORY_KEY_PAIR";
+ case 7: return "PSA_KEY_TYPE_CATEGORY_FLAG_PAIR";
+ case 8: return "PSA_KEY_TYPE_RAW_DATA";
+ case 9: return "PSA_KEY_TYPE_HMAC";
+ case 10: return "PSA_KEY_TYPE_DERIVE";
+ case 11: return "PSA_KEY_TYPE_AES";
+ case 12: return "PSA_KEY_TYPE_DES";
+ case 13: return "PSA_KEY_TYPE_CAMELLIA";
+ case 14: return "PSA_KEY_TYPE_ARC4";
+ case 15: return "PSA_KEY_TYPE_RSA_PUBLIC_KEY";
+ case 16: return "PSA_KEY_TYPE_RSA_KEYPAIR";
+ case 17: return "PSA_KEY_TYPE_DSA_PUBLIC_KEY";
+ case 18: return "PSA_KEY_TYPE_DSA_KEYPAIR";
+ case 19: return "PSA_KEY_TYPE_ECC_PUBLIC_KEY_BASE";
+ case 20: return "PSA_KEY_TYPE_ECC_KEYPAIR_BASE";
+ case 21: return "PSA_KEY_TYPE_ECC_CURVE_MASK";
+ default: return "";
+ }
+ return ""; /* placate compiler */
+}
+