352 lines
9.2 KiB
C
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 |