Windows上使用VS 2010编译OpenSSL 1.1.1-pre6(该版本支持SM2、SM3、SM4算法)

    OpenSSL 官网在 2018 年 5 月 1 日发布了 OpenSSL 1.1.1-pre6 版。在该版本的 OpenSSL 中,增加了对 TLS v1.3 的支持,提供了对中国国密算法 SM2、SM3、SM4 的支持。

    到官网 https://www.openssl.org 下载并解压 openssl-1.1.1-pre6.tar.gz ,可以看到在 crypto 目录下包含 sm2、sm3、sm4 三个子目录,各子目录下包含对应国密算法的 C 语言实现。在 crypto\objects\objects.txt 文件中,可以找到以下与SM2、SM3算法有关的内容:

sm-scheme 301           : SM2                   : sm2

sm-scheme 401           : SM3                   : sm3
sm-scheme 504           : RSA-SM3		: sm3WithRSAEncryption

    还可以找到与SM4算法有关的内容:

# Definitions for SM4 cipher

sm-scheme 104 1         : SM4-ECB             : sm4-ecb
sm-scheme 104 2         : SM4-CBC             : sm4-cbc
!Cname sm4-ofb128
sm-scheme 104 3         : SM4-OFB             : sm4-ofb
!Cname sm4-cfb128
sm-scheme 104 4         : SM4-CFB             : sm4-cfb
sm-scheme 104 5         : SM4-CFB1            : sm4-cfb1
sm-scheme 104 6         : SM4-CFB8            : sm4-cfb8
sm-scheme 104 7         : SM4-CTR             : sm4-ctr


    OpenSSL 1.1.1-pre6 版与以前版本相比,在接口上有一些变化,不能保证对以前接口的兼容性,所以在使用时要特别注意。OpenSSL 1.1.1-pre6 版在 Windows 平台上的编译方法也与以前版本有所不同,这里介绍一下在 64 位 Windows 7 上使用 Visual Studio 2010 编译的过程,具体步骤如下:

    首先需要安装 Perl,可以到网站 https://www.activestate.com/activeperl 下载并安装 ActivePerl。然后要考虑是否需要编译汇编模块,如果需要的话,必须先到 https://www.nasm.us/ 网站下载安装 NASM。该版本的 OpenSSL 只支持 NASM,不支持微软的汇编编译器。
    接下来如果要编译 32 位的库文件,使用管理员身份启动 Visual Studio 命令提示界面,依次执行以下命令:
perl Configure VC-WIN32 no-asm    (未用到汇编,所以要加入 no-asm 参数)
nmake
nmake test    (这一步执行测试,如果不需要做测试可以跳过)
nmake install    (如果不使用管理员身份启动VS提示界面,这一步会报错)
    OpenSSL 会自动在 C:\Program Files (x86) 路径下创建 OpenSSL 目录,将编译好的程序放到该目录下。
    如果要编译 64 位的库文件,使用管理员身份启动 Visual Studio x64 Win64 命令提示界面,依次执行以下命令:
perl Configure VC-WIN64A no-asm
nmake
nmake test
nmake install
    OpenSSL 会自动在 C:\Program Files 路径下创建 OpenSSL 目录,将编译好的程序放到该目录下。


    在执行 nmake test 时,会出现如下的一些提示信息:

skipped: md2 is not supported by this OpenSSL build
skipped: rc5 is not supported by this OpenSSL build
skipped: This test is unsupported  in a shared library build on Windows
skipped: test_rehash is not available on this platform
skipped: test_tls3downgrade not run in pre TLSv1.3 RFC implementation
    由此可以看出 OpenSSL 1.1.1-pre6 版已取消了对 md2、 rc5 算法的支持。
    测试完成后,正常时的显示结果大致如下:
