Home > CGI > PurePerlなMath::Pari

非コンパイラ環境でCrypt::DSAを導入

重要なお知らせ

 皆さんに二つお知らせがあります。一つは嬉しいお知らせです。もう一つは悲しいお知らせです。
 嬉しいお知らせとは、Crypt::DSAはバージョン0.13からMath::Pariがなくても動くようになりました! ということです。他にもCrypt::DHなどでMath::Pariが不要となりました。 そして悲しいお知らせとは、このページが役に立たなくなったということです……

不要になった本題

 CPANのCrypt::DSAは結構色々なモジュールを必要とします。Crypt::DSAはDigest::SHA1Crypt::RnadomMath::Pariを必要とし、Crypt::RnadomはClass::LoaderとMath::Pariを必要とします。

 コンパイル環境のないレンタルサーバなどで利用するにはどうしましょう? 上記のモジュールの中で、Crypt::RnadomとClass::LoaderはPuerPerlなのでそのまま設置してしまえばよいです。Digest::SHA1は、Digest::SHA::PurePerlがありますので、なんとかなりそうです(パッケージ名を変える必要があるでしょうが)。
 そうすると、残るはMath::Pariです。Math::Pariさえなんとかなれば、Crypt::DSAを使うことができそうです。

 そこで登場するのがMath::Pari::PP4Cryptです。依存モジュールはMath::BigInt 1.70以降

Source

Pari.pm v2.01 (2005-02-26)

設置方法

 パスの通っているディレクトリにMathディレクトリを作成し、そこに設置します。

使い方

 Crypt::DSAから利用するためのモジュールですので、基本的に単体で使うものではありません。一応、pari2num, pari2pv, isprime, floor, Mod, lift, sqrtがexport可能です。また、PARI関数が自動的にexportされます。

use Math::Pari qw(Mod isprime lift); # このPariは実際にはMath::Pari::PP4Crypt

# Modを使う
my $n = PARI(10) ** PARI(15) + PARI(3);
my $a = Mod(2,$n);
print $a ** ($n-1); # Mod(70605991389233,1000000000000003)

lift(Mod(3,5) + Mod(2,5)); # = 0

# 素数かどうか判定する
isprime('1412483196769018221764025574442928329625802622663'); # 素数

留意点

ページの先頭