diff options
author | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
---|---|---|
committer | thead_admin <occ_thead@service.alibaba.com> | 2022-09-13 11:04:33 +0800 |
commit | 43db9e00d5837c100c0b2fbbee64a08ab807d1e0 (patch) | |
tree | b40c0eed02935b6682e8c5c975e3016b6b2f55fe /lib/sec_library/include/sec_crypto_rsa.h |
Linux_SDK_V0.9.5Linux_SDK_V0.9.5
Diffstat (limited to 'lib/sec_library/include/sec_crypto_rsa.h')
-rwxr-xr-x | lib/sec_library/include/sec_crypto_rsa.h | 293 |
1 files changed, 293 insertions, 0 deletions
diff --git a/lib/sec_library/include/sec_crypto_rsa.h b/lib/sec_library/include/sec_crypto_rsa.h new file mode 100755 index 00000000..03defbe4 --- /dev/null +++ b/lib/sec_library/include/sec_crypto_rsa.h @@ -0,0 +1,293 @@ +/* + * Copyright (C) 2017-2021 Alibaba Group Holding Limited + */ +/****************************************************************************** + * @file seccrypt_rsa.h + * @brief Header File for RSA + * @version V1.0 + * @date 20. Jul 2020 + * @model rsa + ******************************************************************************/ +#ifndef _SC_RSA_H_ +#define _SC_RSA_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef CONFIG_SYSTEM_SECURE +#include "drv/rsa.h" +#endif + + +#ifdef CONFIG_SEC_CRYPTO_RSA_SW +#include "crypto_rsa.h" +#endif + + +#include <stdint.h> +#include <stdbool.h> +#include <drv/common.h> +#include <sec_crypto_errcode.h> + + +//TODO Del this file after updating to sc2.0 + +/*----- RSA Control Codes: Mode Parameters: Key Bits -----*/ +typedef enum { + SC_RSA_KEY_BITS_192 = 0, ///< 192 Key bits + SC_RSA_KEY_BITS_256, ///< 256 Key bits + SC_RSA_KEY_BITS_512, ///< 512 Key bits + SC_RSA_KEY_BITS_1024, ///< 1024 Key bits + SC_RSA_KEY_BITS_2048, ///< 2048 Key bits + SC_RSA_KEY_BITS_3072, ///< 3072 Key bits + SC_RSA_KEY_BITS_4096 ///< 4096 Key bits +} sc_rsa_key_bits_t; + +typedef enum { + SC_RSA_PADDING_MODE_NO = 0, ///< RSA NO Padding Mode + SC_RSA_PADDING_MODE_PKCS1, ///< RSA PKCS1 Padding Mode + SC_RSA_PADDING_MODE_PKCS1_OAEP, ///< RSA PKCS1 OAEP Padding Mode + SC_RSA_PADDING_MODE_SSLV23, ///< RSA SSLV23 Padding Mode + SC_RSA_PADDING_MODE_X931, ///< RSA X931 Padding Mode + SC_RSA_PADDING_MODE_PSS ///< RSA PSS Padding Mode +} sc_rsa_padding_type_t; + +typedef enum { + SC_RSA_HASH_TYPE_MD5 = 0, + SC_RSA_HASH_TYPE_SHA1, + SC_RSA_HASH_TYPE_SHA224, + SC_RSA_HASH_TYPE_SHA256, + SC_RSA_HASH_TYPE_SHA384, + SC_RSA_HASH_TYPE_SHA512 +} sc_rsa_hash_type_t; + +typedef struct { +// #if (defined(CONFIG_SYSTEM_SECURE) && defined(CONFIG_CSI_V2)) +// csi_rsa_context_t rsa_ctx; +// #else + void * n; ///< Pointer to the public modulus + void * e; ///< Pointer to the public exponent + void * d; ///< Pointer to the private exponent + sc_rsa_key_bits_t key_bits; ///< RSA KEY BITS + sc_rsa_padding_type_t padding_type; ///< RSA PADDING TYPE + sc_rsa_hash_type_t hash_type; +// #endif +} sc_rsa_context_t; + +/** +\brief RSA State +*/ +typedef struct { + uint8_t busy : 1; ///< Calculate busy flag + uint8_t error : 1; ///< Calculate error flag +} sc_rsa_state_t; + +typedef struct { +#ifdef CONFIG_SYSTEM_SECURE +#ifdef CONFIG_CSI_V1 + rsa_handle_t handle; +#endif /* CONFIG_CSI_V1 */ +#ifdef CONFIG_CSI_V2 + csi_rsa_t csi_rsa; +#endif +#endif +#if defined(CONFIG_SEC_CRYPTO_RSA_SW) + sc_mbedtls_rsa_context rsa_ctx; +#endif + sc_rsa_key_bits_t bits; +} sc_rsa_t; + +/****** RSA Event *****/ +typedef enum { + SC_RSA_EVENT_COMPLETE = 0, ///< rsa event completed + SC_RSA_EVENT_VERIFY_SUCCESS, + SC_RSA_EVENT_VERIFY_FAILED, + SC_RSA_EVENT_ERROR, ///< error event +} sc_rsa_event_t; + +typedef void (*sc_rsa_callback_t)( + sc_rsa_t *rsa, sc_rsa_event_t event, + void *arg); ///< Pointer to \ref sc_rsa_callback_t : RSA Event call back. + +// Function documentation + +/** + \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 + \param[in] data_bits rsa bit width + \return \ref uint32_t +*/ +uint32_t sc_rsa_init(sc_rsa_t *rsa, uint32_t idx, sc_rsa_key_bits_t data_bits); + +/** + \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 sc_rsa_uninit(sc_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 +*/ +uint32_t sc_rsa_attach_callback(sc_rsa_t *rsa, sc_rsa_callback_t cb, void *arg); + +/** + \brief detach the callback handler + \param[in] rsa operate handle. +*/ +void sc_rsa_detach_callback(sc_rsa_t *rsa); + +/** + \brief generate rsa key pair. + \param[in] rsa rsa handle to operate. + \param[out] context Pointer to the rsa context + \return \ref uint32_t +*/ +uint32_t sc_rsa_gen_key(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_encrypt(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_decrypt(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_sign(sc_rsa_t *rsa, sc_rsa_context_t *context, void *src, uint32_t src_size, + void *signature, sc_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 sc_rsa_verify(sc_rsa_t *rsa, sc_rsa_context_t *context, void *src, uint32_t src_size, + void *signature, uint32_t sig_size, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_encrypt_async(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_decrypt_async(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_sign_async(sc_rsa_t *rsa, sc_rsa_context_t *context, void *src, + uint32_t src_size, void *signature, sc_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 +*/ +uint32_t sc_rsa_verify_async(sc_rsa_t *rsa, sc_rsa_context_t *context, void *src, + uint32_t src_size, void *signature, uint32_t sig_size, + sc_rsa_hash_type_t hash_type); + +/** + \brief Get RSA state. + \param[in] rsa rsa handle to operate. + \param[out] state rsa state \ref sc_rsa_state_t. + \return \ref uint32_t +*/ +uint32_t sc_rsa_get_state(sc_rsa_t *rsa, sc_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 \ref uint32_t +*/ +uint32_t sc_rsa_get_prime(sc_rsa_t *rsa, void *p, uint32_t bit_length); + +/** + \brief enable rsa power manage + \param[in] rsa rsa handle to operate. + \return error code +*/ +uint32_t sc_rsa_enable_pm(sc_rsa_t *rsa); + +/** + \brief disable rsa power manage + \param[in] rsa rsa handle to operate. +*/ +void sc_rsa_disable_pm(sc_rsa_t *rsa); + +#ifdef __cplusplus +} +#endif + +#endif /* _SC_RSA_H_ */ |