SemiDrive SSDK Appication Program Interface PTG3.0
Functions
sdrv_crypto_mailbox_common.h File Reference
#include <armv7-r/cache.h>
#include <sdrv_crypto_utility.h>
#include <stdint.h>
#include "sdrv_crypto_mailbox_soc_otp_key.h"

Go to the source code of this file.

Functions

uint32_t send_cmd_and_wait_response (uint32_t cmd[8])
 
uint16_t get_big_endian_2byte (void *addr)
 
uint32_t get_big_endian_4byte (void *addr)
 
void set_big_endian_2byte_back (uint8_t *addr, uint16_t data)
 
void set_big_endian_2byte (uint8_t *addr, uint16_t data)
 
void set_big_endian_4byte_back (uint8_t *addr, uint32_t data)
 
void set_big_endian_4byte (uint8_t *addr, uint32_t data)
 
void * get_real_pointer (uint8_t buf[4])
 
uint32_t cmd_get_ske_key_bytes (uint8_t crypto_alg_mode_choice)
 
uint32_t cmd_get_ske_block_bytes (uint8_t crypto_alg_mode_choice)
 
uint32_t cmd_get_hash_digest_bytes (uint8_t crypto_alg_mode_choice)
 
uint32_t cmd_get_hash_block_bytes (uint8_t crypto_alg_mode_choice)
 
uint32_t read_sec_stroge_reg (paddr_t base, uint32_t offset)
 
void write_sec_stroge_reg (paddr_t base, uint32_t offset, uint32_t data)
 

Detailed Description

Macro Definition Documentation

◆ BASIC_MGMT_CMD_BASE

#define BASIC_MGMT_CMD_BASE   (0x00)

◆ CMD_BASIC_MAC_BUFF_LEN

#define CMD_BASIC_MAC_BUFF_LEN   32

◆ CMD_BASIC_TWO_KEY_MAC_BUFF_LEN

#define CMD_BASIC_TWO_KEY_MAC_BUFF_LEN   64

◆ ECCP_CMD_BASE

#define ECCP_CMD_BASE   (0x70)

◆ ECCP_GENERATE_KEY

#define ECCP_GENERATE_KEY   (ECCP_CMD_BASE + 5)

◆ ECCP_POINT_ADDITION

#define ECCP_POINT_ADDITION   (ECCP_CMD_BASE + 2)

◆ ECCP_POINT_DOUBLING

#define ECCP_POINT_DOUBLING   (ECCP_CMD_BASE + 1)

◆ ECCP_POINT_MULTIPLICATION

#define ECCP_POINT_MULTIPLICATION   (ECCP_CMD_BASE + 3)

◆ ECCP_POINT_VERIFY

#define ECCP_POINT_VERIFY   (ECCP_CMD_BASE + 4)

◆ ECDH_EXCHANGE_KEY

#define ECDH_EXCHANGE_KEY   (ECCP_CMD_BASE + 6)

◆ ECDSA_GENERATE_SIGNATURE

#define ECDSA_GENERATE_SIGNATURE   (ECCP_CMD_BASE + 7)

◆ ECDSA_VERIFY_SIGNATURE

#define ECDSA_VERIFY_SIGNATURE   (ECCP_CMD_BASE + 8)

◆ GENERATE_AUTH_MAC

#define GENERATE_AUTH_MAC   (MAC_CMD_BASE + 3)

◆ GENERATE_KEY

#define GENERATE_KEY   (BASIC_MGMT_CMD_BASE + 4)

◆ GENERATE_MAC

#define GENERATE_MAC   (MAC_CMD_BASE + 1)

◆ GENERATE_RAND

#define GENERATE_RAND   (BASIC_MGMT_CMD_BASE + 3)

◆ GET_DEVICE_INFO

#define GET_DEVICE_INFO   (BASIC_MGMT_CMD_BASE + 1)

◆ GET_DEVICE_STATUS

#define GET_DEVICE_STATUS   (BASIC_MGMT_CMD_BASE + 2)

◆ HASH_CALC

#define HASH_CALC   (HASH_CMD_BASE + 1)

◆ HASH_CMD_BASE

#define HASH_CMD_BASE   (0xA0)

◆ KEYID_0

#define KEYID_0   (0)

◆ KEYID_1

#define KEYID_1   (1)

◆ KEYID_2

#define KEYID_2   (2)

◆ KEYID_3

#define KEYID_3   (3)

◆ KEYID_4

#define KEYID_4   (4)

◆ KEYID_5

#define KEYID_5   (5)

◆ KEYID_6

