• Mac环境下 gmssl编译iOS静态库


    前言

     

    项目中需要使用国密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调用,后续有时间再写。欢迎指正和提问! 😀

  • 相关阅读:
    Docker容器的5个实用案例
    Linux学习记录——이십팔 网络基础(1)
    Vue项目实战——实现GitHub搜索案例(学以致用,两小时带你巩固和强化Vue知识点)
    LeetCode 125.验证回文串
    java基础类库
    Google Earth Engine ——利用公开的河流数据计算河流的有效宽度
    李沐《动手学深度学习》d2l——安装和使用
    AttributeError: module ‘OpenSSL.SSL’ has no attribute ‘SSLv3_METHOD
    WPF程序打包
    ubuntu22.04下面安装josm
  • 原文地址:https://blog.csdn.net/weixin_38934440/article/details/126146792