Develop with pleasure!

福岡でCloudとかBlockchainとか。

ペアリングベース暗号のライブラリをRubyから使う

ペアリングベースの暗号の基礎的な数学的演算を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を使ったRubyバインディングを使ってみる↓

github.com

SWIGは、CやC++で書かれたプログラムをJavascriptPerlPHPPythonRubyなどのいろんな言語で使えるようにする開発ツール。

ビルド

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なので↓

cmake package : Ubuntu

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を理解してからだなー。