...

パッケージ elliptic

import "crypto/elliptic"
概要
目次

概要 ▾

elliptic パッケージは,素体上にいくつかの標準楕円曲線を実装します。

func GenerateKey

func GenerateKey(curve Curve, rand io.Reader) (priv []byte, x, y *big.Int, err error)

GenerateKey は公開鍵と秘密鍵のペアを返します。 秘密鍵は与えられたリーダーを使って生成され,リーダーはランダムなデータを返さなければなりません。

func Marshal

func Marshal(curve Curve, x, y *big.Int) []byte

Marshal は,ポイントを ANSI X9.62 のセクション 4.3.6 で指定された非圧縮形式に変換します。

func Unmarshal

func Unmarshal(curve Curve, data []byte) (x, y *big.Int)

Unmarshal は,Marshalによって直列化された点を x, y のペアに変換します。 ポイントが非圧縮形式でない場合,または曲線上にない場合はエラーです。 エラー時には, x = nil です。

type Curve

Curve は, a=-3 の短形式のワイエルシュトラス曲線を表します。 https://www.hyperelliptic.org/EFD/g1p/auto-shortw.html を参照してください。

type Curve interface {
    // Params は曲線のパラメータを返します。
    Params() *CurveParams
    // IsOnCurve は,与えられた (x,y) が曲線上にあるかどうかを報告します。
    IsOnCurve(x, y *big.Int) bool
    // Add は (x1,y1) と (x2,y2) の合計を返します
    Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int)
    // Double は 2*(x,y)を返します
    Double(x1, y1 *big.Int) (x, y *big.Int)
    // ScalarMult は k*(Bx,By)  を返します。
    // ここで, k はビッグエンディアン形式の数値です。
    ScalarMult(x1, y1 *big.Int, k []byte) (x, y *big.Int)
    // ScalarBaseMult は k*G を返します。
    // ここで, G はグループの基点, k はビッグエンディアン形式の整数です。
    ScalarBaseMult(k []byte) (x, y *big.Int)
}

func P224

func P224() Curve

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

暗号化操作は,定時間アルゴリズムを使用して実装されます。

func P256

func P256() Curve

P256 は, P-256 を実装する曲線を返します (FIPS 186-3 ,セクション D.2.3 を参照)

暗号化操作は,定時間アルゴリズムを使用して実装されます。

func P384

func P384() Curve

P384 は P-384 を実行する曲線を返します (FIPS 186-3 , セクション D.2.4 を参照)

暗号化操作は,一定時間アルゴリズムを使用しません。

func P521

func P521() Curve

P521 は P-521 を実装する曲線を返します (FIPS 186-3 のセクション D.2.5 を参照)

暗号化操作は,一定時間アルゴリズムを使用しません。

type CurveParams

CurveParams は楕円曲線のパラメータを含み, Curve の一般的な非一定時間の実装も提供します。

type CurveParams struct {
    P       *big.Int // 基底フィールドのオーダー
    N       *big.Int // 基点のオーダー
    B       *big.Int // 曲線方程式の定数
    Gx, Gy  *big.Int // 基点の (x,y)
    BitSize int      // 基底フィールドのサイズ
    Name    string   // 曲線の正規名; added in Go 1.5
}

func (*CurveParams) Add

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

func (*CurveParams) Double

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

func (*CurveParams) IsOnCurve

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

func (*CurveParams) Params

func (curve *CurveParams) Params() *CurveParams

func (*CurveParams) ScalarBaseMult

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

func (*CurveParams) ScalarMult

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