2011/09/15(Thu)CPABEのコンパイル方法
2011/09/15 22:44
私の近くの人が喜ぶかもね。
環境
Fedora 14Linux 2.6.35.14-95.fc14.i686.PAE #1 SMP Tue Aug 16 21:12:22 UTC 2011 i686 i686 i386 GNU/Linux
PBC(Pairing-based cryptography)のコンパイル
PBCは、GMP libaryを使ったペアリング暗号ライブラリらしい。CPABEのコンパイルのために必要なので、先にコンパイルしておく。
で、ちょっとハマったので、詳細にメモ。
ダウンロードからpbc-0.5.12.tar.gzを落としてきて解凍。
$ wget http://crypto.stanford.edu/pbc/files/pbc-0.5.12.tar.gz $ tar zxvf pbc-0.5.12.tar.gz $ cd pbc-0.5.12/んで、
./configureすると、
************************ gmp library not found add its path to LDFLAGS see ./configure --help ************************と言われたので、GMP libraryをインストール。
このPCでは既にインストール済みだったけれど、openssl-develも必要。
$ sudo yum install gmp-devel Installed: gmp-devel-4.3.1-7.fc14.i686すると無事にconfigureは通るが、makeでコケる。
$ ./configure --prefix=/opt (略) global build variables ----------------------------------------- Thu Sep 15 21:58:56 JST 2011 host info: i686-pc-linux-gnu optimized build: no LDFLAGS: CPPFLAGS: CFLAGS: -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -g -O2 ----------------------------------------- $ make /bin/sh ./libtool --tag=CC --mode=link gcc -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -g -O2 -o pbc/pbc pbc_pbc-parser.tab.o pbc_pbc-lex.yy.o pbc_pbc-pbc.o pbc_pbc-pbc_getline.o pbc_pbc-darray.o pbc_pbc-symtab.o libpbc.la libtool: link: gcc -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -g -O2 -o pbc/.libs/pbc pbc_pbc-parser.tab.o pbc_pbc-lex.yy.o pbc_pbc-pbc.o pbc_pbc-pbc_getline.o pbc_pbc-darray.o pbc_pbc-symtab.o ./.libs/libpbc.so -Wl,-rpath -Wl,/usr/local/lib /usr/bin/ld: pbc_pbc-pbc.o: undefined reference to symbol '__gmpz_nextprime' /usr/bin/ld: note: '__gmpz_nextprime' is defined in DSO /usr/lib/libgmp.so.3 so try adding it to the linker command line /usr/lib/libgmp.so.3: could not read symbols: Invalid operation collect2: ld returned 1 exit status make[2]: *** [pbc/pbc] エラー 1 make[2]: ディレクトリ `/tmp/pbc-0.5.12' から出ます make[1]: *** [all-recursive] エラー 1 make[1]: ディレクトリ `/tmp/pbc-0.5.12' から出ます make: *** [all] エラー 2どうやら、GMP libraryがリンクされていないらしい。
$ LDFLAGS=-lgmp ./configure --prefix=/opt (略) global build variables ----------------------------------------- Thu Sep 15 22:00:57 JST 2011 host info: i686-pc-linux-gnu optimized build: no LDFLAGS: -lgmp CPPFLAGS: CFLAGS: -Wall -W -Wfloat-equal -Wpointer-arith -Wcast-align -Wstrict-prototypes -Wredundant-decls -Wendif-labels -Wshadow -pipe -ffast-math -U__STRICT_ANSI__ -std=gnu99 -g -O2 ----------------------------------------- $ make $ sudo make installで無事にコンパイルが通る。
make installしておかないと、後のライブラリ参照でうまく引けないようなので、/optとか適当な空きフォルダに入れておく。(/usr/localに入れるよりも後処理楽だし)
libbswabe(core crypto operations library)のコンパイル
CPABEのライブラリのとこに置いてある、libbswabe-0.9をダウンロード。$ wget http://acsc.cs.utexas.edu/cpabe/libbswabe-0.9.tar.gz $ tar zxvf libbswabe-0.9.tar.gz $ cd libbswabe-0.9/ $ ./configure --prefix=/opt (略) checking for the PBC library... not found configure: error: The PBC library was not found on your system! Please obtain it from http://crypto.stanford.edu/pbc/ and install it before trying again. If libpbc is already installed in a non-standard location, try again with ./configure --with-pbc-include=DIR --with-pbc-lib=DIR If you already specified those arguments, double check that pbc.h can be found in the first path and libpbc.a can be found in the second. See ./configure --help for more information.ま、このままだと当然さっきコンパイルしたPBC libraryが見つけられないわけで……
$ ./configure --with-pbc-include=/opt/include/pbc --with-pbc-lib=/opt/lib --prefix=/opt $ make $ sudo make installで完了。
configureテストで使っているサンプルコードが#include <pbc.h>とやっちゃっているので、/opt/includeでなくて/opt/include/pbcを指定しなければいけないのがミソ。
CPABE(Ciphertext-Policy Attribute-Based Encryption)のコンパイル
さてさて、メインディッシュ。cpabe-0.11.tar.gzをダウンロード。さっきコンパイルしたPBCとlibbswabeを一緒に指定します。
$ wget http://acsc.cs.utexas.edu/cpabe/cpabe-0.11.tar.gz $ tar zxvf cpabe-0.11.tar.gz $ cd cpabe-0.11/ $ ./configure --with-pbc-include=/opt/include/pbc --with-pbc-lib=/opt/lib --with-bswabe-include=/opt/include --with-bswabe-lib=/opt/lib --prefix=/optconfigureの最後に
config.status: WARNING: 'Makefile.in' seems to ignore the --datarootdir settingとか言われるけど気にしない。
$ make $ sudo make install
完成♪
/optはこんな感じになりました。$ ls -R /opt /opt: bin/ include/ lib/ share/ /opt/bin: cpabe-dec* cpabe-enc* cpabe-keygen* cpabe-setup* /opt/include: bswabe.h pbc/ /opt/include/pbc: pbc.h pbc_f_param.h pbc_memory.h pbc_random.h pbc_a1_param.h pbc_field.h pbc_mnt.h pbc_singular.h pbc_a_param.h pbc_fieldquadratic.h pbc_multiz.h pbc_test.h pbc_curve.h pbc_fp.h pbc_pairing.h pbc_utils.h pbc_d_param.h pbc_g_param.h pbc_param.h pbc_z.h pbc_e_param.h pbc_hilbert.h pbc_poly.h /opt/lib: libbswabe.a* libpbc.a libpbc.la* libpbc.so@ libpbc.so.1@ libpbc.so.1.0.0* /opt/share: man/ /opt/share/man: man1/ /opt/share/man/man1: cpabe-dec.1 cpabe-enc.1 cpabe-keygen.1 cpabe-setup.1