谨以此篇博文献给折腾了好几天的自己,尴尬
cpabe依赖pbc,pbc依赖gmp,gmp依赖M4、bison、flex,所以我们一步步开始,首先登陆root账户,否则权限不够。
1. 安装M4、bison、flex
M4、bison、flex均可以在terminal中通过sudo apt-get install方式直接安装
sudo apt-get install M4
sudo apt-get install flex
sudo apt-get install bison
2.安装GMP
GMP下载地址:https://gmplib.org/,编辑本文时,已更新到了gmp-6.1.1.tar.bz2版本
下载后解压到gmp-6.1.1.tar.bz2文件夹中,然后进入目录gmp-6.1.1,命令:
tar -xvf gmp-6.1.1.tar.bz2
cd gmp-6.1.1
然后安装
./configure
sudo make check
sudo make
sudo make install
3.安装PBC
PBC下载地址:http://crypto.stanford.edu/pbc/download.html,下载pbc-0.5.14.tar.gz版本,下载后在terminal里解压文件夹安装,命令:
tar -xvf pbc-0.5.14.tar.gz
cd pbc-0.5.14
然后安装
./configure
sudo make
sudo make install
到此PBC环境配置完成,然后进行测试
进入pbc-0.5.14 —example目录下,里面有一些案例,随便复制一个.c文件,自定义命名为foo.c,更改里面的内容成:
#include "pbc.h"
int main(void)
{
printf("this is a test\n");
return 0;
}
(当然你也可以新建一个.c文件)
在terminal终端下键入如下代码
gcc -o foo foo.c
应该会有两个错误,错误原因请查看链接:http://crypto.stanford.edu/pbc/howto.html
我们可以通过如下的代码编译文件:
gcc -o foo foo.c -I /usr/local/include/pbc -L /usr/local/lib -Wl,-rpath /usr/local/lib -l pbc
注意:如果此处出错,试着把 -Wl,-rpath 改为 -Wl,-R
编译成功后,会发现在该目录下生成一个可执行文件foo,
然后在终端运行该文件:
./foo
运行成功会打印出:
this is a test
这表明,PBC环境配置成功
4. 安装CPABE
安装CPABE前,先安装openssl 和glib ,直接在线安装就可以:
sudo apt-get install libssl-dev
sudo apt-get install libglib2.0-dev
在http://acsc.cs.utexas.edu/cpabe/下载libbswabe-0.9.tar.gz 和cpabe-0.11.tar.gz,必须先安装libbswabe
tar -xvf libbswabe-0.9.tar.gz
cd libbswabe-0.9
./configure
sudo make
sudo make install
然后安装cpabe
tar -xvf cpabe-0.11.tar.gz
cd cpabe-0.11
./configure
sudo make
这一步后会出现错误
/usr/bin/ld: /usr/local/lib/libpbc.so: undefined reference to symbol '__gmpz_init'
/usr/local/lib/libgmp.so: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
Makefile:34: recipe for target 'cpabe-setup' failed
make: *** [cpabe-setup] Error 1
解决方法:修改Makefile,
vi Makefile
#进入Makefile,注意这里M一定是大写,进入后找到找到以LDFLAGS开头的以下部分:
LDFLAGS = -O3 -Wall \
-lglib-2.0 \
-Wl,-rpath /usr/local/lib -lgmp \
-Wl,-rpath /usr/local/lib -lpbc \
-lbswabe \
-lcrypto -lcrypto \
在最后加入-lgmp,加入后变成
LDFLAGS = -O3 -Wall \
-lglib-2.0 \
-Wl,-rpath /usr/local/lib -lgmp \
-Wl,-rpath /usr/local/lib -lpbc \
-lbswabe \
-lcrypto -lcrypto \
-lgmp
注意:这里需要用到vi编辑的一些知识。在进入Makefile后,将光标移至-lcrypto -lcrypto后面,输入i进入编辑模式,输入”\”,然后enter,另起一行,然后直接按Tab,输入-lgmp (-lgmp前面必须是TAB键)。输入的时候小心,多任何一个空格都会出错!完成后按Ese退出编辑模式,然后输入冒号“:”进入命令模式,会发现光标定位到了最低端,此时输入wq即保存退出vi了,如果编辑错了也不用担心,在“:”后输入 q! 即可不保存退出,然后重新进入修改。
Makefile 修改完成后,
sudo make
可能还会出现问题
policy_lang.y: In function ‘yyparse’:
policy_lang.y:67:38: error: expected ‘;’ before ‘}’ token
Makefile:50: recipe for target 'policy_lang.o' failed
make: *** [policy_lang.o] Error 1
这时候,需要修改policy_lang.y文件
vi policy_lang.y
进入policy_lang.y后,在67行的 } 前加入;即可
完成后,
sudo make
sudo make install
就不会有问题了
编译成功后进行测试
cpabe-setup -h
这时显示
Usage: cpabe-setup [OPTION ...]
Generate system parameters, a public key, and a master secret key
for use with cpabe-keygen, cpabe-enc, and cpabe-dec.
Output will be written to the files "pub_key" and "master_key"
unless the --output-public-key or --output-master-key options are
used.
Mandatory arguments to long options are mandatory for short options too.
-h, --help print this message
-v, --version print version information
-p, --output-public-key FILE write public key to FILE
-m, --output-master-key FILE write master secret key to FILE
-d, --deterministic use deterministic "random" numbers
(only for debugging)
说明环境搭建成功!