import "crypto/elliptic"

素体上における標準的な楕円曲線のうちのいくつかを実装しています。

パッケージファイル

elliptic.go

Curve型

Curveは、a=-3であるワイエルシュトラス曲線の簡略形を表します。http://www.hyperelliptic.org/EFD/g1p/auto-shortw.htmlを参照ください。

type Curve struct {
    P      *big.Int // 基礎体の位数
    B      *big.Int // 曲線方程式の定数
    Gx, Gy *big.Int // 基点の(x,y)
}

P224関数

func P224() *Curve

P224は、P-224を実装したCurveを返します。(FIPS 186-3、セクションD.2.2を参照)

P256関数

func P256() *Curve

P256は、P-256を実装したCurveを返します。 (FIPS 186-3、セクションD.2.3を参照)

P384関数

func P384() *Curve

P384は、P-384を実装したCurveを返します。 (FIPS 186-3、セクションD.2.4を参照)

P521関数

func P521() *Curve

P256は、P-521を実装したCurveを返します。 (FIPS 186-3、セクションD.2.5を参照)

(*Curve) Add関数

func (curve *Curve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int)

Addは、(x1,y1) と(x2,y2)の合計を返します。

(*Curve) Double関数

func (curve *Curve) Double(x1, y1 *big.Int) (*big.Int, *big.Int)

Doubleは、2*(x,y)を返します。

(*Curve) IsOnCurve関数

func (curve *Curve) IsOnCurve(x, y *big.Int) bool

IsOnCurveは、与えた(x,y)が曲線上にあるとき、trueを返します。

(*Curve) ScalarBaseMult関数

func (curve *Curve) ScalarBaseMult(k []byte) (*big.Int, *big.Int)

ScalarBaseMultは、Gがグループの基点で、kがビッグエンディアン形式の整数であるとき、k*Gを返します。

(*Curve) ScalarMult関数

func (curve *Curve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int)

ScalarMultは、kがビッグエンディアン形式の整数であるとき、k*(Bx,By)を返します。