Math::EllipticCurve::Prime::Point
素数空間楕円曲線上の演算を行なう。
use Math::EllipticCurve::Prime::Point;
パッケージをロードする。
my $p = Math::EllipticCurve::Prime::Point->new(curve => $curve,
x
=> Math::BigInt->new($x), y => Math::BigInt->new($y));
$curve :
使用する楕円曲線を指定する。FIPS186で指定された曲線を使用可能。
| FIPS186での名称 | $curve |
| P-192 | secp192r1 |
| P-224 | secp224r1 |
| P-256 | secp256r1 |
| P-384 | secp384r1 |
| P-521 | secp521r1 |
$x, $y : 楕円曲線上の点のx, y 座標
FIPS186のベースポイントを現わすオブジェクトを作る場合は、下記の様にする。
use Math::EllipticCurve::Prime;
my $cv = new Math::EllipticCurve::Prime(name => $curve);
my $G = $cv->g;
// ベースポイントを現わすオブジェクトが返る。
my $p = Math::EllipticCurve::Prime::Point->from_hex($hex);
$hex
: SECフォーマットで表現した楕円曲線上の点(16進表記)
使用する楕円曲線が指定されないので、オブジェクトを作成後、curveメソッドで曲線指定を追加する事。
$p->curve(Math::EllipticCurve::Prime->new(name => $curve));
my $hex = $p->to_hex();
楕円曲線上の点を表現したSECフォーマットを返す。
SECフォーマット := 04
|| x座標 || y座標 x座標とy座標は、同一バイト長になっている。
my $rc = $p->infinity();
点が無限遠点の時、真。
my $x = $p->x;
x座標。Math::BigIntオブジェクトが返る。
my $y = $p->y;
y座標。Math::BigIntオブジェクトが返る
my $curve = $p->curve;
使用している楕円曲線。Math::EllipticCurve::Primeオブジェクトが返る。
下記のメソッドで楕円曲線のパラメタが取得できる。
方程式は、y^2≡x^3 + ax + b (mod p)
$p->curve->p: 素数モジュラス
$p->curve->a:係数a(FIPS186では-3だが、0x1ff...fc = p-3が返る)
$p->curve->b:係数b
$p->curve->g:ベースポイント(Math::EllipticCurve::Prime::Pointオブジェクト)
$p->curve->n:Gの点位数
以下のメソッドはMath::BigIntと同様にOOスタイルのメソッドなので、copyしてから演算する事。
my $q = $p->copy()->bmul($d);
楕円曲線上のスカラー倍算。
my $q = $p->copy()->bad($p2);
楕円曲線上の加算。