All tests successful.
Files=146, Tests=1310, 614 wallclock secs
Result: PASS


    查看 C:\Program Files(x86)\OpenSSL 或 C:\Program Files\OpenSSL 目录,下面都包含 bin, html, include, lib 四个子目录。openssl.exe 及 32位动态库文件libcrypto-1_1.dll 和 libssl-1_1.dll (或 64 位动态库文件 libcrypto-1_1-x64.dll 和 libssl-1_1-x64.dll)存放在 bin 子目录下,html 目录下存放网页形式的用户手册,include\openssl 目录下存放 .h 头文件,与dll动态库对应的导入库文件 libcrypto.lib 和 libssl.lib,以及 egnines 相关文件存放在 lib 目录下。注意在 lib 目录下的 libcrypto.lib 和 libssl.lib 不是静态库。

    对于 SM2 算法,在 include\openssl 目录下包含 sm2.h 和 sm2err.h 两个头文件。对于 SM3 和 SM4 算法,没有独立的头文件,调用前可以参考 html\man3 路径下的以下文件:EVP_sm3.html,EVP_sm4_cbc.html,EVP_sm4_cfb.html,EVP_sm4_ctr.html,EVP_sm4_ecb.html,EVP_sm4_ofb.html 。

    在 include\openssl 路径下的 obj_mac.h 文件中,定义了以下与 SM2、SM3 算法相关的内容:

#define SN_sm2          "SM2"
#define LN_sm2          "sm2"
#define NID_sm2         1172
#define OBJ_sm2         OBJ_sm_scheme,301L

#define SN_sm3          "SM3"
#define LN_sm3          "sm3"
#define NID_sm3         1143
#define OBJ_sm3         OBJ_sm_scheme,401L

    定义了以下与 SM4 算法相关的内容:

#define SN_sm4_ecb              "SM4-ECB"
#define LN_sm4_ecb              "sm4-ecb"
#define NID_sm4_ecb             1133
#define OBJ_sm4_ecb             OBJ_sm_scheme,104L,1L

#define SN_sm4_cbc              "SM4-CBC"
#define LN_sm4_cbc              "sm4-cbc"
#define NID_sm4_cbc             1134
#define OBJ_sm4_cbc             OBJ_sm_scheme,104L,2L

#define SN_sm4_ofb128           "SM4-OFB"
#define LN_sm4_ofb128           "sm4-ofb"
#define NID_sm4_ofb128          1135
#define OBJ_sm4_ofb128          OBJ_sm_scheme,104L,3L

#define SN_sm4_cfb128           "SM4-CFB"
#define LN_sm4_cfb128           "sm4-cfb"
#define NID_sm4_cfb128          1137
#define OBJ_sm4_cfb128          OBJ_sm_scheme,104L,4L

#define SN_sm4_cfb1             "SM4-CFB1"
#define LN_sm4_cfb1             "sm4-cfb1"
#define NID_sm4_cfb1            1136
#define OBJ_sm4_cfb1            OBJ_sm_scheme,104L,5L

#define SN_sm4_cfb8             "SM4-CFB8"
#define LN_sm4_cfb8             "sm4-cfb8"
#define NID_sm4_cfb8            1138
#define OBJ_sm4_cfb8            OBJ_sm_scheme,104L,6L

#define SN_sm4_ctr              "SM4-CTR"
#define LN_sm4_ctr              "sm4-ctr"
#define NID_sm4_ctr             1139
#define OBJ_sm4_ctr             OBJ_sm_scheme,104L,7L

    还定义了以下与中国算法有关的标识:

#define SN_ISO_CN               "ISO-CN"
#define LN_ISO_CN               "ISO CN Member Body"
#define NID_ISO_CN              1140
#define OBJ_ISO_CN              OBJ_member_body,156L

#define SN_oscca                "oscca"
#define NID_oscca               1141
#define OBJ_oscca               OBJ_ISO_CN,10197L

#define SN_sm_scheme            "sm-scheme"
#define NID_sm_scheme           1142
#define OBJ_sm_scheme           OBJ_oscca,1L
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值