/ CRYPTOGRAPHY

HElibをインストールした

研究をしていく中でHEのライブラリがほしくなったのでHElibをインストールした.

現在主流のライブラリといえばHElibとMicroSoftのSEALであろう.個人的にはPythonラッパーであるPyfhelにも注目している.
WindowsでSEAL環境を構築したあとでこの作業を行ったがまあ大変だった…
かなり試行錯誤を繰り返したため,以下の記事には抜けがあると思います.

【2021/01/12追記】

Dockerfileから環境構築する方がM倍簡単かつ確実です!!!

DockerではじめるHElib【Windows+Docker+HElib+VS Code】

痕跡

無駄なコマンド履歴を放置しているが,codeによるファイルの書き換え以外は一連の作業を追えると思う.

Building and installing HElib

参考

https://github.com/homenc/HElib/blob/master/INSTALL.md

General prerequisites

  • GNU make >= 3.82
  • pthreads
  • git >= 1.8.3 (required to build and run the HElib test suite)

Linux environment:

  • g++ >= 7.3.1
  • cmake >= 3.10.2

Option 1: package build (recommended for most users)

  • m4 >= 1.4.16
  • patchelf >= 0.9 (if building on Linux)
sudo apt install m4 m4-doc  
sudo apt install patchelf

pthreads

参考

https://github.com/krakjoe/pthreads

Requirements

  • PHP 7.2+
  • ZTS Enabled ( Thread Safety )
  • Posix Threads Implementation

php7.4について

執筆当時,phpの最新バージョンは7.4.xだったが,php7.4ではmake中に
member named ‘run_time_cache’; did you mean ‘run_time_cache__ptr’?
などといったエラーが出てうまくmakeできない.
https://github.com/krakjoe/pthreads/issues/944

pthreadsはphp7.4での開発が中止されていることがissue#929にて言及されているので,諦めてPHP7.2を使用することにした.

pthreads & php7.2.20(ZTS enabled)

sudo apt install php7.2などとせず,ソースからビルドしていく必要がある.

参考

https://blog.programster.org/ubuntu16-04-compile-php-7-2-with-pthreads
https://www.rapidspike.com/blog/php72-pthreads/

sudo apt-get update  
sudo apt-get upgrade  
sudo apt install cmake  
sudo apt-get install libzip-dev bison autoconf build-essential pkg-config git-core libltdl-dev libbz2-dev libxml2-dev libxslt1-dev libssl-dev libicu-dev libpspell-dev libenchant-dev libmcrypt-dev libpng-dev libjpeg8-dev libfreetype6-dev libmysqlclient-dev libreadline-dev libcurl4-openssl-dev  

↑Download the necessary packages for compilation.

wget https://github.com/php/php-src/archive/php-7.2.20.tar.gz  
tar --extract --gzip --file php-7.2.20.tar.gz  
cd php-src-php-7.2.20/
./buildconf --force  
./configure --prefix=/etc/php7 --with-bz2 --with-zlib --enable-zip --disable-cgi --enable-soap --enable-intl --with-openssl --with-readline --with-curl --enable-ftp --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-sockets --enable-pcntl --with-pspell --with-enchant --with-gettext --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --with-xsl --enable-bcmath --enable-mbstring --enable-calendar --enable-simplexml --enable-json --enable-hash --enable-session --enable-xml --enable-wddx --enable-opcache --with-pcre-regex --with-config-file-path=/etc/php7/cli --with-config-file-scan-dir=/etc/php7/etc --enable-cli --enable-debug --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mcrypt --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-pthreads --with-tsrm-pthreads --enable-maintainer-zts  
make  
sudo make install  
/etc/php7/bin/php -r "echo PHP_ZTS;" 

“1”が返されればOK

sudo chmod o+x /etc/php7/bin/phpize  
sudo chmod o+x /etc/php7/bin/php-config   
   
wget http://pecl.php.net/get/pthreads-3.1.6.tgz  
tar -xzvf pthreads-3.1.6.tgz  
mv pthreads-3.1.6 php-src-php-7.2.20/ext/pthreads  
cd /home/teahat/phpsrc-php-7.2.20/ext/pthreads  
./configure --prefix='/etc/php7' --with-libdir='/lib/x86_64-linux-gnu' --enable-pthreads=shared --with-php-config='/etc/php7/bin/php-config'  
make  
sudo make install  
  
cd .. 

/home/teahat/php-src-php-7.2.20に戻る.

