ss928_framework/ss928sdk/include/ot_common_klad.h

121 lines
3.6 KiB
C
Raw Normal View History

2024-12-16 13:31:45 +08:00
/*
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 */