综述
hks_types.h是Huks模块中关键的头文件,其中对密钥参数、密钥的算法格式、密钥加密解密所用信息、证书链等用结构体进行了封装。
宏定义
#define HKS_SDK_VERSION "1.0.0.10"//版本号
#define HKS_BOOL_FALSE 0//布尔值错误
#define HKS_BOOL_TRUE 1
#define HKS_ALIAS_MAX_SIZE 64//别名最大长度
#define HKS_SALT_MAX_SIZE 16//系统添加的随机数(用来散列化密码)
#define HKS_NONCE_MIN_SIZE 7//临时的随机数最小值
#define HKS_KEY_BYTES_CURVE25519 32//基于CURVE25519算法的位宽
#define HKS_RANDOM_MAX_LEN 1024//随机数最大长度
#define HKS_MAX_KEY_LEN_128 128//最大密码长度
#define HKS_MAX_KEY_LEN_192 192
#define HKS_MAX_KEY_LEN_256 256
#define HKS_KEY_DERIVE_LEN 32
#define HKS_BINARY_OF_DEC 10//二进制的十进制表现
#define HKS_BINARY_OF_HEX 16//二进制的十六进制表现
#define HKS_HASH256_MIN_OUT_SIZE 32
#define HKS_HASH512_MIN_OUT_SIZE 64
#define HKS_DERIVED_KEY_MIN_OUT_SIZE 16
#define HKS_BITS_PER_BYTES 8//每字节占八位比特
#define HKS_SIGNATURE_MIN_SIZE 64//数字签名最小长度
#define HKS_RSA2048_SIGNATURE_SIZE 256//基于RSA2048的数字签名长度
#define HKS_PUBLIC_BYTES_ED25519 32//基于E25519产生的公开数字签名字节长度
#define HKS_PRIVATE_BYTES_ED25519 64
#define HKS_KEY_PAIR_CIPHER_ED25519 80//基于ED25519生成的密钥对
#define HKS_HEADER_HASH_SIZE 64
#define HKS_AUTH_ID_MAX_SIZE 64//授权id最大长度
#define HKS_KEY_LEN_RSA_KEYPAIR 2048
#define HKS_CHALLENGE_MIN_LEN 16//挑战码最小长度
#define HKS_CHALLENGE_MAX_LEN 128//挑战码最大长度
#define HKS_ENCRYPTED_KEY_TAG_LEN 16//被加密的密钥的标签
#define HKS_ENCRYPTED_KEY_NONCE_LEN 16//被加密的一次性随机数长度
#define HKS_ENCRYPTED_KEY_AAD_LEN 16
关键结构体
hks_blob
这个结构体描述了数据的类型、地址、大小,是下面许多结构体的基石。
struct hks_blob {
uint8_t type;//数据类型
uint8_t *data;//数据地址
uint32_t size;//数据大小
};
密钥参数结构体
struct hks_key_param {//密钥参数
uint32_t key_type; /* algorithm *///密钥类型
uint32_t key_len;//密钥长度
uint32_t key_usage; /* usage *///密钥用法
uint32_t key_pad; /* Fill mode *///密码填充
uint32_t key_mode; /* Group mode *///密码模式
uint32_t key_role; /* role */
uint16_t key_domain;//密钥域
struct hks_blob key_auth_id; /* auth id */
};
加密解密所用的参数
struct hks_crypt_param {
struct hks_blob nonce; /* Nonce value or iv vector */ //在密码散列时系统添加的随机数或向量
struct hks_blob aad;//附加的验证数据
};
加密所用的信息
struct hks_encrypt_material {
struct hks_blob *cipher_text;//加密信息
struct hks_blob *nonce_blob; /* Nonce value or iv vector *///一次性随机数的区域
struct hks_blob *aad_blob;//附加的验证数据区域
struct hks_blob *plain_text;//纯文本数据、明文
struct hks_storage_key_info *key_info;//密钥信息
uint32_t sealing_alg;
};
证书链
struct hks_cert_chain {
uint32_t count;//证书总数
struct hks_blob *cert; /* cert array list *///存储证书的地址
};
hks_usage_spec
struct hks_usage_spec {
uint32_t mode;//模式
uint32_t padding;//填充
uint32_t digest;//摘要
void *param; /* extended param *///参数
};