注意事項
- cpabe依賴pbc,pbc依賴gmp,gmp依賴M4、bison、flex
- 如果權限不夠 ,命令的前面加上sudo ,不要直接使用root用戶進行操作,其帶來的隱患有很多
第一步 配置簡單的環境
- 簡單環境 包括gcc、g++、make、cmake、openssl
- 安裝之前需要更新apt-get ,命令如下? ?sudo apt-get update
- gcc安裝:sudo apt-get install gcc
- g++安裝:gcc sudo apt-get install g++
- make安裝:gcc sudo apt-get install make
- cmake比較麻煩??cmake安裝參考鏈接
- openssl安裝:? sudo apt-get install openssl? ?和? ?sudo apt-get install libssl-dev
參考鏈接
第二步 安裝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
第三步 安裝GMP
- GMP下載地址
- 使用 命令xz -d gmp-6.2.1.tar.xz解壓文件,生成一個tar格式的文件
- 如果使用命令sudo tar -xvf?gmp-6.2.1.tar失敗的話,或者沒有安裝xz的話,最好使用7zip完成第一步解壓的任務,然后將tar文件上傳到ubuntu,使用tar命令解壓文件
- tar命令 不要出現 z,只有-xvf三個元素
- 不要使用7zip解壓tar文件,再將文件夾上傳到ubuntu,這個會出錯

- cd gmp-6.2.1.tar.xz 進入解壓目錄
- ./configure? --enable-cxx?
- 開始編譯
- sudo make
- make check
- sudo make install

測試
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gmp.h>int main()
{mpz_t a,b;mpz_init(a);mpz_init(b);mpz_init_set_ui(a, 2);mpz_pow_ui(b, a, 1000);gmp_printf("b = %Zd\n", b);mpz_clear(a);mpz_clear(b);return 0;
}
// 計算2的1000次方
- 新建.c文件 名字是test_gmp.c
- 使用命令進行編譯? gcc -o test test_gmp.c -lgmp
- 使用命令 ./test 進行測試

參考鏈接
第四步安裝PBC

- tar -xvf pbc-0.5.14.tar.gz
- cd pbc-0.5.14
- ./configure
- sudo make
- sudo make install
測試
#include "pbc.h"
int main(void)
{
printf("this is a test\n");
return 0;
}
- ?如果使用常規編譯方式會出現錯誤?
- 正確編譯方式:gcc -o foo foo.c -I /usr/local/include/pbc -L /usr/local/lib -Wl,-rpath /usr/local/lib -l pbc
- 原因解釋:Programming in Linux
- 終端運行 ./foo
- 運行成功輸出內容如下? this is? a test

第五步 安裝屬性加密算法CP-ABE
- 安裝 glib?
- sudo apt-get install libglib2.0-dev
- Ciphertext-Policy Attribute-Based Encryption? 下載cpabe 和 libbswabe

需要先安裝?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
錯誤1
/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開頭的以下部分
- 注意:這里需要用到vi編輯的一些知識。在進入Makefile后,將光標移至-lcrypto -lcrypto后面,輸入i進入編輯模式,輸入”\”,然后enter,另起一行,然后直接按Tab,輸入-lgmp (-lgmp前面必須是TAB鍵)。輸入的時候小心,多任何一個空格都會出錯!完成后按Ese退出編輯模式,然后輸入冒號“:”進入命令模式,會發現光標定位到了最低端,此時輸入wq即保存退出vi了,如果編輯錯了也不用擔心,在“:”后輸入 q! 即可不保存退出,然后重新進入修改。
舊版本
LDFLAGS = -O3 -Wall \-lglib-2.0 \-Wl,-rpath /usr/local/lib -lgmp \-Wl,-rpath /usr/local/lib -lpbc \-lbswabe \-lcrypto -lcrypto
新版本
LDFLAGS = -O3 -Wall \-lglib-2.0 \-Wl,-rpath /usr/local/lib -lgmp \-Wl,-rpath /usr/local/lib -lpbc \-lbswabe \-lcrypto -lcrypto \-lgmp
錯誤2
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
- 在?67行的 } 前加入;即可
- sudo make
- sudo make install
測試
- cpabe-setup -h
- 如果結果和下文一致,表明安裝成功

參考鏈接
- Ubuntu15.10下CPABE環境搭建
- CP-ABE ToolKit 安裝筆記