GMSSL在Window下的编译
因为工作需要用到SM2算法加解密,网络上找一圈,没有合用的,还被骗了一堆积分。
无奈只得自行编译,从GITHUB的GMSSL下载到最新的SSL库,VS2012下编译踩了不少坑,记录一下
GITHUB链接:https://github.com/guanzhi/GmSSL
fork了一下分支:https://github.com/eaglexmw-gmail/GmSSL
首先编译需要perl、VS2012、NASM三个工具,分别安装后,由于VS2012与NASM没有修改PATH环境变量
在执行perl Configure VC-WIN32时会报告工具缺失,可以使用set path=%path%;xxx;方式添加路径
这里记录第一个坑,VS2012修改PATH变量,不能只将VC\BIN这样的目录加入就完了,需要增加
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\vcpackages;C:\Windows\Microsoft.NET\Framework64\v4.0.30319;C:\Windows\Microsoft.NET\Framework64\v3.5;C:\Windows\Microsoft.NET\Framework\v4.0.30319;C:\Windows\Microsoft.NET\Framework\v3.5;
这么一堆路径都需要加入,否则还是会编译出错,参考:https://www.cnblogs.com/bluestorm/p/3321558.html
最简便的方法是调用VC提供的批处理,C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\Tools\vsvars32.bat
修改好后,使用nmake即可开始编译。
编译时有几处代码提示编译失败,都是属于C语言中,变量声明在有效代码后(VS严格禁止的),调换一下顺序即可
diff -r -u -N -w GmSSL-master/crypto/sm9/sm9_asn1.c GmSSL-master_new/crypto/sm9/sm9_asn1.c
--- GmSSL-master/crypto/sm9/sm9_asn1.c -- ::35.000000000 +
+++ GmSSL-master_new/crypto/sm9/sm9_asn1.c -- ::49.931390600 +
@@ -, +, @@
{
int ret;
ASN1_OCTET_STRING s;
+ int len = ;
s.type = V_ASN1_OCTET_STRING;
s.data = NULL;
- int len = ; if (inlen > SM9_MAX_PLAINTEXT_LENGTH) {
SM9err(SM9_F_SM9_CIPHERTEXT_SIZE, SM9_R_PLAINTEXT_TOO_LONG);
diff -r -u -N -w GmSSL-master/crypto/sm9/sm9_rate.c GmSSL-master_new/crypto/sm9/sm9_rate.c
--- GmSSL-master/crypto/sm9/sm9_rate.c -- ::35.000000000 +
+++ GmSSL-master_new/crypto/sm9/sm9_rate.c -- ::18.959395000 +
@@ -, +, @@ static int fp12_inv(fp12_t r, const fp12_t a, const BIGNUM *p, BN_CTX *ctx)
{
- if (fp4_is_zero(a[])) {
fp4_t k;
fp4_t t;
+ fp4_t r0, r1, r2;
+
+ if (fp4_is_zero(a[])) {
if (!fp4_init(t, ctx)) {
return ;
} - fp4_t r0, r1, r2;
fp4_init(r0, ctx);
fp4_init(r1, ctx);
fp4_init(r2, ctx);
@@ -, +, @@
BIGNUM *k = BN_new();
int ok; + fp12_t x, y;
+
point_init(&G, ctx);
point_init(&P, ctx); @@ -, +, @@
ok = point_equ_hex(&P, Ppubs, ctx);
printf("point test %d: %s\n", __LINE__, ok ? "ok" : "error"); - fp12_t x, y;
-
fp12_init(x, ctx);
fp12_init(y, ctx); diff -r -u -N -w GmSSL-master/ssl/statem/statem_gmtls.c GmSSL-master_new/ssl/statem/statem_gmtls.c
--- GmSSL-master/ssl/statem/statem_gmtls.c -- ::35.000000000 +
+++ GmSSL-master_new/ssl/statem/statem_gmtls.c -- ::36.844416900 +
@@ -, +, @@
int gmtls_construct_server_certificate(SSL *s)
{
unsigned long alg_a;
- alg_a = s->s3->tmp.new_cipher->algorithm_auth;
int l;
unsigned char *p;
int al = -; + alg_a = s->s3->tmp.new_cipher->algorithm_auth;
+
l = + SSL_HM_HEADER_LENGTH(s); if (alg_a & SSL_aSM2) {
patch文件下载地址:https://files.cnblogs.com/files/eaglexmw/gmssl_20190625_patch.7z
编译成功后,使用nmake install安装,由于默认安装路径在C:\Program Files (x86)\GmSSL,因此,需要管理员权限
管理员权限我通常是采取找到cmd.exe(所在路径C:\windows\system32),右键后管理员运行办法来完成
安装后,即可包含、链接相应库等后续开发了。
GMSSL在Window下的编译的更多相关文章
- Window下 Qt 编译MySQL驱动(居然用到了动态库格式转换工具)
一步步在Window下开发Qt 今天开始安装MySQL,看了些关于MySQL安装的博文,方法大致相同,但是遇到的细节问题各有不同,或者没有讲全面,下面来说说个人的安装过程及遇到的问题. 1.首先下载, ...
- window下如何使用文本编辑器(如记事本)创建、编译和执行Java程序
window下如何使用文本编辑器(如记事本)创建Java源代码文件,并编译执行 第一步:在一个英文目录下创建一个 .text 文件 第二步:编写代码 第三步:保存文件 方法一:选择 文件>另存为 ...
- 在Window下编译LibGeotiff(含Libtiff)
核心提示:1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件. 1.GeoTiff简介 GeoTiff是包含地理信息的一种Tiff格式的文件.Libgeotiff就是一个操作 ...
- Window下Latex加速编译方法以及西农毕设论文模板推荐
近些日子用Latex写了一遍文章,一共有11页,但是在window下编译需要2分多的时间,使用的是xeletex编译器. 经过查找,得到了以下方法: 如果坚持使用windows下的latex,使用以下 ...
- window下搭建c开发环境(GNU环境的安装)
一.在windows平台上安装GNU环境 windows操作系统不自带GNU环境,如果需要开发跨平台的C语言程序,那么需要给windows安装GNU环境 windows下的两款GNU环境:MinGW和 ...
- window下安装wamp环境
Wamp就是Windos Apache Mysql PHP集成安装环境,即在window下的apache.php和mysql的服务器软件.其中php环境配置是至关重要的一部分,本文就针对php在本地的 ...
- boost库在windows下的编译和使用
因为跨平台的原因,现在要使用到boost库,boost库非常大,现在处于摸索阶段. 首先来说boost库在window下的安装和使用. 一.下载 首先从boost官方主页http://www.boos ...
- 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)
原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...
- 安装Window下Jenkins
之前没接触过持续集成工具,之前只是了解了下自动化部署,最近一直在看自动化集成这块,发现要学的东西好多好多,可能在小公司用的不多,但如果在大公司,如果每个项目都要手动build.deploy的话那也太耗 ...
随机推荐
- AFNetworking2.0源码解析<三>
本篇说说安全相关的AFSecurityPolicy模块,AFSecurityPolicy用于验证HTTPS请求的证书,先来看看HTTPS的原理和证书相关的几个问题. HTTPS HTTPS连接建立过程 ...
- 费用流+SPFA ||【模板】最小费用最大流
题面:[模板]最小费用最大流 代码: #include<cstdio> #include<cstring> #include<iostream> #include& ...
- 通过spring工具类获取bean
package xxx; import org.springframework.beans.BeansException; import org.springframework.beans.facto ...
- LOJ 6192 城市网络(树上倍增)
LOJ #6192. 「美团 CodeM 复赛」城市网络(链接) 一棵以 $ 1 $ 号节点为根的树,每个点有一个权值,有 $ q $ 个询问,每次从 $ x $ 点开始往某个祖先 $ y $ 走,初 ...
- apache-2.4.x 编译安装方法
apache-2.4.x 编译安装方法 作者:朱 茂海 /分类:Apache 字号:L M S apache-.2与新出的apache-.4安装不同的地方在于,.4版的已经不自带apr库,所以在安装a ...
- Stree
题目 给出n个点,m条有权边,现对于每一条边,你需要回答出包含这条边的最小生成树的总边权值. 分析 首先我们可以构造一个对于这n个点,m条有权边的最小生成树,显然,这是一棵最小的生成树. 那么这棵生成 ...
- js 获取滚动位置,滚动到指定位置,平滑滚动
1.获取当前滚动条位置信息 var top = dom.scrollTop; // 获取y轴上的滚动位置 var left = dom.scrollLeft; // 获取x轴上的滚动位置 2.滚动到指 ...
- 1. svn 简介
参考文档: http://svndoc.iusesvn.com/ SVN的 相关网站 什么是svn?Subversion是一个“集中式”的信息共享系统.版本库是Subversion的核心部分,是数据的 ...
- CSS背景和CSS3背景background属性
css背景属性用于定义HTML元素的背景 背景属性既可以为单个的单元设置背景,也可以为整个页面设置背景,可以对上述二者的任意组合设置背景,段落.文字.不同状态的链接.图像.内容区域修改其背景样式.设置 ...
- React Native 之SectionList
接上一篇: /pages/SectionListDemo.js import React, {Fragment,Component} from 'react'; import { SafeAreaVi ...