基于github.com/emmansun/gmsm库编写的SM2对C 开放的库

go-gmsm cgo库

介绍

基于github.com/emmansun/gmsm库编写的SM2对C
开放的库

特性:非对称加密、不支持跨平台编译

git地址:https://gitee.com/state-secret-series/go-gmsm.git

软件架构

Go、Cgo、mod

安装教程

克隆仓库

git clone https://gitee.com/state-secret-series/go-gmsm.git

进入go-gmsm目录

cd go-gmsm

下载依赖

go mod tidy

cgo静态编译

go build -x -buildmode=c-archive -o libgosm2.a

编译完成后生成 libgosm2.a 、libgosm2.h 文件

使用教程

在C语言中调用

int main() {GO_SM2_KEY_PAIR key_pair;GO_SM2_SIGNATURE_STRUCT sm2_sig;GO_SM2_ENCRYPT_STRUCT ciphertext;GO_SM2_DECRYPT_STRUCT plaintext;GO_SM2_ERROR_STRUCT  error;unsigned char msg[] = {"这是测试数据"};int msg_len = (int) (strlen((char *) msg));unsigned char user_id[] = {"1234567812345678"};int user_id_len = (int) (strlen((char *) user_id));
//    unsigned char *ciphertext = NULL;
//    int ciphertext_len=0;int error_code;error_code =  GenerateKeyPair(&key_pair,&error);if(error_code){printf("GenerateKeyPair failed!%s\n", error.error);return error_code;}print_hex("公钥", key_pair.pub_key, GO_SM2_PUBKEY_LEN);print_hex("私钥", key_pair.pri_key, GO_SM2_PRIKEY_LEN);GoSm2SignData(key_pair.pri_key, GO_SM2_PRIKEY_LEN, msg, msg_len, user_id, user_id_len,GO_SM2_MODE_DEFAULT, &sm2_sig,&error);print_hex("签名", sm2_sig.sig, sm2_sig.sig_len);error_code = Sm2SignVerify(key_pair.pub_key, GO_SM2_PUBKEY_LEN, msg, msg_len, user_id, user_id_len, &sm2_sig,&error);if (error_code) {printf("Verify SM2 signature failed!%d\n", error_code);return error_code;}printf("Verify SM2 signature succeeded!\n");error_code = Sm2Encrypt(key_pair.pub_key, GO_SM2_PUBKEY_LEN, msg, msg_len, GO_SM2_MODE_ANS1, GO_SM2_ORDER_C1C2C3, &ciphertext,&error);if (error_code) {printf("Sm2Encrypt SM2 Sm2Encrypt failed!%d\n", error_code);return error_code;}printf("Sm2Encrypt SM2 Sm2Encrypt succeeded!\n");print_hex("加密结果", ciphertext.ciphertext, ciphertext.ciphertext_len);error_code = Sm2Decrypt(key_pair.pri_key,GO_SM2_PRIKEY_LEN,ciphertext.ciphertext, ciphertext.ciphertext_len,GO_SM2_ORDER_C1C2C3,&plaintext,&error);if (error_code) {printf("Sm2Decrypt SM2 Sm2Decrypt failed!%d\n", error_code);return error_code;}printf("Sm2Decrypt SM2 Sm2Decrypt succeeded!\n");print_hex("解密结果", plaintext.plaintext, plaintext.plaintext_len);printf("文明:%s\n", plaintext.plaintext);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/39774.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合

香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合 文章目录 香橙派AIpro实测:YOLOv8便捷检测,算法速度与运行速度结合一、引言二、香橙派AIpro简介三、YOLOv8检测效果3.1 目标检测算法介绍3.1.1 YOLO家族3.1.2 YOLOv8算法理…

NDT配准收敛问题

GitHub - abougouffa/ndtpso_slam: ROS package for NDT-PSO, a 2D Laser scan matching algorithm for SLAM SRG NDT Das_Arun_2013.pdf;jsessionid97F7EDB4E8805EFE68D1E46687EF593F (uwaterloo.ca)

上海计算机考研炸了,这所学校慎报!上海大学计算机考研考情分析!

上海大学(Shanghai University),简称“上大”,是上海市属、国家“211工程”重点建设的综合性大学,教育部与上海市人民政府共建高校,国防科技工业局与上海市人民政府共建高校,国家“双一流”世界…

【微信小程序开发】微信小程序界面弹窗,数据存储相关操作代码逻辑实现

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

ArcGIS Pro SDK (七)编辑 12 编辑模版

ArcGIS Pro SDK (七)编辑 12 编辑模版 文章目录 ArcGIS Pro SDK (七)编辑 12 编辑模版1 在图层上按名称查找编辑模板2 查找属于独立表的表模板3 当前模板4 更改模板的默认编辑工具5 隐藏或显示模板上的编辑工具6 使用图层创建新模…

how to use Xcode

Xcode IDE概览 Xcode 页面主要分为以下四个部分: 工具栏(ToolBar area):主要负责程序运行调试,编辑器功能区域的显示 / 隐藏;编辑区(Editor area):代码编写区域&#xf…

140. 好二叉树(卡码网周赛第二十四期(23年腾讯音乐笔试真题))

140. 好二叉树&#xff08;卡码网周赛第二十四期&#xff08;23年腾讯音乐笔试真题&#xff09;&#xff09; 题目描述 小红定义一个二叉树为“好二叉树”&#xff0c;当且仅当该二叉树所有节点的孩子数量为偶数(0 或者 2)。 小红想知道&#xff0c;n&#xff08;1< n <…

vue table表格 ( parseTime-格式化时间)

<el-table-column label"发布时间" width"420px" prop"bidPublishDatetime"><template slot-scope"scope"><span>{{ parseTime(scope.row.bidPublishDatetime, {y}-{m}-{d}) }}</span></template></…

若依代码生成

在若依框架中&#xff0c;以下是这些代码的作用及它们在程序运行中的关联方式&#xff1a; 1. domain.java&#xff1a;通常用于定义实体类&#xff0c;它描述了与数据库表对应的对象结构&#xff0c;包含属性和对应的访问方法。作用是封装数据&#xff0c;为数据的操作提供基…

Richtek立锜科技车规级器件选型

芯片按照应用场景&#xff0c;通常可以分为消费级、工业级、车规级和军工级四个等级&#xff0c;其要求依次为军工>车规>工业>消费。 所谓“车规级元器件”--即通过AEC-Q认证 汽车不同于消费级产品&#xff0c;会运行在户外、高温、高寒、潮湿等苛刻的环境&#xff0c…

澳蓝荣耀时刻,6款产品入选2024年第一批《福州市名优产品目录》

近日&#xff0c;福州市工业和信息化局公布2024年第一批《福州市名优产品目录》&#xff0c;澳蓝自主研发生产的直接蒸发冷却空调、直接蒸发冷却组合式空调机组、间接蒸发冷水机组、高效间接蒸发冷却空调机、热泵式热回收型溶液调湿新风机组、防火湿帘6款产品成功入选。 以上新…

飞利浦的台灯值得入手吗?书客、松下多维度横评大分享!

随着生活品质的持续提升&#xff0c;人们对于健康的追求日益趋向精致与高端化。在这一潮流的推动下&#xff0c;护眼台灯以其卓越的护眼功效与便捷的操作体验&#xff0c;迅速在家电领域崭露头角&#xff0c;更成为了众多家庭书房中不可或缺的视力守护者。这些台灯以其精心设计…

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE

(vue)eslint-plugin-vue版本问题 安装axios时npm ERR! code ERESOLVE 解决方法&#xff1a;在命令后面加上 -legacy-peer-deps结果&#xff1a; 解决参考&#xff1a;https://blog.csdn.net/qq_43799531/article/details/131403987

【C语言】指针剖析(完结)

©作者:末央&#xff06; ©系列:C语言初阶(适合小白入门) ©说明:以凡人之笔墨&#xff0c;书写未来之大梦 目录 回调函数概念回调函数的使用 - qsort函数 sizeof/strlen深度理解概念手脑并用1.sizeof-数组/指针专题2.strlen-数组/指针专题 指针面试题专题 回调函…

云服务器linux系统安装配置docker

在我们拿到一个纯净的linux系统时&#xff0c;我需要进行一些基础环境的配置 &#xff08;如果是云服务器可以用XShell远程连接&#xff0c;如果连接不上可能是服务器没开放22端口&#xff09; 下面是配置环境的步骤 sudo -s进入root权限&#xff1a;退出使用exit sudo -i进入…

process.env.VUE_APP_BASE_API

前端&#xff1a;process.env.VUE_APP_BASE_API 在Vue.js项目中&#xff0c;特别是使用Vue CLI进行配置的项目&#xff0c;process.env.VUE_APP_BASE_API 是一个环境变量的引用。Vue CLI允许开发者在不同环境下配置不同的环境变量&#xff0c;这对于管理API基础路径、切换开发…

MySQL调优的五个方向

客户端与连接层的优化&#xff1a;调整客户端DB连接池的参数和DB连接层的参数。MySQL结构的优化&#xff1a;合理的设计库表结构&#xff0c;表中字段根据业务选择合适的数据类型、索引。MySQL参数优化&#xff1a;调整参数的默认值&#xff0c;根据业务将各类参数调整到合适的…

【leetcode78-81贪心算法、技巧96-100】

贪心算法【78-81】 技巧【96-100】

谷粒商城-个人笔记(集群部署篇二)

前言 ​学习视频&#xff1a;​Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强​学习文档&#xff1a; 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

【数据结构】02.顺序表

一、顺序表的概念与结构 1.1线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中广泛使用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构&#xff0…