Files
test/drivers/include/crypto/mailbox/sdrv_crypto_mailbox_sm2.h
2025-11-07 20:19:23 +08:00

337 lines
8.7 KiB
C

/**
* @file sdrv_crypto_mailbox_sm2.h
* @brief crypto sm2 cmd interface
*
* @copyright Copyright (c) 2021 Semidrive Semiconductor.
* All rights reserved.
*/
#ifndef SDRV_CRYPTO_MAILBOX_SM2_H
#define SDRV_CRYPTO_MAILBOX_SM2_H
#include "sdrv_crypto_mailbox_common.h"
#include "sdrv_crypto_mailbox_trng.h"
/**
* @brief CRYPTO cmd of sm2 get z.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[1];
uint8_t id_len[2];
uint8_t id_ptr[4];
uint8_t pubKey_ptr[4];
uint8_t z[4];
} cmd_sm2_getZ_t;
/**
* @brief CRYPTO cmd of sm2 get E.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[3];
uint8_t data_ptr[4];
uint8_t data_len[4];
uint8_t z[4];
uint8_t e[4];
} cmd_sm2_getE_t;
/**
* @brief CRYPTO cmd of sm2 generate key.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[1];
uint8_t key_id[2];
uint8_t pubKey_ptr[4];
uint8_t priKey_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_sm2_generatekey_t;
/**
* @brief CRYPTO cmd of sm2 get pubkey from prikey.
*/
typedef struct {
uint8_t cmd_id;
uint8_t rev1[3];
uint8_t key_id0[2];
uint8_t key_id1[2];
uint8_t priKey_ptr[4];
uint8_t pubKey_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_sm2_get_pubkey_from_prikey_t;
/**
* @brief CRYPTO cmd of sm2 genrate signature.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t rev1[2];
uint8_t e_ptr[4];
uint8_t key_id0[2];
uint8_t key_id1[2];
uint8_t priKey_ptr[4];
uint8_t signature_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_sm2_generatesignature_t;
/**
* @brief CRYPTO cmd of sm2 verify signature.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t rev1[2];
uint8_t e_ptr[4];
uint8_t pubKey_ptr[4];
uint8_t signature_ptr[4];
} cmd_sm2_verifysignature_t;
/**
* @brief CRYPTO cmd of sm2 encrypt.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t rev1[2];
uint8_t data_ptr[4];
uint8_t data_len[4];
uint8_t pubKey_ptr[4];
uint8_t cipher_ptr[4];
} cmd_sm2_encrypt_t;
/**
* @brief CRYPTO cmd of sm2 decrypt.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t rev1[2];
uint8_t cipher_ptr[4];
uint8_t cipher_len[4];
uint8_t key_id0[2];
uint8_t key_id1[2];
uint8_t priKey_ptr[4];
uint8_t data_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_sm2_decrypt_t;
/**
* @brief input pointer of sm2 exchange key.
*/
typedef struct {
uint8_t dA_ptr[4];
uint8_t RA_ptr[4];
uint8_t rA_ptr[4];
uint8_t PB_ptr[4];
uint8_t RB_ptr[4];
uint8_t ZA_ptr[4];
uint8_t ZB_ptr[4];
} sm2_exc_key_input_ptr_t;
/**
* @brief CRYPTO cmd of sm2 exchange keyinfo.
*/
typedef struct {
cmd_key_type_e dA_key_type;
uint16_t dA_key_id;
cmd_key_type_e rA_key_type;
uint16_t rA_key_id;
uint16_t enc_key_id;
cmd_key_type_e output_key_type;
uint16_t output_key_id;
} cmd_sm2_exchangekey_keyinfo_t;
/**
* @brief CRYPTO cmd of sm2 exchange key.
*/
typedef struct {
uint8_t cmd_id;
uint8_t need_high_sec_ver;
uint8_t role;
uint8_t key_len;
uint8_t key_id0[2];
uint8_t key_id1[2];
uint8_t key_id2[2];
uint8_t key_id3[2];
uint8_t input_ptr[4];
uint8_t outputKey_ptr[4];
uint8_t s1_s2_ptr[4];
uint8_t sa_sb_ptr[4];
uint8_t aut_info_ptr[4];
} cmd_sm2_exchangekey_t;
/**
* @brief CRYPTO role of sm2 exchange.
*/
typedef enum {
CMD_SM2_ROLE_SPONSOR = 0,
CMD_SM2_ROLE_RESPONSOR,
CMD_SM2_ROLE_MAX
} cmd_sm2_exchange_role_e;
/**
* @brief sm2 get z value
*
* This function get z.
*
* @param[in] id id buff
* @param[in] id_len id len
* @param[in] pubkey pubkey buff
* @param[out] z_buff out buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_get_z(uint8_t *id, uint32_t id_len,
uint8_t *pubkey, uint8_t *z_buf);
/**
* @brief get e value
*
* This function sm2 get e value
*
* @param[in] msg msg buff
* @param[in] msg_len msg len
* @param[in] z_buff z buff
* @param[out] e_buff out buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_get_e(uint8_t *msg, uint32_t msg_len,
uint8_t *z_buf, uint8_t *e_buf);
/**
* @brief sm2 get pubkey
*
* This function get pubkey from prikey.
*
* @param[in] prikey prikey buff
* @param[out] pubkey out buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_get_pubkey_from_prikey(uint8_t *prikey,
uint8_t *pubkey);
/**
* @brief sm2 generatekey
*
* This function sm2 generatekey.
*
* @param[in] generate_key_type out put key type
* @param[in] generate_key_id enc key id
* @param[out] prikey prikey buff
* @param[out] pubkey pubkey buff
* @param[in] mac_buf mac buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_generatekey(cmd_key_type_e generate_key_type,
uint16_t generate_key_id,
uint8_t *prikey, uint8_t *pubkey,
uint8_t *mac_buf);
/**
* @brief sm2 sign
*
* This function sm2 sign
*
* @param[in] e e buff
* @param[in] prikey prikey buff
* @param[in] generate_sign_key_type sign key type
* @param[in] generate_sign_key_id sign key id
* @param[out] signature signature buff
* @param[in] mac_buf mac buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_sign(uint8_t *e, uint8_t *prikey,
cmd_key_type_e generate_sign_key_type,
uint16_t generate_sign_key_id,
uint8_t *signature, uint8_t *mac_buf);
/**
* @brief sm2 verify
*
* This function sm2 verify
*
* @param[in] e e buff
* @param[in] pubkey pubkey buff
* @param[out] signature signature buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_verify(uint8_t *e, uint8_t *pubkey,
uint8_t *signature);
/**
* @brief sm2 enc
*
* This function sm2 enc
*
* @param[in] msg msg buff
* @param[in] msg_len msg_len
* @param[in] pubkey pubkey buff
* @param[out] cipher cipher buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_enc(uint8_t *msg, uint32_t msg_len,
uint8_t *pubkey, uint8_t *cipher);
/**
* @brief sm2 dec
*
* This function sm2 dec
*
* @param[in] prikey prikey buff
* @param[out] msg msg buff
* @param[in] cipher cipher buff
* @param[in] cipher_len cipher_len
* @param[in] decrypt_key_type key type
* @param[in] decrypt_key_id key id
* @param[in] mac_buff mac buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_dec(uint8_t *prikey, uint8_t *msg,
uint8_t *cipher, uint32_t cipher_len,
cmd_key_type_e decrypt_key_type,
uint16_t decrypt_key_id,
uint8_t *mac_buf);
/**
* @brief sm2 set exckey value
*
* This function set exckey value
*
* @param[in] dA dA buff
* @param[in] RA RA buff
* @param[in] rA rA buff
* @param[in] RB RB buff
* @param[in] PB PB buff
* @param[in] ZA ZA buff
* @param[in] ZB ZB buff
* @param[out] cmd_sm2_exc_key_input exc_key_input buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_set_exckey_input_ptr(
uint8_t *dA, uint8_t *RA, uint8_t *rA, uint8_t *RB,
uint8_t *PB, uint8_t *ZA, uint8_t *ZB,
sm2_exc_key_input_ptr_t *cmd_sm2_exc_key_input);
/**
* @brief sm2 exchange key
*
* This function exchange key, mac_buf len is CMD_BASIC_TWO_KEY_MAC_BUFF_LEN 64
*
* @param[in] role exchange key role
* @param[in] cmd_sm2_exckey_keyinfo exckey keyinfo
* @param[in] cmd_sm2_exc_key_input exckey key input
* @param[in] kbytelen kbytelen
* @param[in] S1 S1 buff
* @param[in] SA SA buff
* @param[out] KA KA buff
* @param[in] mac_buff mac buff
* @return CMD_RETURN_SUCCESS or error code
*/
sdrv_crypto_error_status_e cmd_sm2_exchange_key(
cmd_sm2_exchange_role_e role,
cmd_sm2_exchangekey_keyinfo_t *cmd_sm2_exckey_keyinfo,
sm2_exc_key_input_ptr_t *cmd_sm2_exc_key_input,
uint32_t kbytelen, uint8_t *S1, uint8_t *SA, uint8_t *KA,
uint8_t *mac_buf);
#endif