github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/crypto/elliptic/elliptic.go (about)

     1  // Copyright 2010 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  // パッケージellipticは、素数体上の標準的なNIST P-224、P-256、P-384、およびP-521楕円曲線を実装しています。
     6  //
     7  // このパッケージの直接使用は非推奨であり、[P224]、[P256]、[P384]、[P521]の値は[crypto/ecdsa]を使用するために必要です。その他のほとんどの用途は、効率的かつ安全な[crypto/ecdh]または低レベルな機能のためのサードパーティのモジュールに移行する必要があります。
     8  package elliptic
     9  
    10  import (
    11  	"github.com/shogo82148/std/io"
    12  	"github.com/shogo82148/std/math/big"
    13  )
    14  
    15  // Curveはa=-3の短形式Weierstrass曲線を表します。
    16  //
    17  // 入力が曲線上の点でない場合、Add、Double、およびScalarMultの動作は未定義です。
    18  //
    19  // 0, 0のような通常の無限遠点は、曲線上には考慮されていませんが、Add、Double、
    20  // ScalarMult、またはScalarBaseMultで返される場合があります
    21  // (ただし、 [Unmarshal] または [UnmarshalCompressed] 関数では返されません)。
    22  //
    23  // [P224] 、 [P256] 、 [P384] 、および [P521] 以外のCurve実装を使用することは非推奨です。
    24  type Curve interface {
    25  	Params() *CurveParams
    26  
    27  	IsOnCurve(x, y *big.Int) bool
    28  
    29  	Add(x1, y1, x2, y2 *big.Int) (x, y *big.Int)
    30  
    31  	Double(x1, y1 *big.Int) (x, y *big.Int)
    32  
    33  	ScalarMult(x1, y1 *big.Int, k []byte) (x, y *big.Int)
    34  
    35  	ScalarBaseMult(k []byte) (x, y *big.Int)
    36  }
    37  
    38  // GenerateKeyは公開鍵と秘密鍵のペアを生成します。秘密鍵は与えられたリーダーを使用して生成されますが、ランダムデータを返す必要があります。
    39  //
    40  // Deprecated: ECDHの場合は [crypto/ecdh] パッケージのGenerateKeyメソッドを使用してください。
    41  // ECDSAの場合はcrypto/ecdsaパッケージのGenerateKey関数を使用してください。
    42  func GenerateKey(curve Curve, rand io.Reader) (priv []byte, x, y *big.Int, err error)
    43  
    44  // Marshalは、曲線上の点を、SEC 1、バージョン2.0、セクション2.3.3で指定された非圧縮形式に変換します。もし点が曲線上にない場合(または通常の無限遠点の場合)、動作は未定義です。
    45  //
    46  // 廃止されました:ECDHには、crypto/ecdhパッケージを使用してください。この関数は、crypto/ecdhのPublicKey.Bytesと同等のエンコーディングを返します。
    47  func Marshal(curve Curve, x, y *big.Int) []byte
    48  
    49  // MarshalCompressedは、曲線上の点をSEC 1、バージョン2.0、セクション2.3.3で指定された圧縮形式に変換します。点が曲線上にない場合(または無限遠点である場合)、動作は未定義です。
    50  func MarshalCompressed(curve Curve, x, y *big.Int) []byte
    51  
    52  // 既知の曲線がunmarshalerを実装していることを確認します。
    53  var _ = []unmarshaler{p224, p256, p384, p521}
    54  
    55  // Unmarshalは [Marshal] によってシリアライズされたポイントをx、yのペアに変換します。非圧縮形式でない場合、曲線上にない場合、または無限遠点の場合はエラーです。エラーの場合、x = nilです。
    56  //
    57  // Deprecated: ECDHでは、crypto/ecdhパッケージを使用してください。この関数は、crypto/ecdhのNewPublicKeyメソッドで使用されるエンコーディングと同等のエンコーディングを受け入れます。
    58  func Unmarshal(curve Curve, data []byte) (x, y *big.Int)
    59  
    60  // UnmarshalCompressedは [MarshalCompressed] によって直列化された点を、xとyの組へと変換します。
    61  // 圧縮形式でない場合、曲線上にない場合、または無限遠点の場合はエラーです。 エラー時には、x = nil です。
    62  func UnmarshalCompressed(curve Curve, data []byte) (x, y *big.Int)
    63  
    64  // P224は、NIST P-224(FIPS 186-3、セクションD.2.2)で実装された [Curve] 、またはsecp224r1としても知られています。この [Curve] のCurveParams.Nameは「P-224」です。
    65  //
    66  // この関数の複数の呼び出しは同じ値を返すため、等価性のチェックやスイッチ文に使用することができます。
    67  //
    68  // 暗号操作は一定の時間で実装されています。
    69  func P224() Curve
    70  
    71  // P256は、NIST P-256(FIPS 186-3、セクション D.2.3)またはsecp256r1またはprime256v1としても知られる、
    72  // "P-256"という名前のCurveParams.Nameを実装した [Curve] を返します。
    73  //
    74  // この関数を複数回呼び出しても同じ値が返されるため、等値チェックやswitch文で使用することができます。
    75  //
    76  // 暗号操作は定数時間アルゴリズムを使用して実装されています。
    77  func P256() Curve
    78  
    79  // P384はNIST P-384 (FIPS 186-3、セクションD.2.4)、別名secp384r1を実装する [Curve] を返します。この [Curve] のCurveParams.Nameは "P-384" です。
    80  //
    81  // この関数の複数の呼び出しは同じ値を返すため、等しさのチェックやスイッチ文に使用できます。
    82  //
    83  // 暗号操作は一定時間アルゴリズムを使用して実装されています。
    84  func P384() Curve
    85  
    86  // P521は、NIST P-521(FIPS 186-3、セクションD.2.5)またはsecp521r1としても知られる [Curve] を返します。
    87  // この [Curve] のCurveParams.Nameは「P-521」です。
    88  //
    89  // この関数を複数回呼び出しても同じ値が返されるため、等価性のチェックやswitch文に使用できます。
    90  //
    91  // 暗号操作は一定時間アルゴリズムを使用して実装されています。
    92  func P521() Curve