Files
E3_boot/drivers/include/crypto/mailbox/sdrv_crypto_mailbox_rsa.h
2025-11-07 10:05:24 +08:00

352 lines
9.2 KiB
C

/**
* @file sdrv_crypto_mailbox_rsa.h
* @brief SemiDrive CRYPTO rsa interface header file.
*
* @copyright Copyright (c) 2021 Semidrive Semiconductor.
* All rights reserved.
*/
#ifndef SDRV_CRYPTO_MAILBOX_RSA_H
#define SDRV_CRYPTO_MAILBOX_RSA_H
#include "sdrv_crypto_mailbox_common.h"
#include "sdrv_crypto_mailbox_trng.h"
/**
* @brief CRYPTO cmd of rsa get prime.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[1];
uint8_t prime_len[2];
uint8_t prime_ptr[4];
} cmd_rsa_getprime_t;
/**
* @brief CRYPTO cmd of rsa generate key.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[3];
uint8_t e_len[2];
uint8_t n_len[2];
uint8_t e_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t d_ptr[4];
uint8_t n_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_generatekey_t;
/**
* @brief rsa crt prikey pointer.
*/
typedef struct {
uint8_t p_ptr[4];
uint8_t q_ptr[4];
uint8_t dp_ptr[4];
uint8_t dq_ptr[4];
uint8_t u_ptr[4];
} rsa_crt_pri_key_ptr_t;
/**
* @brief CRYPTO cmd of rsa generate CRTkey.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[3];
uint8_t e_len[2];
uint8_t n_len[2];
uint8_t e_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t priKey_ptr[4];
uint8_t n_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_generateCRTkey_t;
/**
* @brief CRYPTO cmd of rsa encrypt.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[1];
uint8_t n_len[2];
uint8_t data_ptr[4];
uint8_t e_ptr[4];
uint8_t n_ptr[4];
uint8_t cipher_ptr[4];
} cmd_rsa_encrypt_t;
/**
* @brief CRYPTO cmd of rsa decrypt.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t n_len[2];
uint8_t cipher_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t e_ptr[4];
uint8_t d_ptr[4];
uint8_t n_ptr[4];
uint8_t data_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_decrypt_t;
/**
* @brief CRYPTO cmd of rsa CRT decrypt.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t n_len[2];
uint8_t cipher_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t e_ptr[4];
uint8_t priKey_ptr[4];
uint8_t data_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_CRT_decrypt_t;
/**
* @brief CRYPTO cmd of rsa generate signature.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t n_len[2];
uint8_t data_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t e_ptr[4];
uint8_t d_ptr[4];
uint8_t n_ptr[4];
uint8_t signature_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_generate_signature_t;
/**
* @brief CRYPTO cmd of rsa CRT generate signature.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t n_len[2];
uint8_t data_ptr[4];
uint8_t rev2[2];
uint8_t key_id[2];
uint8_t e_ptr[4];
uint8_t priKey_ptr[4];
uint8_t signature_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_rsa_CRT_generate_signature_t;
/**
* @brief CRYPTO cmd of rsa verify.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[1];
uint8_t n_len[2];
uint8_t data_ptr[4];
uint8_t e_ptr[4];
uint8_t n_ptr[4];
uint8_t signature_ptr[4];
} cmd_rsa_verify_t;
/**
* @brief get prime
*
* This function get prime
*
* @param[in] primebitlen prime len
* @param[out] prime out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_get_prime(uint16_t primebitlen,
uint8_t *prime);
/**
* @brief generate rsa key
*
* This function generate ras key.
*
* @param[in] ebitlen e bit len
* @param[in] nbitlen n bit len
* @param[in] generate_key_type out put key type
* @param[in] generate_key_id enc key id
* @param[out] n n buff
* @param[out] e e buff
* @param[out] d d buff
* @param[in] mac_buf mac buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_generate_key(
uint16_t ebitlen, uint16_t nbitlen,
cmd_key_type_e generate_key_type,
uint16_t generate_key_id, uint8_t *n,
uint8_t *e, uint8_t *d, uint8_t *mac_buf);
/**
* @brief rsa encrypt
*
* This function encrypt , msg_len is same with n bitlen
*
* @param[in] msg msg buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[out] out out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_encrypt(uint8_t *msg, uint8_t *e, uint8_t *n,
uint32_t nbitlen, uint8_t *out);
/**
* @brief rsa decrypt
*
* This function decrypt.
*
* @param[out] plain plain buff
* @param[in] d d buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[in] cipher cipher buff
* @param[in] decrypt_key_type dec key type
* @param[in] decrypt_key_id dec key id
* @param[in] mac_buf out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_decrypt(uint8_t *plain, uint8_t *d,
uint8_t *e, uint8_t *n,
uint32_t nbitlen, uint8_t *cipher,
cmd_key_type_e decrypt_key_type,
uint16_t decrypt_key_id,
uint8_t *mac_buf);
/**
* @brief rsa generate sign
*
* This function generate signature.
*
* @param[in] msg msg buff
* @param[in] d d buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[out] out out buff
* @param[in] sign_key_type sign key type
* @param[in] sign_key_id sign key id
* @param[in] mac_buf out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_generate_signature(
uint8_t *msg, uint8_t *d, uint8_t *e, uint8_t *n,
uint32_t nbitlen, uint8_t *out,
cmd_key_type_e sign_key_type,
uint16_t sign_key_id, uint8_t *mac_buf);
/**
* @brief rsa verify signature
*
* This function verify sign
*
* @param[in] msg msg buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[in] sign sign buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_verify_signature(uint8_t *msg,
uint8_t *e,
uint8_t *n,
uint32_t nbitlen,
uint8_t *sign);
/**
* @brief set prikey ptr
*
* This function set crt prikey
*
* @param[in] p p buff
* @param[in] q q buff
* @param[in] dp dp buff
* @param[in] dq dq buff
* @param[in] u u buff
* @param[in] rsa_crt_pri_key rsa_crt_pri_key buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_set_crt_prikey_ptr(
uint8_t *p, uint8_t *q, uint8_t *dp, uint8_t *dq,
uint8_t *u, rsa_crt_pri_key_ptr_t *rsa_crt_pri_key);
/**
* @brief rsa generate crt key
*
* This function get crt key.
*
* @param[in] ebitlen e bit len
* @param[in] nbitlen n bit len
* @param[in] generate_key_type out put key type
* @param[in] generate_key_id enc key id
* @param[in] n n buff
* @param[in] e e buff
* @param[in] rsa_crt_pri_key rsa_crt_pri_key buff
* @param[in] mac_buf out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_generate_crt_key(
uint16_t ebitlen, uint16_t nbitlen, cmd_key_type_e generate_key_type,
uint16_t generate_key_id, uint8_t *n, uint8_t *e,
rsa_crt_pri_key_ptr_t *rsa_crt_pri_key, uint8_t *mac_buf);
/**
* @brief rsa crt decrypt
*
* This function rsa crt decrypt.
*
* @param[in] msg msg buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[out] out out buff
* @param[in] decrypt_key_type dec key type
* @param[in] decrypt_key_id dec key id
* @param[in] rsa_crt_pri_key rsa_crt_pri_key buff
* @param[in] mac_buf out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_crt_decrypt(
uint8_t *msg, uint8_t *e, uint8_t *n, uint32_t nbitlen,
uint8_t *out, cmd_key_type_e decrypt_key_type,
uint16_t decrypt_key_id, rsa_crt_pri_key_ptr_t *rsa_crt_pri_key,
uint8_t *mac_buf);
/**
* @brief rsa crt generate sign
*
* This function rsa crt generate sign
*
* @param[in] msg msg buff
* @param[in] e e buff
* @param[in] n n buff
* @param[in] nbitlen n bit len
* @param[out] out out buff
* @param[in] sign_key_type sign key type
* @param[in] sign_key_id sign key id
* @param[in] rsa_crt_pri_key rsa_crt_pri_key buff
* @param[in] mac_buf out buff
* @return CMD_RETURN_SUCCESS or error code.
*/
sdrv_crypto_error_status_e cmd_rsa_crt_generate_signature(
uint8_t *msg, uint8_t *e, uint8_t *n, uint32_t nbitlen,
uint8_t *out, cmd_key_type_e sign_key_type,
uint16_t sign_key_id, rsa_crt_pri_key_ptr_t *rsa_crt_pri_key,
uint8_t *mac_buf);
#endif