aboutsummaryrefslogtreecommitdiff
path: root/lib/sec_library/include/rsa.h
diff options
context:
space:
mode:
authorthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
committerthead_admin <occ_thead@service.alibaba.com>2022-09-13 11:04:33 +0800
commit43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch)
treeb40c0eed02935b6682e8c5c975e3016b6b2f55fe /lib/sec_library/include/rsa.h
Linux_SDK_V0.9.5Linux_SDK_V0.9.5
Diffstat (limited to 'lib/sec_library/include/rsa.h')
-rw-r--r--lib/sec_library/include/rsa.h264
1 files changed, 264 insertions, 0 deletions
diff --git a/lib/sec_library/include/rsa.h b/lib/sec_library/include/rsa.h
new file mode 100644
index 00000000..5c2e53fc
--- /dev/null
+++ b/lib/sec_library/include/rsa.h
@@ -0,0 +1,264 @@
+/*
+ * Copyright (C) 2017-2021 Alibaba Group Holding Limited
+ */
+/******************************************************************************
+ * @file drv/rsa.h
+ * @brief Header File for RSA Driver
+ * @version V1.0
+ * @date 02. June 2020
+ * @model rsa
+ ******************************************************************************/
+#ifndef _DRV_RSA_H_
+#define _DRV_RSA_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <drv/common.h>
+
+/*----- RSA Control Codes: Mode Parameters: Key Bits -----*/
+typedef enum {
+ RSA_KEY_BITS_192 = 0, ///< 192 Key bits
+ RSA_KEY_BITS_256, ///< 256 Key bits
+ RSA_KEY_BITS_512, ///< 512 Key bits
+ RSA_KEY_BITS_1024, ///< 1024 Key bits
+ RSA_KEY_BITS_2048, ///< 2048 Key bits
+ RSA_KEY_BITS_3072, ///< 3072 Key bits
+ RSA_KEY_BITS_4096 ///< 4096 Key bits
+} csi_rsa_key_bits_t;
+
+typedef enum {
+ RSA_PADDING_MODE_NO = 0, ///< RSA NO Padding Mode
+ RSA_PADDING_MODE_PKCS1, ///< RSA PKCS1 Padding Mode
+ RSA_PADDING_MODE_PKCS1_OAEP, ///< RSA PKCS1 OAEP Padding Mode
+ RSA_PADDING_MODE_SSLV23, ///< RSA SSLV23 Padding Mode
+ RSA_PADDING_MODE_X931, ///< RSA X931 Padding Mode
+ RSA_PADDING_MODE_PSS ///< RSA PSS Padding Mode
+} csi_rsa_padding_type_t;
+
+typedef enum {
+ RSA_HASH_TYPE_MD5 = 0,
+ RSA_HASH_TYPE_SHA1,
+ RSA_HASH_TYPE_SHA224,
+ RSA_HASH_TYPE_SHA256,
+ RSA_HASH_TYPE_SHA384,
+ RSA_HASH_TYPE_SHA512
+} csi_rsa_hash_type_t;
+
+typedef struct {
+ void *n; ///< Pointer to the public modulus
+ void *e; ///< Pointer to the public exponent
+ void *d; ///< Pointer to the private exponent
+ csi_rsa_key_bits_t key_bits; ///< RSA KEY BITS
+ csi_rsa_padding_type_t padding_type; ///< RSA PADDING TYPE
+} csi_rsa_context_t;
+
+/**
+\brief RSA State
+*/
+typedef struct {
+ uint8_t busy : 1; ///< Calculate busy flag
+ uint8_t error : 1; ///< Calculate error flag
+} csi_rsa_state_t;
+
+typedef struct {
+ csi_dev_t dev;
+ void *cb;
+ void *arg;
+ csi_rsa_state_t state;
+ void *prim;
+} csi_rsa_t;
+
+typedef struct {
+ uint32_t pout[64];
+ uint8_t *pouts;
+ uint32_t *pout_size;
+ uint32_t u32keywords;
+ uint8_t *pdst;
+ uint32_t u32padding;
+ uint32_t u32dst_words;
+ uint32_t u32type;
+ uint32_t rsa_state;
+}rsa_middle_t;
+
+/****** RSA Event *****/
+typedef enum {
+ RSA_EVENT_COMPLETE = 0, ///< rsa event completed
+ RSA_EVENT_VERIFY_SUCCESS,
+ RSA_EVENT_VERIFY_FAILED,
+ RSA_EVENT_ERROR, ///< error event
+} csi_rsa_event_t;
+
+typedef void (*csi_rsa_callback_t)(csi_rsa_t *rsa, csi_rsa_event_t event, void *arg); ///< Pointer to \ref csi_rsa_callback_t : RSA Event call back.
+
+/**
+ \brief Initialize RSA Interface. 1. Initializes the resources needed for the RSA interface 2.registers event callback function
+ \param[in] rsa RSA handle to operate.
+ \param[in] idx Device id
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_init(csi_rsa_t *rsa, uint32_t idx);
+
+/**
+ \brief De-initialize RSA Interface. stops operation and releases the software resources used by the interface
+ \param[in] rsa RSA handle to operate.
+ \return none
+*/
+void csi_rsa_uninit(csi_rsa_t *rsa);
+
+/**
+ \brief Attach the callback handler to RSA
+ \param[in] rsa Operate handle.
+ \param[in] cb Callback function
+ \param[in] arg User can define it by himself as callback's param
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_attach_callback(csi_rsa_t *rsa, csi_rsa_callback_t cb, void *arg);
+
+/**
+ \brief Detach the callback handler
+ \param[in] rsa Operate handle.
+*/
+void csi_rsa_detach_callback(csi_rsa_t *rsa);
+
+/**
+ \brief Generate rsa key pair.
+ \param[in] rsa RSA handle to operate.
+ \param[out] context Pointer to the rsa context
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_gen_key(csi_rsa_t *rsa, csi_rsa_context_t *context);
+
+/**
+ \brief Encrypt
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] out Pointer to the result buffer
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_encrypt(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *out);
+
+/**
+ \brief decrypt
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] out Pointer to the result buffer
+ \param[out] out_size The result size
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_decrypt(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *out, uint32_t *out_size);
+
+/**
+ \brief RSA sign
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] signature Pointer to the signature
+ \param[in] hash_type The source data hash type
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_sign(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *signature, csi_rsa_hash_type_t hash_type);
+
+/**
+ \brief RSA verify
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[in] signature Pointer to the signature
+ \param[in] sig_size The signature size
+ \param[in] hash_type The source data hash type
+ \return Verify result
+*/
+bool csi_rsa_verify(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *signature, uint32_t sig_size, csi_rsa_hash_type_t hash_type);
+
+/**
+ \brief encrypt(async mode)
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] out Pointer to the result buffer
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_encrypt_async(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *out);
+
+/**
+ \brief decrypt(async mode)
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] out Pointer to the result buffer
+ \param[out] out_size The result size
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_decrypt_async(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *out, uint32_t *out_size);
+
+/**
+ \brief RSA sign(async mode)
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[out] signature Pointer to the signature
+ \param[in] hash_type The source data hash type
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_sign_async(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *signature, csi_rsa_hash_type_t hash_type);
+
+/**
+ \brief RSA verify(async mode)
+ \param[in] rsa RSA handle to operate.
+ \param[in] context Pointer to the rsa context
+ \param[in] src Pointer to the source data.
+ \param[in] src_size The source data len
+ \param[in] signature Pointer to the signature
+ \param[in] sig_size The signature size
+ \param[in] hash_type The source data hash type
+ \return Verify result
+*/
+csi_error_t csi_rsa_verify_async(csi_rsa_t *rsa, csi_rsa_context_t *context, void *src, uint32_t src_size, void *signature, uint32_t sig_size, csi_rsa_hash_type_t hash_type);
+
+/**
+ \brief Get RSA state.
+ \param[in] rsa RSA handle to operate.
+ \param[out] state RSA state \ref csi_rsa_state_t.
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_get_state(csi_rsa_t *rsa, csi_rsa_state_t *state);
+
+/**
+ \brief Get big prime data
+ \param[in] rsa RSA handle to operate.
+ \param[in] p Pointer to the prime
+ \param[in] bit_length Pointer to the prime bit length
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_get_prime(csi_rsa_t *rsa, void *p, uint32_t bit_length);
+
+/**
+ \brief Enable rsa power manage
+ \param[in] rsa RSA handle to operate.
+ \return Error code \ref csi_error_t
+*/
+csi_error_t csi_rsa_enable_pm(csi_rsa_t *rsa);
+
+/**
+ \brief Disable rsa power manage
+ \param[in] rsa RSA handle to operate.
+*/
+void csi_rsa_disable_pm(csi_rsa_t *rsa);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _DRV_RSA_H_ */