主要可以用作演示和了解 CP-ABE 的運作模式。
1. 下載以下兩個 Package:
網站: http://acsc.cs.utexas.edu/cpabe/index.html
主程式: cpabe-0.11.tar.gz
函數庫: libbswabe-0.9.tar.gz
2. 確保已經安裝 OpenSSL, NTL Library, GLib:
OpenSSL 可以通過 brew install openssl 安裝。
GLib 則可以通過 brew install glib 安裝。
NTL 可以由 https://www.shoup.net/ntl/download.html 下載。
NTL 安裝教學: https://www.shoup.net/ntl/doc/tour-unix.html (很簡單的)
3. 編譯及安裝 PBC:
到 https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz 下載 PBC
執行 tar zxf pbc-0.5.14.tar.gz 解開封包,然後 cd pbc-0.5.14
然後執行 ./configure ,make 和 sudo make install
3. 編譯及安裝 libbswabe:
執行 tar zxf libbswabe-0.9.tar.gz 解開封包,然後 cd libbswabe-0.9
執行 ./configure CFLAGS="-I/usr/local/opt/openssl@1.1/include" LIBS="-L/usr/local/opt/openssl@1.1/lib"
執行 make CFLAGS="-I/usr/local/opt/glib/include/glib-2.0 -I/usr/local/opt/glib/lib/glib-2.0/include -I/usr/local/include/pbc"
最後 sudo make install
4. 編譯及安裝 cpabe:
執行 tar zxf cpabe-0.11.tar.gz,然後 cd pbc-0.5.14
執行 ./configure CFLAGS="-I/usr/local/opt/openssl@1.1/include -I/usr/local/include" LIBS="-L/usr/local/opt/openssl@1.1/lib -L/usr/local/lib"
最後執行 make 及 sudo make install
如果一切順利,可以 Cmd+N 開一個新的 Terminal,然後查看 which cpabe-setup。
成功的話,會看到它返回 /usr/local/bin/cpabe-setup
5. 小記
在 Catalina 中,這個 Project 需要更改以下兩行:
diff --git a/policy_lang.c b/policy_lang.c
index 7b7672a..2351ea9 100644
--- a/policy_lang.c
+++ b/policy_lang.c
@@ -1942,14 +1942,14 @@ cmp_policy( sized_integer_t* n, int gt, char* attr )
/* some error checking */
- if( gt && n->value >= ((uint64_t)1<<(n->bits ? n->bits : 64)) - 1 )
+ if( gt && n->value >= (n->bits ? (((uint64_t)1<<(n->bits))-1) : UINT64_MAX) )
die("error parsing policy: unsatisfiable integer comparison %s > %llu\n"
"(%d-bits are insufficient to satisfy)\n", attr, n->value,
n->bits ? n->bits : 64);
else if( !gt && n->value == 0 )
die("error parsing policy: unsatisfiable integer comparison %s < 0\n"
"(all numerical attributes are unsigned)\n", attr);
- else if( !gt && n->value > ((uint64_t)1<<(n->bits ? n->bits : 64)) - 1 )
+ else if( !gt && n->value > (n->bits ? (((uint64_t)1<<(n->bits))-1) : UINT64_MAX) )
die("error parsing policy: trivially satisfied integer comparison %s < %llu\n"
"(any %d-bit number will satisfy)\n", attr, n->value,
n->bits ? n->bits : 64);
No comments:
Post a Comment