• 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调用,后续有时间再写。欢迎指正和提问! 😀

  • 相关阅读:
    分布式事务
    在 Streamlit 中使用自定义 CSS 创建加密仪表板
    SpringBoot集成swagger
    网络端口和端口扫描简介
    云服务背景下的Django模型迁移
    单调栈详解
    Pikachu靶场——远程命令执行漏洞(RCE)
    为视觉语言多模态模型进行偏好优化
    建立Logistic模型进行分析--课后习题3(多元统计分析)
    如何使用 Jmeter 进行抢购、秒杀等场景下,进行高并发?
  • 原文地址:https://blog.csdn.net/weixin_38934440/article/details/126146792