121 lines
3.6 KiB
C
121 lines
3.6 KiB
C
![]() |
/*
|
||
|
Copyright (c), 2001-2022, Shenshu Tech. Co., Ltd.
|
||
|
*/
|
||
|
|
||
|
#ifndef OT_COMMON_KLAD_H
|
||
|
#define OT_COMMON_KLAD_H
|
||
|
|
||
|
#include "ot_type.h"
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
extern "C" {
|
||
|
#endif
|
||
|
|
||
|
/* klad error code value */
|
||
|
#define OT_ERR_KLAD_NOT_INIT 0x805D0000
|
||
|
#define OT_ERR_KLAD_FAILED_INIT 0x805D0001
|
||
|
#define OT_ERR_KLAD_NULL_PTR 0x805D0002
|
||
|
#define OT_ERR_KLAD_INVALID_PARAM 0x805D0003
|
||
|
#define OT_ERR_KLAD_FAILED_CREATE_DEV 0x805D0004
|
||
|
#define OT_ERR_KLAD_DEVICE_BUSY 0x805D0005
|
||
|
#define OT_ERR_KLAD_FAILED_SEC_FUNC 0x805D0006
|
||
|
#define OT_ERR_KLAD_TIMEOUT 0x805D0007
|
||
|
#define OT_ERR_KLAD_FAILED_MEM 0x805D0008
|
||
|
#define OT_ERR_KLAD_FAILED_OPERATE 0x805D0009
|
||
|
#define OT_ERR_KLAD_INVALID_OWNER 0x805D000A
|
||
|
#define OT_ERR_KLAD_INVALID_HANDLE 0x805D000B
|
||
|
|
||
|
/* klad max key length */
|
||
|
#define OT_KLAD_MAX_KEY_LEN 32
|
||
|
|
||
|
/* klad rootkey select */
|
||
|
typedef enum {
|
||
|
OT_KLAD_ROOTKEY_SEL_OEM0 = 0x00,
|
||
|
OT_KLAD_ROOTKEY_SEL_OEM1,
|
||
|
OT_KLAD_ROOTKEY_SEL_OEM2,
|
||
|
OT_KLAD_ROOTKEY_SEL_OEM3,
|
||
|
OT_KLAD_ROOTKEY_SEL_VENDOR,
|
||
|
OT_KLAD_ROOTKEY_SEL_BUTT,
|
||
|
} ot_klad_rootkey_sel;
|
||
|
|
||
|
typedef enum {
|
||
|
OT_KLAD_ROOTKEY_SEC_REE = 0x00, /* REE key, TEE CPU can select ree key */
|
||
|
OT_KLAD_ROOTKEY_SEC_TEE, /* TEE key, REE CPU can't select tee key */
|
||
|
OT_KLAD_ROOTKEY_SEC_BUTT,
|
||
|
} ot_klad_rootkey_secure;
|
||
|
|
||
|
/* only OT_KLAD_TYPE_COMMON is valid */
|
||
|
typedef struct {
|
||
|
td_u32 owner_id; /* Derivative material, used for mcipher */
|
||
|
ot_klad_rootkey_sel key_sel; /* common klad route select rootkey */
|
||
|
ot_klad_rootkey_secure key_secure; /* Static value select: for ree key or for tee key */
|
||
|
} ot_klad_rootkey_attr;
|
||
|
|
||
|
/* klad route select */
|
||
|
typedef enum {
|
||
|
OT_KLAD_TYPE_CLEARCW, /* Used for clear key */
|
||
|
OT_KLAD_TYPE_COMMON, /* Used for root key */
|
||
|
OT_KLAD_TYPE_BUTT,
|
||
|
} ot_klad_type;
|
||
|
|
||
|
/* klad config */
|
||
|
typedef struct {
|
||
|
ot_klad_type klad_type; /* klad route select: common/clear */
|
||
|
ot_klad_rootkey_attr rootkey_attr; /* rootkey attr, OT_KLAD_TYPE_COMMON is valid */
|
||
|
} ot_klad_cfg;
|
||
|
|
||
|
typedef enum {
|
||
|
OT_KLAD_CRYPTO_ALG_AES = 0,
|
||
|
OT_KLAD_CRYPTO_ALG_SM4,
|
||
|
OT_KLAD_CRYPTO_ALG_BUTT,
|
||
|
} ot_klad_crypto_alg; /* The content key can be used for which algorithm of the crypto engine. */
|
||
|
|
||
|
/* klad attribute */
|
||
|
typedef struct {
|
||
|
ot_klad_cfg klad_cfg;
|
||
|
} ot_klad_attr;
|
||
|
|
||
|
/* klad algorithm */
|
||
|
typedef enum {
|
||
|
OT_KLAD_ALG_TYPE_AES = 0,
|
||
|
OT_KLAD_ALG_TYPE_SM4,
|
||
|
OT_KLAD_ALG_TYPE_BUTT,
|
||
|
} ot_klad_alg_type;
|
||
|
|
||
|
/* klad level */
|
||
|
typedef enum {
|
||
|
OT_KLAD_LEVEL1 = 0,
|
||
|
OT_KLAD_LEVEL2,
|
||
|
OT_KLAD_LEVEL3,
|
||
|
OT_KLAD_LEVEL_BUTT,
|
||
|
} ot_klad_level;
|
||
|
|
||
|
/* session key: set 1~n-1 stage common route klad */
|
||
|
typedef struct {
|
||
|
ot_klad_level level; /* klad level */
|
||
|
ot_klad_alg_type alg; /* klad algorithm */
|
||
|
td_u32 key_size; /* klad key size */
|
||
|
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
|
||
|
} ot_klad_session_key;
|
||
|
|
||
|
/* content key: set n stage common route klad */
|
||
|
typedef struct {
|
||
|
ot_klad_alg_type alg; /* klad algorithm */
|
||
|
ot_klad_crypto_alg crypto_alg; /* allowed target engine algorithm. */
|
||
|
td_u32 key_size; /* klad key size */
|
||
|
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
|
||
|
} ot_klad_content_key;
|
||
|
|
||
|
/* clear key: set clear route klad */
|
||
|
typedef struct {
|
||
|
ot_klad_crypto_alg crypto_alg; /* allowed target engine algorithm. */
|
||
|
td_u32 key_size; /* klad key size */
|
||
|
td_u8 key[OT_KLAD_MAX_KEY_LEN]; /* klad key */
|
||
|
} ot_klad_clear_key;
|
||
|
|
||
|
#ifdef __cplusplus
|
||
|
}
|
||
|
#endif
|
||
|
|
||
|
#endif /* OT_COMMON_KLAD_H */
|