rm configure  
./configure --prefix=/etc/php7 --with-bz2 --with-zlib --enable-zip --disable-cgi --enable-soap --enable-intl --with-openssl --with-readline --with-curl --enable-ftp --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-sockets --enable-pcntl --with-pspell --with-enchant --with-gettext --with-gd --enable-exif --with-jpeg-dir --with-png-dir --with-freetype-dir --with-xsl --enable-bcmath --enable-mbstring --enable-calendar --enable-simplexml --enable-json --enable-hash --enable-session --enable-xml --enable-wddx --enable-opcache --with-pcre-regex --with-config-file-path=/etc/php7/cli --with-config-file-scan-dir=/etc/php7/etc --enable-cli --enable-debug --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mcrypt --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-shmop --enable-pthreads --with-tsrm-pthreads --enable-maintainer-zts  
  
/etc/php7/bin/php -r "print_r(class_exists('Thread'));" 

“1”が返さればOK.エラーが起きている場合は逐次必要なものをDL

mkdir -p /etc/php7/cli/
sudo mkdir -p /etc/php7/cli/
sudo cp php.ini-production /etc/php7/cli/php.ini
echo "extension=pthreads.so" | sudo tee -a /etc/php7/cli/php.ini
echo "zend_extension=opcache.so" | sudo tee -a /etc/php7/cli/php.ini
rm /usr/bin/php
sudo ln -s /etc/php7/bin/php /usr/bin/php

HElib

https://xcb.freedesktop.org/dist/ よりlibxcb-1.14.tar.gz をDL.

tar -zxvf libxcb-1.14.tar.gz  
cd libxcb-1.14/
sudo apt-get install xcb-proto  
sudo apt install python3-xcbgen  
./configure  
make  
sudo make install  
  
cd  
git clone https://github.com/homenc/HElib.git  
cd HElib  
mkdir build  
cd build  
sudo apt install libboost-all-dev  #必要だったか不明  
sudo apt install magics++ #必要だったか不明  
sudo apt-get install libpthread-stubs0-dev  
ls /usr/lib/x86_64-linux-gnu/ |grep libpthread
#以下これの出力結果  
libpthread-2.31.so
libpthread.a
libpthread.so
libpthread.so.0
#出力結果ここまで.
#参考 : https://stackoverflow.com/questions/35932258/how-to-install-libpthread-a-in-ubuntu-14-04  
sudo apt install libgmp3-dev
cmake -DPACKAGE_BUILD=ON -DENABLE_TEST=ON -DCMAKE_INSTALL_PREFIX=/home/teahat/helib_install ..
make -j12 #12threadsに指定した  

ここで,-DENABLE_TEST=ON(-ENABLE_TEST=ONのtypoではない)を指定して,HElib testsを実行している.
エラーが起きている場合は,
/home/teahat/HElib/build/dependencies/Build/helib_external/Testing/Temporary/LastTest.log からエラー原因を把握できる.自分の場合は,
"Could not find '/home/teahat/HElib/src/src/CMakeLists.txt'.
となっていた.CMakeLists.txtは'/home/teahat/HElib/src/CMakeLists.txt'.にあったのでこれでは当然エラーが出てしまう.
このようなCMakeLists.txtが生成されてしまう根本的な原因がわからなかったため,とりあえず

cp /home/teahat/HElib/src/CMakeLists.txt /home/teahat/HElib/src/src/CMakeLists.txt

としてごまかしてみた.これが通ってしまったから恐ろしい.
絶対あとで痛い目に合うやつだろ…

ctest -R helib_check 
sudo make install  

記憶が曖昧で申し訳ないが,この段階ではエラーが残っていたはず.

HElib/examples

参考

https://github.com/homenc/HElib/blob/master/examples/README.md

cd HElib/examples/
mkdir build  
cd build  
cmake -DCMAKE_INSTALL_PREFIX=/home/alice/helib_install [-Dhelib_DIR=/home/teahat/helib_install/helib_pack/share/cmake/helib] /home/teahat/HElib/examples/ ..  
make -j12  

これでHElib/examples/bin/が作成される.

cd /home/teahat/HElib/examples/bin/
./BGV_packed_arithmetic 

で正常に終了するか確認.

cd cd /home/teahat/HElib/examples/tests
bats . -j 12

これでHElibのexamplesを動かせることが確認できた.
お疲れ様でした.

参考にしたサイト

HElib

teahat

teahat

I'm t3ahat.

Read More

Tags

Latest Posts