#define KEYID_6   (6)

◆ KEYID_7

#define KEYID_7   (7)

◆ KEYID_8

#define KEYID_8   (8)

◆ KEYID_9

#define KEYID_9   (9)

◆ KEYID_HALF_MASK

#define KEYID_HALF_MASK   (0x8000)

◆ KEYID_MAX

#define KEYID_MAX   SKE_MAX_KEY_IDX

◆ MAC_CMD_BASE

#define MAC_CMD_BASE   (0x10)

◆ RETRY_COUNT

#define RETRY_COUNT   (20)

◆ ROM_FIRMWARE_ADDR

#define ROM_FIRMWARE_ADDR   (0x000)

◆ ROM_VENDER_SM2_PUBKEY_ADDR

#define ROM_VENDER_SM2_PUBKEY_ADDR   (0x000)

◆ RSA_CMD_BASE

#define RSA_CMD_BASE   (0x80)

◆ RSA_CRT_DECRYPT

#define RSA_CRT_DECRYPT   (RSA_CMD_BASE + 6)

◆ RSA_CRT_GENERATE_SIGNATURE

#define RSA_CRT_GENERATE_SIGNATURE   (RSA_CMD_BASE + 8)

◆ RSA_DECRYPT

#define RSA_DECRYPT   (RSA_CMD_BASE + 5)

◆ RSA_ENCRYPT

#define RSA_ENCRYPT   (RSA_CMD_BASE + 4)

◆ RSA_GENERATE_CRT_KEY

#define RSA_GENERATE_CRT_KEY   (RSA_CMD_BASE + 3)

◆ RSA_GENERATE_KEY

#define RSA_GENERATE_KEY   (RSA_CMD_BASE + 2)

◆ RSA_GENERATE_PRIME

#define RSA_GENERATE_PRIME   (RSA_CMD_BASE + 1)

◆ RSA_GENERATE_SIGNATURE

#define RSA_GENERATE_SIGNATURE   (RSA_CMD_BASE + 7)

◆ RSA_VERIFY_SIGNATURE

#define RSA_VERIFY_SIGNATURE   (RSA_CMD_BASE + 9)

◆ SEIP_DISABLE

#define SEIP_DISABLE   (BASIC_MGMT_CMD_BASE + 7)

◆ SEIP_JUMP

#define SEIP_JUMP   (BASIC_MGMT_CMD_BASE + 6)

◆ SELF_DESTROY

#define SELF_DESTROY   (BASIC_MGMT_CMD_BASE + 5)

◆ SENSOR_CLK_CFG

#define SENSOR_CLK_CFG   (BASIC_MGMT_CMD_BASE + 8)

◆ SKE_AEAD_DECRYPT_GCM

#define SKE_AEAD_DECRYPT_GCM   (SKE_CMD_BASE + 4)

◆ SKE_AEAD_ENCRYPT_GCM

#define SKE_AEAD_ENCRYPT_GCM   (SKE_CMD_BASE + 3)

◆ SKE_CMD_BASE

#define SKE_CMD_BASE   (0x20)

◆ SKE_DECRYPT

#define SKE_DECRYPT   (SKE_CMD_BASE + 2)

◆ SKE_ENCRYPT

#define SKE_ENCRYPT   (SKE_CMD_BASE + 1)

◆ SKE_MAX_KEY_IDX

#define SKE_MAX_KEY_IDX   (9)

◆ SM2_CMD_BASE

#define SM2_CMD_BASE   (0x40)

◆ SM2_DECRYPT

#define SM2_DECRYPT   (SM2_CMD_BASE + 7)

◆ SM2_ENCRYPT

#define SM2_ENCRYPT   (SM2_CMD_BASE + 6)

◆ SM2_EXCHANGE_KEY

#define SM2_EXCHANGE_KEY   (SM2_CMD_BASE + 8)

◆ SM2_GENERATE_KEY

#define SM2_GENERATE_KEY   (SM2_CMD_BASE + 3)

◆ SM2_GENERATE_SIGNATURE

#define SM2_GENERATE_SIGNATURE   (SM2_CMD_BASE + 4)

◆ SM2_GET_E

#define SM2_GET_E   (SM2_CMD_BASE + 2)

◆ SM2_GET_PUB_KEY

#define SM2_GET_PUB_KEY   (SM2_CMD_BASE + 9)

◆ SM2_GET_Z

#define SM2_GET_Z   (SM2_CMD_BASE + 1)

◆ SM2_VERIFY_SIGNATURE

#define SM2_VERIFY_SIGNATURE   (SM2_CMD_BASE + 5)

