ペアリングベースの暗号の基礎的な数学的演算をCで実装したlibpbcというライブラリがある。
PBC Library - Pairing-Based Cryptography - About
このライブラリをJavaに移植したJPBCというライブラリもある。
JPBC - Java Pairing-Based Cryptography Library : Introduction
が、Ruby版の移植ライブラリはまだ無いようなので↓(Pythonはあるっぽい)
PBC Library - Pairing-Based Cryptography - Downloads
SWIGは、CやC++で書かれたプログラムをJavascriptやPerl、PHP、Python、Rubyなどのいろんな言語で使えるようにする開発ツール。
ビルド
Ubuntu 16.04 LTS上でビルドする。
libpbcのインストール
$ wget https://crypto.stanford.edu/pbc/files/pbc-0.5.14.tar.gz $ tar xvfz pbc-0.5.14.tar.gz $ cd pbc-0.5.14 $ ./configure $ make $ sudo make install
swigのインストール
$ sudo apt-get install swig
cmake
ビルドにはcmakeの3.7.0以上が必要なので、入ってない場合はインストールする。Ubuntu 16.04の場合aptのリポジトリのcmakeの最新版は3.5.1なので↓
aptではなく、ソースを取得してビルドした。
$ wget https://cmake.org/files/v3.7/cmake-3.7.1.tar.gz $ tar xvfz cmake-3.7.1.tar.gz $ cd cmake-3.7.1 $ ./bootstrap $ make $ sudo make install
/usr/local/bin
にcmakeがインストールされる。
Rubyライブラリの生成
以下のステップでRubyのライブラリを生成する。
$ git clone git@github.com:xu-cheng/pbc-bindings.git $ cd pbc-bindings $ mkdir build $ cd build $ cmake .. -DCMAKE_BUILD_TYPE=Release -DENABLE_RUBY=ON $ make
makeが終わるとbuild/swig/ruby
直下にpbc.soとpbcRUBY_wrap.cxxが生成されてる。
実行
Rubyから実行してみる。pbc.soがあるbuild/swig/ruby
直下でirbする。
2.3.0 :001 > $:.unshift File.join(File.dirname(__FILE__), ".") ... 2.3.0 :002 > require 'pbc' => true 2.3.0 :003 > Pbc::Pairing.new => #<Pbc::Pairing:0x000000011592c0 @__swigtype__="_p_std__shared_ptrT_pbc__Pairing_t">
と、ちゃんとバインディングできてるっぽい。
あとは、まずlibpbcを理解してからだなー。