前言
项目中需要使用国密2加密(SM2加密),关于国密的知识点,相信你在看到这篇博客之前已经有所了解,不再赘述。
gmssl 参数,使用./Configure命令可以在安装成功后查看编译参数。
# --prefix 指定 gmssl 的安装路径。【默认是 /usr/local/ssl】。
# --openssldir 表示 OpenSSL 数据区域,例如openssl.cnf,证书和密钥. 如果是相对目录,它将被添加到--prefix给定的目录中。【可以不指定,默认在 --prefix 同级目录的 ssl 目录】。
# --no-shared 表示只编译静态库,不编译动态库。
#--DGMSSL_NO_TURBO 显式指定不要用EC_GFp_sm2z256_method这个快速实现。
#-- asm no-asm 是否在编译过程中使用汇编代码加快编译过程。
#-- iphoneos-cross ios_x86_64架构,模拟器。【默认】
#-- ios-cross ios_armv7架构。
#-- ios64-cross iOS-arm64架构。
可以用文本文件打开Configure,可以看到编译参数的解释
一,源码准备
brew install wget
wget https://github.com/guanzhi/GmSSL/archive/master.zip
unzip master.zip
二,安装编译(默认编译x86_64架构的编译环境,模拟器),此步骤会编译出模拟器下运行的静态库.a文件,也会在你的mac上安装上gmssl。
cd GmSSL-master
sed -i '' 's%qw/glob%qw/:glob%g' Configure
sed -i '' 's%qw/glob%qw/:glob%g' test/build.info
sed -i '' 's%qw/glob%qw/:glob%g' test/run_tests.pl
vim ~/.bashrc
点击键盘i,开始编辑,输入
export PATH=$PATH:/usr/local/gmssl/bin
点击键盘esc后,输入:wq,保存并退出vim编辑
source ~/.bashrc 使上面的编辑生效
./config no-shared --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl
make
make test(可忽略)
sudo make install
查看是否安装成功
gmssl version -a
查看静态库文件支持的编译环境
lipo -info .a文件路径
三,编译ARM64的静态库文件
make distclean
export CC=clang
export CROSS_TOP=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer
export CROSS_SDK=iPhoneOS.sdk
export PATH="/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin:$PATH"
./Configure ios64-cross -DGMSSL_NO_TURBO no-shared --prefix=/usr/local/openssl-ios64 或者 ./Configure ios64-cross -DGMSSL_NO_TURBO no-shared --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl
make
四,编译ARMV7的静态库文件
参考第三步,不一样的命令改了一个参数
./Configure ios-cross -DGMSSL_NO_TURBO no-shared --prefix=/usr/local/gmssl --openssldir=/usr/local/gmssl
五,合并静态库文件,使其支持真机和模拟器
lipo -create 模拟器.a文件路径 真机.a文件路径 -output 合成的.a文件路径
关于SM2加密的内容,目前是用c语言封装的库供Objective-C调用,后续有时间再写。欢迎指正和提问! 😀