最近公司項目需要用到sm2的加簽功能,IOS方面的實現(xiàn)找了很久也沒找到野来,最后用了GmSSL來實現(xiàn),GMSSL里面有基于C語言實現(xiàn)的sm2踪旷,這里踩了挺多坑的曼氛,所以記錄一下。參考的大神帖:http://blog.cocoachina.com/article/38141
一令野、下載一個GmSSL,官網(wǎng):http://gmssl.org/ 也可以去github上下載https://github.com/guanzhi/GmSSL
二舀患、編譯靜態(tài)庫 在官網(wǎng)的文檔里面有編譯安裝的文檔http://gmssl.org/docs/install.html,但是只支持arm64气破,amrv7聊浅、7s沒有說,下面是實現(xiàn)arm64现使、armv7低匙、armv7s的編譯和安裝過程
一、使用終端cd到GmSSL目錄
cd /Users/better/Desktop/GmSSL-2.3.1 //cd到你的GmSSL文件夾
./Congifure //查看支持的編譯環(huán)境
二朴下、因為我們需要用到IOS的編譯文件努咐,所以我們需要配置 ios64-cross(arm64)苦蒿、iphoneos-cross(armv7殴胧、armv7s)、darwin64-x86_64-cc (x86_64) 、 darwin-i386-cc (i386)
./Configure iphoneos-cross
三团滥、打開GmSSL的文件夾竿屹,在根目錄里面找到并打開Makefile文件(文本編輯就可以打開),這里要修改兩處地方
1灸姊、搜搜"CC="關(guān)鍵字拱燃,把CC=那一行改為CC=/Applications/XCode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s (這里需要根據(jù)上面配置的編譯環(huán)境而改變,上面編譯環(huán)境用的是ios64-cross力惯,這里的-arch后面改為arm64碗誉,用iphoneos-cross是改為armv7或armv7s)
2、搜索“-isysroot”父晶,把-isysroot后面的
&(CROSS_TOP)/SDKs/$(CROSS_SDK) -fno-common
修改為
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.4.sdk(-isysroot后面修改前的代碼可能不一樣哮缺,直接把-isysroot后面的代碼按上面改就好。我這里的iPhoneOS11.4.sdk是11.4的甲喝,需要按你本機的版本來改尝苇,可以在/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs路徑看看你的sdk版本號)
四、打開終端埠胖,去到GmSSL
make
這里可能會有報錯
意思是aes.h映射aes_core.c里面的AES_set_encrypt_key方法糠溜,bits參數(shù)的類型不一致。我們先找打開GmSSL里面的include/openssl/aes.h直撤,搜索AES_set_encrypt_key方法把參數(shù)const unsigned int bits改為int bits后重新make一下就ok了
五非竿、安裝
sudo make install
安裝成功后去GmSSL文件夾里面會看到兩個靜態(tài)庫libcrypto.a、libssl.a
六谊惭、合并靜態(tài)庫
根據(jù)上述5點分別生成arm64汽馋、armv7、7s的靜態(tài)庫(ps:在安裝完第一個之后/usr/local目錄會多了一個share文件夾圈盔,是安裝成功后生成的豹芯,這個時候安裝第二個需要把這個share文件夾刪掉,不然會有報錯信息/usr/local/share/man/man3/hamc.3:,刪掉share文件夾之后重新sudo make install就好了)
在編譯不同的版本的靜態(tài)庫時驱敲,建議編譯完后重新解壓一個出來編譯不同的編譯環(huán)境铁蹈,用make clean命令不夠徹底。
合并命令
lipo -create 路徑/libssl.a 路徑/libssl.a 路徑/libssl.a -output 輸出路徑/libssl.a
這里的路徑都是絕對路徑众眨,需要自行設(shè)置
以上就是IOS編譯安裝GmSSL的全部步驟了