2011/09/15(Thu)CPABEのコンパイル方法

2011/09/15 22:44 Software::Linux
CPABE(Ciphertext-Policy Attribute-Based Encryption)というのを試しにコンパイルしてみたら、ちょっとハマったのでメモ。
私の近くの人が喜ぶかもね。

環境

Fedora 14
Linux 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=/opt
configureの最後に
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