GMSSL库编译使用记录

GmSSL制作国密算法自签证书和 HTTPS 配置 GmSSL 是一个开源(遵循 BSD 协议)的密码工具箱,支持 SM2 / SM3 / SM4 / SM9 / ZUC 等国密(国家商用密码)算法、SM2 国密数字证书及基于 SM2 证书的 SSL / TLS 安全通信协议,支持国密硬件密码设备,提供符合国密规范的编程接口与命令行工具,可以用于构建 PKI / CA 、安全通信、数据加密等符合国密标准的安全应用。GmSSL 项目是 OpenSS... 阅读详情
AI摘要

本文详细介绍了GMSSL加密库在Windows、CentOS 8、Debian 10及Debian 9等平台上的编译安装过程,并提供了Python运行库的搭建步骤。

前言

由于之前调研过使用GMSSL库进行sm2加解密,并适配多个系统及环境,将当时的搭建过程记录下来

GMSSL开发库编译

以下为多个操作系统编译记录,所引用的链接均为2023年6月记录的,可能已经失效

windows

windows端环境搭建主要参照https://blog.youkuaiyun.com/zyhse/article/details/112325129 这篇博客,但是由于gmssl版本更新,且我用的vs版本为2022,因此编译部分主要参照gmssl的github主页:https://github.com/guanzhi/GmSSL,流程如下:

  1. 安装vs2022

我已经有了就不写怎么安装了

  1. 安装ActivePerl

现在官网下载需要安装他们的工具,可能由于是外网的问题,一直没法下载,于是我找了一篇博文,从他的百度网盘里面下载的:https://blog.youkuaiyun.com/weixin_46767998/article/details/107830121
我下载的版本是5.26,下载后安装时安装类型选择“Typical”,之后一直下一步就行,安装完成后,cmd中执行perl -v查看是否安装成功

C:\Users\wanghan>perl -v

This is perl 5, version 26, subversion 3 (v5.26.3) built for MSWin32-x64-multi-thread
(with 2 registered patches, see perl -V for more detail)

Copyright 1987-2018, Larry Wall

Binary build 0000 [15feb953] provided by ActiveState http://www.ActiveState.com
Built Apr 10 2020 18:45:08

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
  1. 安装NASM

下载链接:https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/win64/
image.png
**管理员身份运行,**安装后把安装目录添加到系统环境变量中image.png

  1. 下载GmSSL源码

github链接:https://github.com/guanzhi/GmSSL
管理员选项打开VS命令行(这里要使用32位的,实际测试使用64位编译出来的gmssl在调用时有些问题):
image.png
切换到gmssl路径后,依次执行如下命令:

mkdir build
cd build
cmake .. -G "NMake Makefiles"
nmake
nmake install

执行nmake后报错:

D:\code\client_state_secret_login\GmSSL-master>"C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio 2022\Visual Studio Tools\VC\x64 Native Tools Command Prompt for VS 2022.ln
k"
**********************************************************************
** Visual Studio 2022 Developer Command Prompt v17.2.6
** Copyright (c) 2022 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x86'

C:\Program Files\Microsoft Visual Studio\2022\Professional>cd /d D:\code\client_state_secret_login\GmSSL-master

D:\code\client_state_secret_login\GmSSL-master>mkdir build

D:\code\client_state_secret_login\GmSSL-master>cd build

D:\code\client_state_secret_login\GmSSL-master\build>cmake .. -G "NMake Makefiles"
-- The C compiler identification is MSVC 19.32.31332.0
-- The CXX compiler identification is MSVC 19.32.31332.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Professional/VC/Tools/MSVC/14.32.31326/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS
-- Configuring done
-- Generating done
-- Build files have been written to: D:/code/client_state_secret_login/GmSSL-master/build

D:\code\client_state_secret_login\GmSSL-master\build>
D:\code\client_state_secret_login\GmSSL-master\build>nmake

Microsoft (R) 程序维护实用工具 14.32.31332.0 版
版权所有 (C) Microsoft Corporation。  保留所有权利。

[  0%] Building C object CMakeFiles/gmssl.dir/src/version.c.obj
version.c
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/version.h
[  0%] Building C object CMakeFiles/gmssl.dir/src/debug.c.obj
debug.c
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stdio.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt.h
?⒁? 包含文件:    C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vcruntime.h
?⒁? 包含文件:      C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\concurrencysal.h
?⒁? 包含文件:     C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vadefs.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstdio.h
?⒁? 包含文件:    C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_stdio_config.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\string.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_memory.h
?⒁? 包含文件:     C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\errno.h
?⒁? 包含文件:     C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vcruntime_string.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstring.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stdlib.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_malloc.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_search.h
?⒁? 包含文件:    C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stddef.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstdlib.h
?⒁? 包含文件:   C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\limits.h
?⒁? 包含文件:  C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\stdint.h
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/error.h
[  1%] Building C object CMakeFiles/gmssl.dir/src/sm4_common.c.obj


