在最新的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