◆ SM9_CMD_BASE

#define SM9_CMD_BASE   (0x50)

◆ SM9_DECRYPT

#define SM9_DECRYPT   (SM9_CMD_BASE + 10)

◆ SM9_ENC_GENERATE_MASTER_KEY

#define SM9_ENC_GENERATE_MASTER_KEY   (SM9_CMD_BASE + 5)

◆ SM9_ENC_GENERATE_USER_PRIVATE_KEY

#define SM9_ENC_GENERATE_USER_PRIVATE_KEY   (SM9_CMD_BASE + 6)

◆ SM9_ENCRYPT

#define SM9_ENCRYPT   (SM9_CMD_BASE + 9)

◆ SM9_EXCHANGE_KEY

#define SM9_EXCHANGE_KEY   (SM9_CMD_BASE + 14)

◆ SM9_EXCKEY_GENERATE_MASTER_KEY

#define SM9_EXCKEY_GENERATE_MASTER_KEY   (SM9_CMD_BASE + 11)

◆ SM9_EXCKEY_GENERATE_USER_PRIVATE_KEY

#define SM9_EXCKEY_GENERATE_USER_PRIVATE_KEY   (SM9_CMD_BASE + 12)

◆ SM9_EXCKEY_GENERATE_USER_TMP_KEY

#define SM9_EXCKEY_GENERATE_USER_TMP_KEY   (SM9_CMD_BASE + 13)

◆ SM9_GENERATE_SIGNATURE

#define SM9_GENERATE_SIGNATURE   (SM9_CMD_BASE + 3)

◆ SM9_SIGN_GENERATE_MASTER_KEY

#define SM9_SIGN_GENERATE_MASTER_KEY   (SM9_CMD_BASE + 1)

◆ SM9_SIGN_GENERATE_USER_PRIVATE_KEY

#define SM9_SIGN_GENERATE_USER_PRIVATE_KEY   (SM9_CMD_BASE + 2)

◆ SM9_UNWRAP_KEY

#define SM9_UNWRAP_KEY   (SM9_CMD_BASE + 8)

◆ SM9_VERIFY_SIGNATURE

#define SM9_VERIFY_SIGNATURE   (SM9_CMD_BASE + 4)

◆ SM9_WRAP_KEY

#define SM9_WRAP_KEY   (SM9_CMD_BASE + 7)

◆ VERIFY_MAC

#define VERIFY_MAC   (MAC_CMD_BASE + 2)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

CRYPTO algo type.

Enumerator
HASH_ALG_SM3 
HASH_ALG_SHA256 
HASH_ALG_SHA384 
HASH_ALG_SHA512 
HASH_ALG_SHA224 
HASH_ALG_SHA512_224 
HASH_ALG_SHA512_256 
HMAC_ALG_SM3 
HMAC_ALG_SHA256 
HMAC_ALG_SHA384 
HMAC_ALG_SHA512 
HMAC_ALG_SHA224 
HMAC_ALG_SHA512_224 
HMAC_ALG_SHA512_256 
CBC_MAC_SKE_ALG_DES 
CBC_MAC_SKE_ALG_TDES_128 
CBC_MAC_SKE_ALG_TDES_192 
CBC_MAC_SKE_ALG_AES_128 
CBC_MAC_SKE_ALG_AES_192 
CBC_MAC_SKE_ALG_AES_256 
CBC_MAC_SKE_ALG_SM4 
CMAC_SKE_ALG_AES_128 
CMAC_SKE_ALG_AES_192 
CMAC_SKE_ALG_AES_256 
CMAC_SKE_ALG_SM4 
SKE_ALG_DES_ECB 
SKE_ALG_DES_CBC 
SKE_ALG_DES_CFB 
SKE_ALG_DES_OFB 
SKE_ALG_DES_CTR 
SKE_ALG_TDES_128_ECB 
SKE_ALG_TDES_128_CBC 
SKE_ALG_TDES_128_CFB 
SKE_ALG_TDES_128_OFB 
SKE_ALG_TDES_128_CTR 
SKE_ALG_TDES_192_ECB 
SKE_ALG_TDES_192_CBC 
SKE_ALG_TDES_192_CFB 
SKE_ALG_TDES_192_OFB 
SKE_ALG_TDES_192_CTR 
SKE_ALG_AES_128_ECB 
SKE_ALG_AES_128_CBC 
SKE_ALG_AES_128_CFB 
SKE_ALG_AES_128_OFB 
SKE_ALG_AES_128_CTR 
SKE_ALG_AES_128_XTS 
SKE_ALG_AES_128_GCM 
SKE_ALG_AES_192_ECB 
SKE_ALG_AES_192_CBC 
SKE_ALG_AES_192_CFB 
SKE_ALG_AES_192_OFB 
SKE_ALG_AES_192_CTR 
SKE_ALG_AES_192_XTS 
SKE_ALG_AES_192_GCM 
SKE_ALG_AES_256_ECB 
SKE_ALG_AES_256_CBC 
SKE_ALG_AES_256_CFB 
SKE_ALG_AES_256_OFB 
SKE_ALG_AES_256_CTR 
SKE_ALG_AES_256_XTS 
SKE_ALG_AES_256_GCM 
SKE_ALG_SM4_ECB 
SKE_ALG_SM4_CBC 
SKE_ALG_SM4_CFB 
SKE_ALG_SM4_OFB 
SKE_ALG_SM4_CTR 
SKE_ALG_SM4_XTS 
SKE_ALG_SM4_GCM 
PKE_ALG_SM2 
PKE_ALG_RSA 
PKE_ALG_ECC 

