既出なものも多いかとは思いますが、メモがてらに。
間違い等がございましたらコメントください。
GMP(GNU Multi-Precision )
GMPとは
言わずと知れた多倍長演算ライブラリ。多倍長演算ライブラリを用いると(リソースが許す限り)任意の大きさの数を扱うことが可能となる。
多倍長演算の主な利用先に暗号がある。標準の整数型であるunsigned long long int型で64bitまでの整数を扱うことができるが、暗号などでは数千bitの整数を扱う必要があるため多倍長演算ライブラリが必要となる。
ライセンス
LGPL(GNU Lesser General Public License)ライセンス。GPLよりも縛りがゆるいライセンス。
- 自己責任での使用
- 著作権表示の削除禁止
- 複製・改変・再配布・販売は自由
-
中に組み込む場合LGPLライセンスに
つまり、外部ライブラリとしてLGPLのプログラムを利用する場合には呼び出す側のプログラムはLGLPでなくてもよい。
インストール
GMPのホームページからソースファイルをダウンロード。
ダウンロードしたtar.lzファイルを解凍
tar --lzip -xvf gmp-oo.tar.lz
もし、lzipがインストールされていなければ、
sudo apt install lzip
でlzipをインストール。
その後、
./configure
make -j4
make check
sudo make install
これでGMPのインストールは完了です。
使い方
ソースファイル内に
#include <gmp.h>
を追加。
コンパイル時に-lgmpを追加。
以下サンプル
gcc -o gmp_test gmp_test.c -lgmp
gmp_test.c
#include <time.h>
#include <gmp.h>
int main(int argc, char const *argv[])
{
/**
* 多倍長整数構造体を初期化
*/
mpz_t a;
mpz_init(a);
/**
* 疑似乱数生成器のステート構造体を初期化
* デフォルトはメルセンヌ・ツイスタ
**/
gmp_randstate_t state;
gmp_randinit_default(state);
/**
* 時間をseedに
* 暗号の秘密鍵生成などを行う際は/dev/randomなどからハードウェア乱数を取ること推奨
**/
time_t rtime;
time(&rtime);
gmp_randseed_ui(state, rtime);
/**
* 100bitの乱数を生成
**/
mpz_urandomb(a, state, 100);
/**
* 16進数で出力
**/
gmp_printf("%Zx\n",a);
/**
* お片付け
**/
mpz_clear(a);
gmp_randclear(state);
return 0;
}