Huks模块之hks_type.h代码评注

综述

该头文件主要用于对密钥相关的格式进行结构体包装。很多的hks模块都基于这个头文件来定义,比如framework文件下的hks_access.c与interface文件下的hks_client.c。

结构体

二进制存储地址

struct HksBlob {
    uint32_t size;//数据大小
    uint8_t *data;//数据地址
};

hks参数

struct HksParam {
    uint32_t tag;
    union {
        bool boolParam;
        int32_t int32Param;
        uint32_t uint32Param;
        uint64_t uint64Param;
        struct HksBlob blob;
    };
};

hks参数设置

参数列表大小
参数列表内的参数总数
存储参数列表的结构体数组

struct HksParamSet {
    uint32_t paramSetSize;
    uint32_t paramsCnt;
    struct HksParam params[];
};

证书链

证书链表
证书总数

struct HksCertChain {
    struct HksBlob *certs;
    uint32_t certsCount;
};

密钥信息

密钥别名
密钥参数列表

struct HksKeyInfo {
    struct HksBlob alias;
    struct HksParamSet *paramSet;
};

公钥信息

struct HksPubKeyInfo {
    enum HksKeyAlg keyAlg;
    uint32_t keySize;
    uint32_t nOrXSize;
    uint32_t eOrYSize;
    uint32_t placeHolder;
};
#define HKS_DERIVE_DEFAULT_SALT_LEN 16//派生默认加盐值长度
#define HKS_HMAC_DIGEST_SHA512_LEN 64
#define HKS_DEFAULT_RANDOM_LEN 16//默认随机数长度
#define HKS_MAX_KEY_AUTH_ID_LEN 64//最大密钥授权id
#define HKS_KEY_MATERIAL_NUM 3
#define HKS_MAX_KEY_LEN (HKS_KEY_BYTES(HKS_RSA_KEY_SIZE_4096) * HKS_KEY_MATERIAL_NUM)
#define HKS_MAX_KEY_MATERIAL_LEN (sizeof(struct HksPubKeyInfo) + HKS_MAX_KEY_LEN + HKS_AE_TAG_LEN)

存储头文件信息

struct HksStoreHeaderInfo {
    uint16_t version;//版本
    uint16_t keyCount;//密钥总数
    uint32_t totalLen; /* key buffer total len *///密钥所占总长度
    uint32_t sealingAlg;//封盖地址信息组
    uint8_t salt[HKS_DERIVE_DEFAULT_SALT_LEN];//加盐值的数组
    uint8_t hmac[HKS_HMAC_DIGEST_SHA512_LEN];//哈希运算消息认证码
};

存储密钥信息

struct HksStoreKeyInfo {
    uint16_t keyInfoLen; /* current keyinfo len */
    uint16_t keySize;    /* keySize of key from crypto hal after encrypted */
    uint8_t random[HKS_DEFAULT_RANDOM_LEN];
    uint8_t flag;        //标志:导入/生成
    uint8_t keyAlg;//密钥地址信息组
    uint8_t keyMode;//密钥模式
    uint8_t digest;//摘要
    uint8_t padding;//密钥填充
    uint8_t rsv;//储存
    uint16_t keyLen;     //密钥长度
    uint32_t purpose;//密钥目的
    uint32_t role;//密钥作用
    uint16_t domain;//定义域
    uint8_t aliasSize;//别名大小
    uint8_t authIdSize;//授权id大小
};

密钥对,公钥私钥大小

struct Hks25519KeyPair {
    uint32_t publicBufferSize;
    uint32_t privateBufferSize;
};

静态函数声明

判断是否溢出

//功能:内联函数,判断a+b是否超过uint32_t最大可表示范围,超过则返回1,否则返回0
//传参:两个uint32_t类型的变量
//返回值:超过则返回1,否则返回0

static inline bool IsAdditionOverflow(uint32_t a, uint32_t b)
{
    return (UINT32_MAX - a) < b;
}

判断长度是否无效

//功能:判断长度是否无效,长度为零或大于最大的存放二进制的地址范围,无效则返回1,否则返回0
//传参:uint32_t类型的标识长度的值
//返回值:无效则返回1,否则返回0

static inline bool IsInvalidLength(uint32_t length)
{
    return (length == 0) || (length > MAX_OUT_BLOB_SIZE);
}

判断地址是否有效

//传参:HksBlob类型的地址
//返回值:宏定义的有效标志

static inline int32_t CheckBlob(const struct HksBlob *blob)
{
    if ((blob == NULL) || (blob->data == NULL) || (blob->size == 0)) {
        return HKS_ERROR_INVALID_ARGUMENT;
    }
    return HKS_SUCCESS;
    //检查该指针不为空,地址内的数据不为空,地址大小不为零,返回有效
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值