◆ cmd_key_type_e

CRYPTO key type.

Enumerator
CMD_KEY_INTERNAL 
CMD_KEY_EXTERNAL_PLAINTEXT 
CMD_KEY_EXTERNAL_CIPHERTEXT 
CMD_KEY_MAX 

◆ Crypto_HsmInitReturnType

CRYPTO init return type.

Enumerator
CRYPTO_HSM_INIT_OK 

hsm init success

CRYPTO_HSM_INIT_RESET_FAIL 

hsm reset fail,check power

CRYPTO_HSM_INIT_BOOT_TIMEOUT 

hsm boot timeout, check HSM reg mem region type

CRYPTO_HSM_INIT_BOOT_FAIL 

hsm boot fail, check clk&reset

CRYPTO_HSM_INIT_PRODUCT_ERROR 

hsm product flag error ,check fuse

CRYPTO_HSM_INIT_TYPE_MAX 

HSM init return type max

◆ ERR_CODE

enum ERR_CODE
Enumerator
SEIP_SUCCESS 
SEIP_ERROR 
SEIP_FW_VER_SUCCESS 
SEIP_FW_VER_ERROR 
SEIP_SKE_ALARM 
SEIP_ERROR_NOT_ALIGNED_BY_WORD 
SEIP_ERROR_MODE_INVALID 
SEIP_ERROR_VALUE_INVALID 
SEIP_ERROR_LENGTH_INVALID 
SEIP_ERROR_KEK_ENCRYPT_FAIL 
SEIP_ERROR_KEK_DECRYPT_FAIL 
SEIP_ERROR_KEYID0_FAIL 
SEIP_ERROR_KEYID1_FAIL 
SEIP_ERROR_KEYID2_FAIL 
SEIP_ERROR_KEYID3_FAIL 
SEIP_ERROR_KEYID_ZERO 
SEIP_ERROR_KEYID_INVALID 
SEIP_ERROR_KEYID_INVALID2 
SEIP_ERROR_AUTH_KEY_FAIL 
SEIP_ERROR_SKE_FAIL 
SEIP_ERROR_SKE_ALG_INVALID 
SEIP_ERROR_SKE_SET_SEED_FAIL 
SEIP_ERROR_TRNG_FAIL 
SEIP_ERROR_BOOTMODE_FAIL 
SEIP_ERROR_COMPARE_FAIL 
SEIP_ERROR_COMPARE_FAIL2 
SEIP_ERROR_COMPARE_FAIL3 
SEIP_ERROR_HASH_ALG_INVALID 
SEIP_ERROR_HASH_FAIL 
SEIP_ERROR_HMAC_FAIL 
SEIP_ERROR_ECC_CURVE_INVALID 
SEIP_ERROR_ECC_PD_FAIL 
SEIP_ERROR_ECC_PA_FAIL 
SEIP_ERROR_ECC_PM_FAIL 
SEIP_ERROR_ECC_GET_KEY_FAIL 
SEIP_ERROR_ECDSA_SIGN_FAIL 
SEIP_ERROR_ECDSA_VERIFY_FAIL 
SEIP_ERROR_GET_PRIME_FAIL 
SEIP_ERROR_RSA_GET_KEY_FAIL 
SEIP_ERROR_RSA_FAIL 
SEIP_ERROR_SM2_GET_KEY_FAIL 
SEIP_ERROR_SM2_SIGN_FAIL 
SEIP_ERROR_SM2_VERIFY_FAIL 
SEIP_ERROR_SM2_ENCRYPT_FAIL 
SEIP_ERROR_SM2_DECRYPT_FAIL 
SEIP_ERROR_SM2_EXCHANGE_FAIL 
SEIP_ERROR_SM9_FAIL 

