aboutsummaryrefslogtreecommitdiff
path: root/platform/interface/entropy.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/interface/entropy.h')
-rw-r--r--platform/interface/entropy.h70
1 files changed, 70 insertions, 0 deletions
diff --git a/platform/interface/entropy.h b/platform/interface/entropy.h
new file mode 100644
index 000000000..d81cd608e
--- /dev/null
+++ b/platform/interface/entropy.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef TS_PLATFORM_INTERFACE_ENTROPY_H
+#define TS_PLATFORM_INTERFACE_ENTROPY_H
+
+/*
+ * Interface definintion for a platform entropy driver. A platform provider will
+ * provide concrete implementations of this interface for each alternative
+ * implementation supported.
+ */
+#include <stddef.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ * Virtual interface for a platform entropy driver. A platform will provide
+ * one or more concrete implementations of this interface.
+ */
+struct ts_plat_entropy_iface
+{
+ /**
+ * \brief Poll for bytes of entropy from a platform entropy source
+ *
+ * \param context Platform driver context
+ * \param output Buffer for output
+ * \param nbyte Desired number of bytes
+ * \param len The number of bytes returned (could be zero)
+ *
+ * \return 0 if successful.
+ */
+ int (*poll)(void *context, unsigned char *output, size_t nbyte, size_t *len);
+};
+
+/*
+ * A platform entropy driver instance.
+ */
+struct ts_plat_entropy_driver
+{
+ void *context; /**< Opaque driver context */
+ const struct ts_plat_entropy_iface *iface; /**< Interface methods */
+};
+
+/**
+ * \brief Factory method to construct a platform specific entropy driver
+ *
+ * \param driver Pointer to driver structure to initialize on construction.
+ * \param config Driver specific configuration or NULL if none.
+ *
+ * \return 0 if successful.
+ */
+int ts_plat_entropy_create(struct ts_plat_entropy_driver *driver, void *config);
+
+/**
+ * \brief Destroy a driver constructed using the factory method
+ *
+ * \param driver Pointer to driver structure for constructed driver.
+ */
+void ts_plat_entropy_destroy(struct ts_plat_entropy_driver *driver);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* TS_PLATFORM_INTERFACE_ENTROPY_H */