安全密钥库模块下的hks_bn相关代码分析
本篇文章主要分析安全模块下hks_bn.h和hks_bn.c文件分析。
一、代码分析这两个文件全称Harmony Universal KeyStore_bignum,顾名思义,这是鸿蒙密钥库部分中的大数处理,最一些特别大的数据进行处理,主要基于mbedtls/bignum.h 头文件下对一些大数结构体以及处理函数的定义。 大数结构体
typedef struct mbedtls_mpi
{
int s; /*标记为用来表示符号位,-1表示负数,1表示证书*/
size_t n; /*大小长度*/
mbedtls_mpi_uint *p; /*!< 无符号数字 */
}
1.头文件hks_bn.h
#ifndef HKS_BN_H
#define HKS_BN_H
#include
//mbedtls下大数处理的头文件,不同于bignum.h
#include "hks_types.h"
//下面申明相关函数
void hks_bn_free(mbedtls_mpi *bn);
void hks_bn_init(mbedtls_mpi *bn);
int32_t hks_bn_import(mbedtls_mpi *bn, const unsigned char *data, size_t size);//引入大数
int32_t hks_bn_export(const mbedtls_mpi *bn, unsigned char *data, size_t size);//导出大数
/* computes x = a^e mod n */
int32_t hks_bn_mpi_exp_mod(mbedtls_mpi *x, const mbedtls_mpi *a,//指数运算
const mbedtls_mpi *e, const mbedtls_mpi *n);
#endif /* HKS_BN_H */
2.源文件hks_bn.c
#include "hks_bn.h"//基于国密算法的大数运算处理
void hks_bn_init(mbedtls_mpi *bn)//初始化大数
{
mbedtls_mpi_init(bn);//对大数bn结构体初始化处理
}
void hks_bn_free(mbedtls_mpi *bn)//释放大数结构体
{
mbedtls_mpi_free(bn);//释放大数结构体
}
int32_t hks_bn_import(mbedtls_mpi *bn, const unsigned char *data, size_t size)//引入大数,从data数组中读取大数写进bn
{
return mbedtls_mpi_read_binary(bn, data, size);//读取二进制文件
}
int32_t hks_bn_export(const mbedtls_mpi *bn, unsigned char *data, size_t size)//将大数以数组形式导出
{
return mbedtls_mpi_write_binary(bn, data, size);//将大数结构体写进二进制文件存进data
}
int32_t hks_bn_mpi_exp_mod(mbedtls_mpi *x, const mbedtls_mpi *a,//进行指数运算并取模运算
const mbedtls_mpi *e, const mbedtls_mpi *n)
{
return mbedtls_mpi_exp_mod(x, a, e, n, NULL);//对大数进行指数运算
//该运算表示x = a^e mod n
}
感谢阅读点赞。