在最新的IPP 2018中,intel 将ippcp加密库从IPP 库中分离了出来,可以单独安装使用。对各个平台有很不错的兼容性,同时也对SGX提供了支持
一. 安装ippcrypto
1.https://software.intel.com/en-us/get-ipp-cryptography-libraries intel的ippcp下载页面,如果没有intel开发者账号,则需要注册账号
2.下载ippcp
3.解压 l_ippcp_2018.1.163.tgz
进入下载目录 tar zxvf l_ippcp_2018.1.163.tgz
4.安装
进入解压出的文件夹 ./install_GUI.sh
5.配置环境变量(optional)
编辑用户环境变量 ~/.bashrc (/etc/profile 对应su)添加
export IPPCRYPTOROOT=/opt/intel/compilers_and_libraries_2018.1.163/linux/ippcp
export LD_LIBRARY_PATH=$IPPCRYPTOROOT/lib/intel64_lin:D_LIBRARY_PATH
保存后
source ~/.bashrc
二.使用
AES_GCM 加解密
1.写一个简单的 ippcptest.cpp
#include "ippcp.h" #include <stdio.h> #include <stdlib.h> #include <string.h> int AES_GCM_ContextSize=0; int main(int argc, char* argv[]) { IppStatus istate; unsigned char pkey[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8};//16||32||64 unsigned char pIV[16]={1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8}; int keyLen=16; Ipp8u* pKey=pkey; ippsAES_GCMGetSize(&AES_GCM_ContextSize); //encryption IppsAES_GCMState* gcm_context=(IppsAES_GCMState*)malloc(AES_GCM_ContextSize); istate=ippsAES_GCMInit(pKey,keyLen,gcm_context,AES_GCM_ContextSize); char a[12]="hello world"; unsigned char b[12]; ippsAES_GCMProcessIV(pIV,16,gcm_context); ippsAES_GCMStart(pIV,16,NULL,0,gcm_context); istate=ippsAES_GCMEncrypt((unsigned char*)a,b,12,gcm_context); for(int i=0;i<12;i++){ printf("%02x ",b[i]); } printf("\n"); //decryption unsigned char c[12]; IppsAES_GCMState* gcm_context2=(IppsAES_GCMState*)malloc(AES_GCM_ContextSize); istate=ippsAES_GCMInit(pKey,keyLen,gcm_context2,AES_GCM_ContextSize); ippsAES_GCMProcessIV(pIV,16,gcm_context2); ippsAES_GCMStart(pIV,16,NULL,0,gcm_context2); istate=ippsAES_GCMDecrypt(b,c,12,gcm_context2); for(int i=0;i<12;i++){ printf("%c",c[i]); } printf("\n"); return 0; }
2.写一个makefile
Include_Path := /opt/intel/compilers_and_libraries_2018.1.163/linux/ippcp/include Link_Path := /opt/intel/compilers_and_libraries_2018.1.163/linux/ippcp/lib/intel64_lin Link_Flag := -L$(Link_Path) -lippcp -static app: gcc -c ippcptest.cpp -I$(Include_Path) gcc -o app ippcptest.o $(Link_Flag) clean: rm app ippcptest.o
3.make
./app
显示密文和明文,就OK