提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
前两篇文章介绍了安全模组的硬件,今天对HSM100安全模组的二次开发库进行相关介绍。
一、二次开发库文件结构说明
- HSM100_kei.lib 是keil 编辑器编译出的库,即二次开发库
- hsm100_api.h 是 二次开发库中的功能函数的API函数
- hsm_driver.h 是二次开发库使用需要调用的驱动函数,如(SPI 驱动初始化,延时等)
二、API接口函数说明
/**
* @file hsm100_api.h
* @brief HSM100 二次开发库供外部调用的API接口函数
* @details
* @author
* @date
* @version V1.0
* @par Copyright(c):
*/
#ifndef __HSM100_API_H_
#define __HSM100_API_H_
#include "hsm100_driver.h"
//返回类型
typedef unsigned char HSM_RET_BOOL;
//返回类型宏定义
#define HSM_RET_TRUE 0
#define HSM_RET_FALSE 1
//二次开发库初始化函数
extern void HSM100_encryptlib_init(uint8_t val);
//------------------ 基础功能 --------------------------//
//获取模组的序列号
extern HSM_RET_BOOL HSM100_GetSN(uint8_t* outputSN);
//生成随机数
extern HSM_RET_BOOL HSM100_GetRandom(uint32_t output_len, uint8_t* out_random);
//------------------ 哈希功能 --------------------------//
//哈希一次功能函数
extern HSM_RET_BOOL Hash_Once(uint8_t P1, uint8_t* Input_Message, uint32_t message_len, uint8_t* OutPut_Hash);
//哈希数据包
extern HSM_RET_BOOL Hash_Package(uint8_t* Input_Message, uint32_t Package_Len, uint8_t* OutPut_Hash);
//哈希MCU FLASH 数据
extern HSM_RET_BOOL Hash_image(uint32_t* Input_Message, uint32_t Package_Len, uint8_t* OutPut_Hash);
//------------------ 消息鉴别码功能 --------------------------//
//单组消息鉴别码
extern HSM_RET_BOOL MAC_Once(uint8_t KeyId, uint8_t* Input_data, uint16_t length, uint8_t* OutputMAC);
//------------------ SM2国密算法 --------------------------//
//导入SM2密钥
extern HSM_RET_BOOL SM2_Import_Key(uint8_t SM2_KeyId, uint8_t KeyType, uint8_t ExportEn, uint8_t* PublicKey, uint8_t* PrivateKey);
//导出SM2密钥
extern HSM_RET_BOOL SM2_Export_Key(uint8_t SM2_KeyId, uint8_t KeyType, uint8_t* PubKey, uint8_t* PriKey);
//对需要SM2签名的大包数据进行哈希
extern HSM_RET_BOOL SM2_Calc_HASH(uint8_t SM2_KeyId, uint8_t* Input_data, uint8_t length, uint8_t* OutPut_Hash);
//对数据进行SM2签名
extern HSM_RET_BOOL SM2_Seed_Sign(uint8_t SM2_KeyId, uint8_t * Hash_Val, uint8_t* random,uint8_t * Output_Signature);
//对数据进行SM2验签
extern HSM_RET_BOOL SM2_Verify(uint8_t Key_ID, uint8_t* Hash_Val, uint8_t* Signature);
//------------------ 对称算法功能 --------------------------//
//导入对称算法密钥
extern HSM_RET_BOOL Import_Sym_Key(uint8_t* Input_Key, uint8_t Sym_KeyId);
//使用对称算法加密
extern HSM_RET_BOOL Sym_Encrypt(uint8_t Sym_KeyId, uint8_t* Input_data, uint16_t length, uint8_t* Output_data);
//使用对称算法解密
extern HSM_RET_BOOL Sym_Decrypt(uint8_t ID, uint8_t* Input_data, uint16_t length, uint8_t* Output_data);
//------------------ 存储功能 --------------------------//
//写数据到安全模组
extern HSM_RET_BOOL Read_User_Data_with_authenticate(uint8_t Sym_KeyId, uint32_t address, uint8_t* readout_data, uint32_t data_Len);
//从安全模组读数据
extern HSM_RET_BOOL Write_User_Data_with_authenticate(uint8_t Sym_KeyId, uint32_t address, uint8_t* data, uint32_t data_Len);
#endif
三、API函数需要调用的驱动函数
/**
* @file hsm100_driver.h
* @brief 模组需要的GPIO、 SPI驱动函数、打印函数,供HSM100_lib库调用
* @details 具体驱动函数原型用户自行实现,可在其他.c文件中实现,声明在这
* @author
* @date
* @version V1.0
* @par Copyright(c):
*/
#ifndef __HSM100_DRIVER_H_
#define __HSM100_DRIVER_H_
#include <stdint.h>
//串口打印函数
extern void DEBUG(char* fmt,...);
//毫秒级延时函数
extern void delay_ms(uint16_t nms);
//微秒级延时函数
extern void delay_us(uint32_t nus);
//芯片驱动HSM100模组用到的SPI引脚初始化,和状态检测GPIO初始化
extern void hsm100_gpio_spi_init(void);
//检测HSM100模组工作状态引脚
extern void hsm100_Check_Ready(void);
#endif
四、二次开发库下载地址
CSDN地址:
https://download.csdn.net/download/p278904862/89716967
百度网盘地址:
链接:https://pan.baidu.com/s/1H301sMsTqp-t5NohbuI43w?pwd=8888
提取码:8888
总结
通用的二次开发库介绍完毕,后续将基于STM32F103C8T6芯片进行实际应用讲解和示例工程代码展示。