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