Function Documentation

◆ cmd_get_hash_block_bytes()

uint32_t cmd_get_hash_block_bytes ( uint8_t  crypto_alg_mode_choice)

get HASH block bytes.

This function is used to get block bytes of HASH type.

Parameters
[in]HASHalgorithm mode type.
Returns
block bytes of HASH algorithm type.

◆ cmd_get_hash_digest_bytes()

uint32_t cmd_get_hash_digest_bytes ( uint8_t  crypto_alg_mode_choice)

get HASH digest bytes.

This function is used to get digest bytes of HASH type.

Parameters
[in]HASHalgorithm mode type.
Returns
digest bytes of HASH algorithm type.

◆ cmd_get_ske_block_bytes()

uint32_t cmd_get_ske_block_bytes ( uint8_t  crypto_alg_mode_choice)

get block bytes of SKE algorithm type.

This function is used to get block bytes of SKE algorithm type.

Parameters
[in]algorithmmode type.
Returns
block bytes of SKE algorithm type.

◆ cmd_get_ske_key_bytes()

uint32_t cmd_get_ske_key_bytes ( uint8_t  crypto_alg_mode_choice)

get key bytes of SKE algorithm type.

This function is used to get key bytes of SKE algorithm type.

Parameters
[in]algorithmmode type.
Returns
key bytes of SKE algorithm type.

◆ get_big_endian_2byte()

uint16_t get_big_endian_2byte ( void *  addr)

get 2 bytes big-endian data.

This function is used to convert 2 bytes of little-endian data into big-endian data.

Parameters
[in]addraddress of 2 byte little-endian data.
Returns
2 byte big-endian data.

◆ get_big_endian_4byte()

uint32_t get_big_endian_4byte ( void *  addr)

get 4 bytes big-endian data.

This function is used to convert 4 bytes of little-endian data into big-endian data.

Parameters
[in]addraddress of 4 bytes little-endian data.
Returns
4 bytes big-endian data.

◆ get_real_pointer()

void * get_real_pointer ( uint8_t  buf[4])

get the real pointer address.

This function is used to convert 4 bytes of big-endian address into little-endian address.

Parameters
[in]bufbuff to store big-endian address.
Returns
little-endian address.

◆ read_sec_stroge_reg()

uint32_t read_sec_stroge_reg ( paddr_t  base,
uint32_t  offset 
)

read secure stroge registers.

This function is used to read secure stroge registers with dynamic clock.

Parameters
[in]baseaddress of secure stroge
[in]offsetexpected to be read
Returns
read value.

◆ send_cmd_and_wait_response()

uint32_t send_cmd_and_wait_response ( uint32_t  cmd[8])

Sdrv CRYPTO send cmd.

This function is used to send cmd and wait response.

Parameters
[in]cmdthe cmd buff to be send.
Returns
The result of cmd exesution.

◆ set_big_endian_2byte()

void set_big_endian_2byte ( uint8_t *  addr,
uint16_t  data 
)

set 2 bytes big-endian data.

This function is used to convert 2 bytes of little-endian data into big-endian data.

Parameters
[in]datadata to be convert.
[out]addrdestination address.

◆ set_big_endian_2byte_back()

void set_big_endian_2byte_back ( uint8_t *  addr,
uint16_t  data 
)

backup 2 bytes data.

This function is used to backup data.

Parameters
[in]datadata to be backed up.
[out]addrdestination address.

◆ set_big_endian_4byte()

void set_big_endian_4byte ( uint8_t *  addr,
uint32_t  data 
)

set 4 bytes big-endian data.

This function is used to convert 4 bytes of little-endian data into big-endian data.

Parameters
[in]datadata to be convert.
[out]addrdestination address.

◆ set_big_endian_4byte_back()

void set_big_endian_4byte_back ( uint8_t *  addr,
uint32_t  data 
)

backup 4 bytes data.

This function is used to backup data.

Parameters
[in]datadata to be backed up.
[out]addrdestination address.

◆ write_sec_stroge_reg()

void write_sec_stroge_reg ( paddr_t  base,
uint32_t  offset,
uint32_t  data 
)

write secure stroge registers.

This function is used to write secure stroge registers with dynamic clock.

Parameters
[in]baseaddress of secure stroge
[in]offsetexpected to be write
[in]data