BL2: Support LMS via thin PSA crypto core
Add experimental support for PSA_ALG_LMS to PSA as a vendor algorithm.
Add support for using this alg in the thin PSA crypto core.
Change-Id: Ic5ad261fe8db1a8eb773d4cfdccd3cce72b8082a
Signed-off-by: Raef Coles <raef.coles@arm.com>
diff --git a/interface/include/psa/crypto_values_lms.h b/interface/include/psa/crypto_values_lms.h
new file mode 100644
index 0000000..a0add59
--- /dev/null
+++ b/interface/include/psa/crypto_values_lms.h
@@ -0,0 +1,39 @@
+/*
+ * SPDX-FileCopyrightText: Copyright The TrustedFirmware-M Contributors
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef PSA_CRYPTO_VALUES_LMS_H
+#define PSA_CRYPTO_VALUES_LMS_H
+
+#define PSA_ALG_LMS_BASE 0x00100000
+
+#define PSA_ALG_IS_LMS(alg) (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_LMS_BASE)
+
+#define PSA_ALG_LMS(hash) ( \
+ PSA_ALG_VENDOR_FLAG | \
+ PSA_ALG_CATEGORY_SIGN | \
+ PSA_ALG_LMS_BASE | \
+ ((hash) & PSA_ALG_HASH_MASK) \
+ )
+
+#define PSA_ALG_HSS_BASE 0x00200000
+
+#define PSA_ALG_IS_HSS(alg) (((alg) & ~PSA_ALG_HASH_MASK) == PSA_ALG_HSS_BASE)
+
+#define PSA_ALG_HSS(hash) ( \
+ PSA_ALG_VENDOR_FLAG | \
+ PSA_ALG_CATEGORY_SIGN | \
+ PSA_ALG_HSS_BASE | \
+ ((hash) & PSA_ALG_HASH_MASK) \
+ )
+
+/* This overrides the default PSA_ALG_IS_VENDOR_HASH_AND_SIGN in crypto_values.h */
+#define PSA_ALG_IS_VENDOR_HASH_AND_SIGN(alg) ( \
+ (PSA_ALG_IS_LMS(alg)) || \
+ (PSA_ALG_IS_HSS(alg)) \
+ )
+
+#endif /* PSA_CRYPTO_VALUES_LMS_H */