aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/rambus.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sec_library/include/rambus.h')
-rw-r--r--lib/sec_library/include/rambus.h149
1 files changed, 149 insertions, 0 deletions
diff --git a/lib/sec_library/include/rambus.h b/lib/sec_library/include/rambus.h
new file mode 100644
index 00000000..780d774b
--- /dev/null
+++ b/lib/sec_library/include/rambus.h
@@ -0,0 +1,149 @@
+/*
+ * Copyright (C) 2017-2020 Alibaba Group Holding Limited
+ */
+
+#ifndef INC_RAMBUS_H
+#define INC_RAMBUS_H
+
+#include "device_types.h"
+#ifdef SEC_LIB_VERSION
+#include "drv/common.h"
+#include "device_rw.h"
+#include "rambus_log.h"
+#include "rambus_errcode.h"
+#else
+#include "common.h"
+#endif
+
+extern uint64_t g_freq_timer;
+extern uint64_t g_freq_ip;
+extern uint64_t g_start_ctr;
+extern uint64_t g_end_ctr;
+extern uint64_t g_data_len_in_bits;
+extern uint32_t g_type;
+
+enum rambus_cipher_padding_mode {
+ PADDING_ZERO,
+ PADDING_FF,
+ PADDING_RANDOM,
+};
+
+uint32_t rb_get_random_byte(uint8_t *buf, uint32_t count);
+
+uint32_t rb_get_random_byte_nozero(uint8_t *buf, uint32_t count);
+
+uint32_t kdf_get_mask(uint8_t *mask, uint32_t len);
+
+/* 1 bpc, 2 tps, 3 bps */
+void rb_perf_init(uint32_t data_len_in_bits, uint32_t type);
+void rb_perf_start(void);
+void rb_perf_end(void);
+void rb_perf_get(char *ncase);
+
+#define DEFAULT_TIMEOUT 1000U
+
+#ifdef CONFIG_ALG_PERF_TEST
+#define RB_PERF_INIT(bits, type) \
+ do { \
+ if (data_len_in_bits != 0) { \
+ g_data_len_in_bits = data_len_in_bits; \
+ } \
+ if (type != 0) { \
+ g_type = type; \
+ } \
+ } while (0)
+
+#define RB_PERF_START_POINT() \
+ do { \
+ g_start_ctr = ((((uint64_t)csi_coret_get_valueh() << 32U) | \
+ csi_coret_get_value())); \
+ } while (0)
+
+#define RB_PERF_END_POINT() \
+ do { \
+ g_end_ctr = ((((uint64_t)csi_coret_get_valueh() << 32U) | \
+ csi_coret_get_value())); \
+ } while (0)
+
+#else
+#define RB_PERF_INIT(...)
+#define RB_PERF_START_POINT(...)
+#define RB_PERF_END_POINT(...)
+#endif
+
+static inline void rb_xor(uint32_t *a, uint32_t *b, uint32_t *c, uint32_t len) {
+ for (int i = 0; i < (int)len; i++) {
+ c[i] = a[i] ^ b[i];
+ }
+}
+
+/**
+ * @brief Get the aes sca enable config
+ *
+ * @param is_en is enable
+ * @return uint32_t
+ */
+uint32_t rb_get_aes_sca(uint32_t *is_en);
+
+/**
+ * @brief Get the sm4 sca enable config
+ *
+ * @param is_en is enable
+ * @return uint32_t
+ */
+uint32_t rb_get_sm4_sca(uint32_t *is_en);
+
+/**
+ * @brief Get the pka sca enable config
+ *
+ * @param is_en is enable
+ * @return uint32_t
+ */
+uint32_t rb_get_pka_sca(uint32_t *is_en);
+
+/**
+ * @brief rb_cache_en
+ * @return uint32_t enable: 1
+ *
+ */
+uint32_t rb_cache_en(void);
+
+/**
+ * @brief trng init
+ *
+ * @return csi_error_t
+ */
+csi_error_t trng_init(void);
+
+/**
+ * @brief rb wait status
+ *
+ * @param dev
+ * @param offset
+ * @param mask
+ * @param status
+ * @return uint32_t
+ */
+csi_error_t rb_wait_status(Device_Handle_t *dev, const uint32_t offset, uint32_t mask,
+ uint32_t status);
+
+/**
+ * \brief rambus crypto init.
+ * \return 0 if successful, or error code
+ */
+uint32_t rambus_crypto_init(void);
+
+/**
+ * @brief rambus crypto uninit.
+ *
+ */
+void rambus_crypto_uninit(void);
+
+/**
+ * \brief rambus set cipher padding type.
+ * @param padding_mode cipher padding mode
+ * \return 0 if successful, or error code
+ */
+uint32_t rambus_enable_cipher_padding_type(enum rambus_cipher_padding_mode padding_mode);
+
+#endif