[][openwrt][mt7988][crypto][EIP197 DDK Porting]
[Description]
Add eip197 DDK(Driver Development Kit) and firmware
to eip197 package(crypto-eip)
eip197 DDK v5.6.1
eip197b-iew firmware v3.5
[Release-log]
N/A
Change-Id: I662327ecfbdac69742bf0b50362d7c28fc06372b
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/7895272
diff --git a/package-21.02/kernel/crypto-eip/src/ddk/slad/adapter_global_drbg_init.c b/package-21.02/kernel/crypto-eip/src/ddk/slad/adapter_global_drbg_init.c
new file mode 100644
index 0000000..a210faa
--- /dev/null
+++ b/package-21.02/kernel/crypto-eip/src/ddk/slad/adapter_global_drbg_init.c
@@ -0,0 +1,209 @@
+/* adapter_global drbg_init.c
+ *
+ * Initialize Global DRBG Control functionality.
+ */
+
+/*****************************************************************************
+* Copyright (c) 2017-2020 by Rambus, Inc. and/or its subsidiaries.
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation, either version 2 of the License, or
+* any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program. If not, see <http://www.gnu.org/licenses/>.
+*****************************************************************************/
+
+/*----------------------------------------------------------------------------
+ * This module implements (provides) the following interface(s):
+ */
+
+#include "adapter_global_drbg_init.h"
+
+
+/*----------------------------------------------------------------------------
+ * This module uses (requires) the following interface(s):
+ */
+
+// Default configuration
+#include "c_adapter_global.h"
+
+// Global Control DRBG API
+#include "api_global_eip74.h"
+
+// Driver Framework Basic Definitions API
+#include "basic_defs.h" // uint8_t, uint32_t, bool
+
+// Driver Framework C Library API
+#include "clib.h" // memcpy, ZEROINIT
+
+// Log API
+#include "log.h"
+
+/*----------------------------------------------------------------------------
+ * Definitions and macros
+ */
+
+
+/*----------------------------------------------------------------------------
+ * Local variables
+ */
+
+static bool fDRBGPresent;
+
+#ifdef MODULE
+#include <linux/random.h>
+#define Global_DRBG_Entropy_Get(p) get_random_bytes(p, 48);
+#else
+#include <stdio.h>
+/*----------------------------------------------------------------------------
+ * Global_DRBG_Entropy_Get
+ *
+ * Get 48 bytes of entropy to initialize/reseed DRBG.
+ */
+static void
+Global_DRBG_Entropy_Get(
+ uint8_t * Key_p)
+{
+ FILE *rng = fopen("/dev/urandom","rb");
+ if (rng==NULL)
+ {
+ LOG_CRIT("/dev/urandom not available\n");
+ return;
+ }
+ if (fread(Key_p, 1, 48, rng) < 48)
+ {
+ LOG_CRIT("random data not read\n");
+ return;
+ }
+ Log_HexDump("Entropy",0,Key_p,48);
+
+ fclose(rng);
+}
+
+#endif
+
+/*----------------------------------------------------------------------------
+ * BoolToString()
+ *
+ * Convert boolean value to string.
+ */
+static const char *
+BoolToString(
+ const bool b)
+{
+ if (b)
+ return "true";
+ else
+ return "false";
+}
+
+
+/*----------------------------------------------------------------------------
+ * Adapter_Global_DRBG_StatusReport()
+ *
+ * Obtain all available global status information from the Global DRBG
+ * hardware and report it.
+ */
+void
+Adapter_Global_DRBG_StatusReport(void)
+{
+ GlobalControl74_Error_t Rc;
+ GlobalControl74_Status_t Status;
+
+ LOG_INFO("DA_GC: Global_DRBG_StatusReport \n");
+
+ LOG_CRIT("DA_GC: Global DRBG Status\n");
+ Rc = GlobalControl74_Status_Get(&Status);
+ if (Rc != GLOBAL_CONTROL_EIP74_NO_ERROR)
+ {
+ LOG_CRIT("EIP74 status get error\n");
+ return;
+ }
+ Log_FormattedMessage(
+ "EIP 74 status: GenBlockCount=%u StuckOut=%s\n"
+ "\t\tNotInitialized=%s ReseedErr=%s ReseedWarn=%s\n"
+ "\t\tInstantiated=%s AvailableCount=%u\n",
+ Status.GenerateBlockCount,
+ BoolToString(Status.fStuckOut),
+ BoolToString(Status.fNotInitialized),
+ BoolToString(Status.fReseedError),
+ BoolToString(Status.fReseedWarning),
+ BoolToString(Status.fInstantiated),
+ Status.AvailableCount);
+}
+
+
+/*----------------------------------------------------------------------------
+ * Adapter_Global_DRBG_Init()
+ *
+ */
+bool
+Adapter_Global_DRBG_Init(void)
+{
+ GlobalControl74_Error_t rc;
+ GlobalControl74_Capabilities_t Capabilities;
+ GlobalControl74_Configuration_t Configuration;
+ uint8_t Entropy[48];
+
+ LOG_INFO("DA_GC: Global_DRBG_Init \n");
+
+ ZEROINIT(Configuration);
+ Configuration.fStuckOut = true;
+
+ Global_DRBG_Entropy_Get(Entropy);
+
+ rc = GlobalControl74_Init(&Configuration, Entropy);
+ if (rc == GLOBAL_CONTROL_EIP74_ERROR_NOT_IMPLEMENTED)
+ {
+ LOG_CRIT("EIP74 not present\n");
+ return true;
+ }
+ if (rc == GLOBAL_CONTROL_EIP74_NO_ERROR)
+ {
+ fDRBGPresent = true;
+ Log_FormattedMessage("EIP74 initialized OK\n");
+ }
+ else
+ {
+ LOG_CRIT("EIP74 initialization error\n");
+ }
+
+ Capabilities.szTextDescription[0] = 0;
+
+ GlobalControl74_Capabilities_Get(&Capabilities);
+
+ LOG_CRIT("DA_GC: Global DRBG capabilities: %s\n",
+ Capabilities.szTextDescription);
+
+ Adapter_Global_DRBG_StatusReport();
+
+ return true;
+}
+
+
+/*----------------------------------------------------------------------------
+ * Adapter_Global_DRBG_UnInit()
+ *
+ */
+void
+Adapter_Global_DRBG_UnInit(void)
+{
+ LOG_INFO("\n\t\t Adapter_Global_DRBG_UnInit \n");
+
+ if (fDRBGPresent)
+ {
+ Adapter_Global_DRBG_StatusReport();
+
+ GlobalControl74_UnInit();
+ }
+}
+
+
+/* end of file adapter_global_drbg_init.c */