HSM100安全模组的二次开发库

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
在这里插入图片描述


前言

前两篇文章介绍了安全模组的硬件,今天对HSM100安全模组的二次开发库进行相关介绍。


一、二次开发库文件结构说明

在这里插入图片描述

  1. HSM100_kei.lib 是keil 编辑器编译出的库,即二次开发库
  2. hsm100_api.h 是 二次开发库中的功能函数的API函数
  3. 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芯片进行实际应用讲解和示例工程代码展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值