... 省略 ...


[ 15%] Building C object CMakeFiles/gmssl.dir/src/asn1.c.obj
asn1.c
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(1): warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stdio.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt.h
?⒁? 包含文件:    C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vcruntime.h
?⒁? 包含文件:     C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\sal.h
?⒁? 包含文件:      C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\concurrencysal.h
?⒁? 包含文件:     C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vadefs.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstdio.h
?⒁? 包含文件:    C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_stdio_config.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\string.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_memory.h
?⒁? 包含文件:     C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\errno.h
?⒁? 包含文件:     C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\vcruntime_string.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstring.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stdlib.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_malloc.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_search.h
?⒁? 包含文件:    C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\stddef.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wstdlib.h
?⒁? 包含文件:   C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\limits.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\assert.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\time.h
?⒁? 包含文件:   C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\corecrt_wtime.h
?⒁? 包含文件:  C:\Program Files (x86)\Windows Kits\10\include\10.0.19041.0\ucrt\ctype.h
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/oid.h
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/asn1.h
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/error.h
?⒁? 包含文件:  D:\code\client_state_secret_login\GmSSL-master\include\gmssl/endian.h
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(221): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(222): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(226): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(229): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(229): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(230): error C2065: “data”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): warning C4022: “memcpy”: 指针与实参 1 不匹配
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): error C2065: “data”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): warning C4022: “memcpy”: 指针与实参 2 不匹配
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(234): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(235): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(235): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(235): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(237): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(237): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(237): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(243): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(244): error C2065: “data”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(244): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(248): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(252): error C2065: “data”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(252): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(252): warning C4047: “=”:“int”与“const uint8_t *”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(253): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(254): error C2065: “datalen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(259): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(260): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(265): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(265): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(266): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(266): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(266): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(266): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(266): error C2106: “=”: 左操作数必须为左值
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(268): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(268): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): warning C4047: “函数”:“uint8_t **”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): warning C4024: “asn1_length_to_der”: 形参和实参 2 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): warning C4047: “函数”:“size_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(270): warning C4024: “asn1_length_to_der”: 形参和实参 3 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(275): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(276): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(281): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(282): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(290): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(290): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(291): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(291): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(291): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(291): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(291): error C2106: “=”: 左操作数必须为左值
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(293): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(293): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): warning C4047: “函数”:“uint8_t **”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): warning C4024: “asn1_length_to_der”: 形参和实参 2 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): warning C4047: “函数”:“size_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(296): warning C4024: “asn1_length_to_der”: 形参和实参 3 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(299): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(299): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): warning C4022: “memcpy”: 指针与实参 1 不匹配
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): warning C4022: “memcpy”: 指针与实参 2 不匹配
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(300): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(301): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(301): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(301): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(303): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(303): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(303): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(309): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(310): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(310): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(316): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(317): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(317): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(317): warning C4047: “=”:“int”与“void *”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(318): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(318): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(325): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(325): warning C4047: “函数”:“size_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(325): warning C4024: “asn1_length_from_der”: 形参和实参 1 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(331): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(331): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(331): warning C4047: “=”:“int”与“const uint8_t *”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(332): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(332): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(333): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(333): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(338): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(341): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(341): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4047: “函数”:“const uint8_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4024: “asn1_type_to_der”: 形参和实参 2 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): error C2065: “out”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4047: “函数”:“uint8_t **”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4024: “asn1_type_to_der”: 形参和实参 4 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): error C2065: “outlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4047: “函数”:“size_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(345): warning C4024: “asn1_type_to_der”: 形参和实参 5 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(353): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): warning C4047: “函数”:“const uint8_t **”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): warning C4024: “asn1_type_from_der”: 形参和实参 2 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): warning C4047: “函数”:“size_t *”与“int”的间接级别不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(356): warning C4024: “asn1_type_from_der”: 形参和实参 3 的类型不同
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(360): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(360): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(368): error C2143: 语法错误: 缺少“;”(在“{”的前面)
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(369): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(369): error C2065: “d”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(369): error C2065: “dlen”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(375): error C2065: “tag”: 未声明的标识符
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(375): error C2100: 非法的间接寻址
D:\code\client_state_secret_login\GmSSL-master\src\asn1.c(375): fatal error C1003: 错误计数超过 100;正在停止编译
NMAKE : fatal error U1077: “"C:\Program Files\CMake\bin\cmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.
NMAKE : fatal error U1077: “"C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\bin\HostX64\x64\nmake.exe"”: 返回代码“0x2”
Stop.

通过报错信息,猜测是字符编码的问题,网上检索资料,执行set CL=/utf-8,即可解决问题:

D:\code\client_state_secret_login\GmSSL-master\build>set CL=/utf-8

D:\code\client_state_secret_login\GmSSL-master\build>nmake

Microsoft (R) 程序维护实用工具 14.32.31332.0 版
版权所有 (C) Microsoft Corporation。  保留所有权利。

Consolidate compiler generated dependencies of target gmssl
[  1%] Building C object CMakeFiles/gmssl.dir/src/asn1.c.obj
asn1.c


... 省略 ...

[100%] Linking C executable bin\demo_zuc.exe
[100%] Built target demo_zuc

D:\code\client_state_secret_login\GmSSL-master\build>
D:\code\client_state_secret_login\GmSSL-master\build>
D:\code\client_state_secret_login\GmSSL-master\build>
D:\code\client_state_secret_login\GmSSL-master\build>
D:\code\client_state_secret_login\GmSSL-master\build>nmake install

Microsoft (R) 程序维护实用工具 14.32.31332.0 版
版权所有 (C) Microsoft Corporation。  保留所有权利。
... ...

切换目录到安装路径,查看是否安装成功:

C:\Program Files\GmSSL\bin>cd /d "C:\Program Files\GmSSL\bin"

C:\Program Files\GmSSL\bin>gmssl.exe version
GmSSL 3.1.1 Dev

还可以将这个路径添加到系统环境变量
image.png
使用VS编译官网提供的sm2加解密demo:
代码如下:

/*
 *  Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
 *
 *  Licensed under the Apache License, Version 2.0 (the License); you may
 *  not use this file except in compliance with the License.
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <gmssl/sm2.h>
#include <gmssl/error.h>


int main(void)
{
	SM2_KEY sm2_key;
	SM2_KEY pub_key;
	unsigned char plaintext[SM2_MAX_PLAINTEXT_SIZE];
	unsigned char ciphertext[SM2_MAX_CIPHERTEXT_SIZE];
	size_t len;

	sm2_key_generate(&sm2_key);
	memcpy(&pub_key, &sm2_key, sizeof(SM2_POINT));

	sm2_key_print(stdout, 0, 0, "SM2Key", &sm2_key);

	sm2_encrypt(&pub_key, (uint8_t*)"hello world", strlen("hello world"), ciphertext, &len);
	format_bytes(stdout, 0, 0, "ciphertext", ciphertext, len);

	if (sm2_decrypt(&sm2_key, ciphertext, len, plaintext, &len) != 1) {
		fprintf(stderr, "error\n");
		return 1;
	}
	plaintext[len] = 0;
	printf("plaintext: %s\n", plaintext);

	return 0;
}

image.png
image.png
image.png
编译完成后,将gmssl.dll复制到编译出的exe目录,运行程序:
image.png

CentOS8

  1. 解压GmSSL源码包

unzip GmSSL-master.zip
源码包获取参照上一节
中途为了解决报错,安装了如下软件包,不确定是否和依赖有关系:
yum install -y libmicrohttpd-devel perl-ExtUtils-Embed yasm gcc gcc-c++ make automake autoconf libtool rng-tools libcurl-devel

  1. 修改源码解决bug

如果不修改代码,编译时会报错:/usr/bin/ld: bin/libgmssl.so.3.0: undefined reference to _rdseed64_step’`

image.png
通过查看github中的issues:https://github.com/guanzhi/GmSSL/pull/1447/files
vim src/rdrand.c
增加如下内容:

#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
#include <x86intrin.h>
#endif

image.png

  1. 开始编译、安装
mkdir build
cd build/
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local/gzgmssllib
make -j16
make install

cmake时不加参数会报错,参照github中的issues:https://github.com/guanzhi/GmSSL/issues/1446

  1. 添加系统路径

将gmssl可执行文件链接到/usr/bin中:
ln -s /usr/local/gzgmssllib/bin/gmssl /usr/bin/gmssl
将gmssl库目录添加到系统目录中:

vim /etc/ld.so.conf.d/gmssl-3.conf

# 增加以下内容:
/usr/local/gzgmssllib/lib/

#最后执行命令:
ldconfig
  1. 测试官网提供的sm2加解密demo
[root@localhost sm2_gmssl_demo]# cat c-sm2-demo.c
/*
 *  Copyright 2014-2022 The GmSSL Project. All Rights Reserved.
 *
 *  Licensed under the Apache License, Version 2.0 (the License); you may
 *  not use this file except in compliance with the License.
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 */

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <gmssl/sm2.h>
#include <gmssl/error.h>


int main(void)
{
        SM2_KEY sm2_key;
        SM2_KEY pub_key;
        unsigned char plaintext[SM2_MAX_PLAINTEXT_SIZE];
        unsigned char ciphertext[SM2_MAX_CIPHERTEXT_SIZE];
        size_t len;

        sm2_key_generate(&sm2_key);
        memcpy(&pub_key, &sm2_key, sizeof(SM2_POINT));

        sm2_key_print(stdout, 0, 0, "SM2Key", &sm2_key);

        sm2_encrypt(&pub_key, (uint8_t*)"hello world", strlen("hello world"), ciphertext, &len);
        format_bytes(stdout, 0, 0, "ciphertext", ciphertext, len);

        if (sm2_decrypt(&sm2_key, ciphertext, len, plaintext, &len) != 1) {
                fprintf(stderr, "error\n");
                return 1;
        }
        plaintext[len] = 0;
        printf("plaintext: %s\n", plaintext);

        return 0;
}

[root@localhost sm2_gmssl_demo]# gcc c-sm2-demo.c -o c-sm2-demo -L/usr/local/gzgmssllib/lib/ -lgmssl -I/usr/local/gzgmssllib/include/
[root@localhost sm2_gmssl_demo]# ./c-sm2-demo
SM2Key
    publicKey
        x: 97ECD03590B038BF1947DF9470292DBB588468D424DD0B6A70974D5D9B7069EB
        y: C1130771201941C697B6E71AE38A508A44D47B227B2967F07FE2A8D838816ACE
    privateKey: 67FFB10F7E5D3EF115359B48BB1F393255873A6A77AEC84A2AFA75DC73A4C943
ciphertext: 3073022041CC6B284602090F21303E3C41F8651930F7C7AE2C9FCCB86E4D923AE9826C8102206031704320177C93E0C0F8E4A631B6355DB0B5465020CD999A84AF99CE0A4A120420C5973FE158C4EB360D8F6BDCFDAA862C4AF2FFE4BAB5A34C2BDD2B2DCB2986C2040B112A1F972D163CF43F6F9E
plaintext: hello world

debian10

  1. 搭建编译环境

apt-get install cmake

  1. 解压GmSSL源码包

unzip GmSSL-master.zip
源码包获取参照上一节

  1. 编译安装
mkdir build
cd build/
cmake ..
make -j4
make install
ldconfig
  1. 验证是否安装成功
root@nfs-PC:~/gmssl/GmSSL-master/build# gmssl version
GmSSL 3.1.1 Dev
  1. 编写demo验证库是否可用
root@nfs-PC:~/gmssl/sm2-enc-dec-demo# gcc c-sm2-demo.c -o c-sm2-demo  -lgmssl
root@nfs-PC:~/gmssl/sm2-enc-dec-demo#
root@nfs-PC:~/gmssl/sm2-enc-dec-demo# ls
c-sm2-demo  c-sm2-demo.c  mk.sh
root@nfs-PC:~/gmssl/sm2-enc-dec-demo# ./c-sm2-demo
SM2Key
    publicKey
        x: C742611E205F767DB13FFCA21C13C806719BA86C2067C78BB279C49334662687
        y: FA4C60B1EE4EF16A89C5D1F9BCFFA1EF53EDFD55EF564BB3F9E1C49A4677B099
    privateKey: CC87D1BB0948C3052855958E0BBB8B97134650157B811B8AEACAFF249E73B74E
ciphertext: 307202202CB8D4D2ADABF08D4FC69548507F97902DFDC25AC7FD774EFFE1B8C78509CAF3021F6D17FF599B30DA6451AEB5A37F9784324736A6199885A0B3F36D376F989FE20420CD82357A04A752B8C49F601F6334F8287B97E06D7DE72FD85F0CACF39006F45E040B819304C3307EF6B29CB6B9
plaintext: hello world

debian9

  1. 搭建编译环境

apt-get install cmake

  1. 解压GmSSL源码包

unzip GmSSL-master.zip
源码包获取参照上一节

  1. 修改源码解决bug

主要报错有2项:
bin/libgmssl.so.3.0:对‘_rdseed64_step’未定义的引用:
解决方案:参照RPM版编译的这部分
bin/libgmssl.so.3.0:对‘getentropy’未定义的引用:
参考:https://wenku.baidu.com/view/2f6d998e1ae8b8f67c1cfad6195f312b3069eb01.html?wkts=1684203502703
原因为系统版本太旧,没有getentropy函数,因此我们需要手动实现getentropy函数,编辑src/rand_unix.c文件,增加如下内容:

#include <fcntl.h>

int getentropy(void* buffer, size_t length) {
    int urandom_fd = open("/dev/urandom", O_RDONLY);
    if (urandom_fd == -1) {
        return -1; // 打开设备失败,返回错误
    }

    ssize_t bytes_read = read(urandom_fd, buffer, length);
    close(urandom_fd);

    if (bytes_read == -1 || (size_t)bytes_read != length) {
        return -1; // 读取随机数据失败或读取的数据长度不符合要求,返回错误
    }

    return 0; // 成功获取随机数据
}

image.png

  1. 编译安装
mkdir build
cd build/
cmake ..
make -j4
make install
ldconfig

GMSSL python运行库搭建

由于pip的源下载太慢,经常导致失败,因此手动下载安装包,搭建环境,由于pycryptodomex没有提供python3.6的包,需要使用源码安装。
下载gmssl安装包:https://files.pythonhosted.org/packages/41/b1/01d707a2edfaad77715b2d27e5fbf14b6bcd34dd72ea179a5facfe4b1dd7/gmssl-3.2.2-py3-none-any.whl
下载依赖pycryptodomex源码包:
https://files.pythonhosted.org/packages/3d/07/cfd8f52b9068877801317d26dc7225e19421bc659e1395d2cd6933b1a351/pycryptodomex-3.17.tar.gz

CentOS8

  1. 安装pycryptodomex
# 解压pycryptodomex源码包
[root@control gmssl]# tar xzvf pycryptodomex-3.17.tar.gz
[root@control gmssl]# cd pycryptodomex-3.17/

# 直接安装会报错,需要制定prefix路径
[root@control pycryptodomex-3.17]# python3 setup.py install --prefix=/usr
... ...
Installed /usr/lib64/python3.6/site-packages/pycryptodomex-3.17-py3.6-linux-x86_64.egg
Processing dependencies for pycryptodomex==3.17
Finished processing dependencies for pycryptodomex==3.17
  1. 安装gmssl
[root@control gmssl]# pip3 install gmssl-3.2.2-py3-none-any.whl
WARNING: Running pip install with root privileges is generally not a good idea. Try `pip3 install --user` instead.
Processing ./gmssl-3.2.2-py3-none-any.whl
Requirement already satisfied: pycryptodomex in /usr/lib64/python3.6/site-packages/pycryptodomex-3.17-py3.6-linux-x86_64.egg (from gmssl==3.2.2)
Installing collected packages: gmssl
Successfully installed gmssl-3.2.2
  1. 测试sm2加解密
[root@control gmssl]# python3 sm2-demo.py encrypt 123456
n6tA//zrRnj9BnCqeg68Bd+rKDIxEnC5sTG7HmqtTnF45jwGFKbmcjQxtB4Ty4tQaHKJovXSAL2PF+KRS3MpzboE7qkQgfrDZNWlijI7gt57/b6ETLURVPtuvkY2LDJarkvFzU6C
[root@control gmssl]#
[root@control gmssl]# python3 sm2-demo.py decrypt n6tA//zrRnj9BnCqeg68Bd+rKDIxEnC5sTG7HmqtTnF45jwGFKbmcjQxtB4Ty4tQaHKJovXSAL2PF+KRS3MpzboE7qkQgfrDZNWlijI7gt57/b6ETLURVPtuvkY2LDJarkvFzU6C
123456
  1. 生成sm2公钥/私钥
[root@control gen_key]# python3 gen_key.py
cf8981ddf42ae98c92018a1e30c086a4826662f0b21a99f85fd623128058413d
bd6c9623b221a5da39919ad932ed8c5b72a721ffa5be5acf687abff59b41e68da9e4816012a9bfb9ee466f82ceeee98602365c66bc551271b4cf2a4cf6807f12

Windows

  1. 安装pycryptodomex
省略:解压tar.gz源码包
D:\FreeDownloadManager\pycryptodomex-3.17.tar\pycryptodomex-3.17>python setup.py install
Testing support for clang
test1.c
... ...
Installed c:\users\wanghan\appdata\local\programs\python\python36\lib\site-packages\pycryptodomex-3.17-py3.6-win-amd64.egg
Processing dependencies for pycryptodomex==3.17
Finished processing dependencies for pycryptodomex==3.17
  1. 安装gmssl
D:\FreeDownloadManager>pip3 install gmssl-3.2.2-py3-none-any.whl
Processing d:\freedownloadmanager\gmssl-3.2.2-py3-none-any.whl
Requirement already satisfied: pycryptodomex in c:\users\wanghan\appdata\local\programs\python\python36\lib\site-packages\pycryptodomex-3.17-py3.6-win-amd64.egg (from gmssl==3.2.2) (3.17)
Installing collected packages: gmssl
Successfully installed gmssl-3.2.2

debian9

  1. 安装pycryptodomex
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# cd pycryptodomex-3.17root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境/pycryptodomex-3.17# python3 setup.py install
... ...
Writing /usr/local/lib/python3.5/dist-packages/pycryptodomex-3.17.egg-info
  1. 安装gmssl
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# pip3 install gmssl-3.2.2-py3-none-any.whl 
Processing ./gmssl-3.2.2-py3-none-any.whl
Requirement already satisfied: pycryptodomex in /usr/local/lib/python3.5/dist-packages (from gmssl==3.2.2)
Installing collected packages: gmssl
Successfully installed gmssl-3.2.2
  1. 测试sm2加解密
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# python3 sm2-demo.py encrypt 123456
/9jb5KyNFYkL1tHvbstE+VN5CO5HxbF3kQXe4AQgURIaWiEi4+sVJCNpczWSAaMy8OpfT0+eCnQi2jtfwoKPT1KucX3h48SGMO73dlQt/SPRdamZtiEpPRL42x8LzWcuAcUFgnQv
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# 
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# 
root@wanghan-virtual-machine:/home/wanghan/桌面/gmssl环境# python3 sm2-demo.py decrypt /9jb5KyNFYkL1tHvbstE+VN5CO5HxbF3kQXe4AQgURIaWiEi4+sVJCNpczWSAaMy8OpfT0+eCnQi2jtfwoKPT1KucX3h48SGMO73dlQt/SPRdamZtiEpPRL42x8LzWcuAcUFgnQv
123456
详解gmssl和tls1.2握手流程分析及接口实现 通过阅读openssl源码具体分析ssl握手中的报文交互流程,包括发送和处理每个报文所做的主要事情。同时分析ssl协议中的一些主要问题,包括tls和gmssl的区别、单向认证和双向认证、两种会话复用方式对比,调用openssl接口实现ssl客户端和服务端之间的通信。本篇文章梳理了tls1.2和gmssl的具体握手流程和算法实现,只进行了宏观层面的大致分析,openssl当中还有许多的细节需要在后续文章中继续分析。 阅读详情

相关推荐

基于GMSSL的常用算法特点总结以及源代码分享

本文主要有两部分,第一部分是主要是总结一些算法的特点, 第二部分是源代码,主要是基于GMSSL库的正确性测试和性能测试

qq_41949110的博客 1700

含泪入坑 GMSSL

耍耍 gmssl

围炉夜话 6227

死磕GMSSL通信-C/C++系列(一)

​ GmSSL这个库的问题很多,发现许多库和它都不能正常通信,都需要修改代码,不是修改客户端就是修改服务端,而且这个开源项目基本处于不维护的状态,如果准备集成的GM通信的,优先选择。最近再做国密通信的项目开发,以为国密也就简单的集成一个库就可以完事了,没想到能有这么多坑。理论上客户端和服务端的证书应该是俩套,也可以直接客户端和服务器用一样的证书,我这里直接用了一套,大家可以自行测试俩套的。这里就不提供证书生成的过程了,网上生成的教程很多,GMSSL需要五个证书。1、经过最近几天的测试,发现。

qq_36577699的博客 2401

python模块gmssl,SM国密算法

gmssl 是一个用于处理国密算法的 Python 模块,它提供了对国密算法的支持,包括对称加密、非对称加密、散列函数和数字签名等,仅列出了其中两个较为完善的第三方库,需要注意的是,SM1 和 SM7 算法不公开,目前大多库仅实现了 SM2、SM3、SM4 三种密算法。

老衲爱洗头的博客 1万+

从零实现国密TLCP服务器:双证书机制与GmSSL实战指南

传输层安全协议是保障网络通信机密性与完整性的核心技术,其中国密TLCP协议作为我国自主密码标准GB/T 38636-2020的核心组成部分,采用独特的双证书机制实现身份认证与密钥交换的功能分离。该机制通过独立的签名证书和加密证书,在提升安全性的同时满足特定合规要求。在工程实践中,开发者常借助GmSSL开源库实现国密算法支持,通过编译配置、证书生成和API调用等步骤构建安全通信服务。本文聚焦于国密改造和等保测评场景,详细解析如何基于GmSSL库从零构建TLCP服务器,涵盖环境搭建、双证书配置、握手流程实现等关

weixin_29323365的博客 292

使用sm2签名并验签efi文件

使用sm2签名并验签efi文件[sbsigntool]是一个开源的软件包,他完成了对efi文件的签名和验签工作,其使用的签名算法是sha256。由于项目需要,我们需要使用国密的签名算法sm3,正好用到gmssl的API可以完成相关工作。 该工具原本是用的pkcs#7的加密标准,在签名的过程可以添加入证书,这是由于其标准决定的(?)。由于在gmssl中使用的sm3签名的过程中并没有涉及到证,所以改变

li_xiao_an的博客 5064

新手入坑GMSSL(一)Windows下编译GMSSL并生成CA证书

首先申明,我不是密码学的专业人员,没有这方面知识基础,这个以及接下来的博客都是我根据网上能找到的资料、博客,一点点摸索总结出来的,问了很多前辈和博主,但是可能都没有看到都没有回复我 = = 。但项目必须得做身不由己,无奈只能自己试一试了。 如果有哪里不对的地方,请各位一定指出,也让我学习一下,感谢! 博客参考的资料地址会将参考的内容会在文中给出,我总结的步骤有不清楚的地方可以参考原文。 相信看到这篇博客的同学对于openssl的认识应该都比我要深,我就不班门弄斧了。可能国密这个领域对于其他技术来说.

qq_40153886的博客 8633

mac下OPENSSL在Android Studio中使用NDK的方式编译出.so运行调试和测试

这里只是记录一下制作的思路 我使用的版本GMSSL2.0版本,看了命令行的输出是openssl 1.1.0d 的版本上分支出来的版本。 与别人的编译流程相同。 1.下载GMSSL2.0的版本库(其实是废话) 2.从openssl 官网上下载Setenv-android.sh该脚本。这是为了让GMSSL2.0可以编译生成需要的头文件。 3.配置Setenv-andoird.sh文件里的内容...

springsu的专栏 1561

gmssl java_GMSSL编译运行Java Wrapper踩坑记录

在Mac上,按以下官方文档的攻略是可以编译通过的,但是在Linux上加上java就编译失败!首先,按官方攻略把Mac流程跑通//官方攻略BEGIN编译Java接口由于GmSSL编译脚本还不能实现在所有操作系统上自动编译Java接口代码,因此编译脚本中默认没有启用Java接口的编译。 开启方式如下: 在源代码根目录下找到Configure文件,找到$config{dirs} = [ "crypto"...

weixin_39530149的博客 1426

gmssl的windows库

在QT5下面调用GMSSL静态库,gmssl静态库通过vs2015以及perl工具编译而来

跨平台编译GmSSL 3.1.1实战:Windows/Linux集成国密SM2算法指南

在信息安全领域,密码算法是保障数据机密性、完整性与真实性的核心技术。非对称加密算法通过公钥与私钥的配对,实现了安全的密钥交换与数字签名功能。国密算法作为我国自主研发的密码标准体系,其核心算法SM2在安全性、效率与合规性方面具有重要价值,广泛应用于金融、政务、物联网等对数据安全有严格要求的场景。本文聚焦于开源密码库GmSSL,它深度集成了SM2、SM3、SM4等国密算法,是OpenSSL的一个重要分支。针对开发者在跨平台项目中集成国密算法时遇到的实际挑战,特别是OpenSSL对国密支持不完善、跨平台编译过程复

weixin_29323551的博客 278

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

Windows下GMSSL编译踩坑实录:从ActivePerl安装到nmake失败的完整避坑指南

本文详细记录了在Windows系统下编译GMSSL的完整过程,包括ActivePerl安装、nasm环境配置以及解决nmake报错等常见问题。通过逐步指导,帮助开发者成功编译支持国密SM2/SM3/SM4算法的GMSSL库,并提供了验证和使用示例。

weixin_30872157的博客 631

【ISP图像处理】Demosaic去马赛克技术演进与边缘优化策略

本文深入解析了ISP图像处理中的Demosaic(去马赛克)技术。从Bayer阵列原理出发,梳理了从双线性插值、Hamilton-Adams边缘导向算法到利用通道相关性与自相似性的技术演进历程,并重点探讨了针对边缘与纹理伪影的优化策略,为工程实践中的算法选型与硬件协同设计提供了专业指导。

weixin_29091445的博客 388

PTPX功耗分析实战——从脚本配置到报告解读

本文详细介绍了PTPX功耗分析的全流程,从脚本配置到报告解读,帮助工程师快速掌握芯片设计中的功耗估算技术。文章涵盖了环境搭建、波形文件处理、功耗报告解析等关键环节,并提供了实战经验和优化建议,特别适合需要提升PTPX功耗分析效率的开发者。

weixin_29248313的博客 279

Windows下GMSSL编译踩坑实录:从ActivePerl安装到nasm配置全流程避坑指南

本文详细记录了在Windows系统下编译GMSSL国密算法库的全过程,重点解决了ActivePerl安装失败、NASM环境变量配置无效以及经典的“模块计算机类型不符”链接错误等核心难题。文章提供了从环境准备、源码配置到编译链接的完整避坑指南,并给出了使用no-asm参数绕过汇编优化等实用解决方案,旨在帮助开发者高效完成GMSSL在Windows平台的部署。

moon9的博客 199

C语言 100道经典编程题适用于专升本,专接本【详细分析版】_c语言专升本题目

/法2//left指向起始 right指向数组末尾= 0){left++;//如果*left是奇数就循环接着向后指,直到指向偶数就退出//(left

2401_84978503的博客 695

20221403郑骁恒实验1-2

生成公私钥if (argc!FILE *fp;// 生成SM2密钥对= 1) {return 1;// 保存私钥if (!return 1;return 1;fclose(fp);// 保存公钥if (!return 1;return 1;fclose(fp);return 0;过程2. 加密源代码。

m0_73618044的博客 1001

Zephyr RTOS 嵌入式 C 编程 (使用嵌入式 RTOS POSIX API)8. Zephyr RTOS 与以太网、Wi-Fi 及 TCP/IP

支持的 BSD 函数包括:socket()、close()、recv()、recvfrom()、send()、sendto()、connect()、bind()、listen()、accept()、fcntl()(用于设置非阻塞模式)、getsockopt()、setsockopt()、poll()、select()、getaddrinfo()和 getnameinfo()。向开发板烧录代码也可能存在问题。可以通过调用 net_if_up() 开启网络接口 ,调用 net_if_down() 关闭接口。

1342

安卓/苹果/支付宝sdk拉起支付宝h5/app支付

代码】安卓/苹果/支付宝sdk拉起支付宝h5/app支付。

m0_68973987的博客 5385

在VS2013下编译Gmssl库

使用版本:GmSSL 2.4.0 + VS2013 GmSSL官方文档里面,windows下编译和安装说明的非常简单,三行命令即可搞定。 但是往往是理想很丰满,现实很骨感-_-||,下面总结自己在windows下编译GmSSL的过程。(。_ 。) 1. 下载GmSSL源码、ActivePerl和Visual Studio 2013以及Nasm 按用户手册描述,在Window...

lt4959的专栏 3550

Cesium.Ray 知识详解,示例代码

Cesium.Ray 是 CesiumJS 中用于表示三维空间中无限射线的核心类,广泛应用于地理信息系统(GIS)、三维可视化和碰撞检测等场景。射线由起点(origin)和方向向量(direction)定义,数学表达式为 ( P(t) = \text{origin} + t \times \text{direction} )。核心属性包括起点和方向向量,常用方法包括射线与平面的交点计算、根据距离获取射线上的点等。在 Cesium 中,Cesium.Ray 常用于地形碰撞检测、鼠标点选对象和雷达探测模拟等场景

大剑师兰特的GIS世界 425

linux 编译安装GmSSL记录

1,在GMSSL官网下载源码包。 2,参考官网编译安装流程:http://gmssl.org/docs/quickstart.html 进行编译安装。 3,安装完毕后运行gmssl version出错如下: gmssl:relocation error: gmssl: symbol BIO_debug_callback version OPENSSL_1_1_0d not defined...

从此热爱生活 4856

Pydoll浏览器自动化框架教程

让浏览器自动化回归本质。不再纠缠驱动兼容、不再手动处理验证码、不再因为请求和 UI 分裂而头疼。如果你经常做 Web 自动化、爬虫或者测试,不妨试试 Pydoll。也别忘了给项目点个 ⭐,让作者知道有人喜欢这个工具。👉GitHub 地址。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 204

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Windows环境下GMSSL的安装与编译的超详细教程

由于本人找了各大教程安装了半天GMSSL,特此记录,以避免后来人踩坑。

m0_75100181的博客 7765

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 压缩加壳工具UPX编译及使用实例
下一篇: 开箱7年前的全新小米盒子3增强版
某国产码农
博客等级 码龄10年 44粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值