Documentation
¶
Overview ¶
Package ed25519はEd25519署名アルゴリズムを実装しています。詳しくは、https://ed25519.cr.yp.to/を参照してください。
これらの関数はRFC 8032で定義されている「Ed25519」関数とも互換性があります。ただし、RFC 8032の定義とは異なり、このパッケージの秘密鍵表現には公開鍵の接尾辞が含まれており、同じ鍵での複数の署名操作を効率的に行うことができます。このパッケージでは、RFC 8032の秘密鍵を「seed」と呼んでいます。
Example (Ed25519ctx) ¶
pub, priv, err := GenerateKey(nil) if err != nil { log.Fatal(err) } msg := []byte("The quick brown fox jumps over the lazy dog") sig, err := priv.Sign(nil, msg, &Options{ Context: "Example_ed25519ctx", }) if err != nil { log.Fatal(err) } if err := VerifyWithOptions(pub, msg, sig, &Options{ Context: "Example_ed25519ctx", }); err != nil { log.Fatal("invalid signature") }
Output:
Index ¶
- Constants
- func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error)
- func Sign(privateKey PrivateKey, message []byte) []byte
- func Verify(publicKey PublicKey, message, sig []byte) bool
- func VerifyWithOptions(publicKey PublicKey, message, sig []byte, opts *Options) error
- type Options
- type PrivateKey
- type PublicKey
Examples ¶
Constants ¶
const ( // PublicKeySizeは、このパッケージで使用される公開鍵のバイト単位のサイズです。 PublicKeySize = 32 // PrivateKeySizeは、このパッケージで使用される秘密鍵のサイズ(バイト単位)です。 PrivateKeySize = 64 // SignatureSizeは、このパッケージで生成および検証される署名のサイズ(バイト単位)です。 SignatureSize = 64 // SeedSizeは、RFC 8032で使用されるプライベートキーのシードのサイズ(バイト単位)です。 SeedSize = 32 )
Variables ¶
This section is empty.
Functions ¶
func GenerateKey ¶
func GenerateKey(rand io.Reader) (PublicKey, PrivateKey, error)
GenerateKeyはrandからのエントロピーを使用して公開鍵/秘密鍵のペアを生成します。 randがnilの場合、[crypto/rand.Reader]が使用されます。
この関数の出力は決定論的であり、randから[SeedSize]バイトを読み取り、[NewKeyFromSeed]に渡すことと等価です。
func Sign ¶
func Sign(privateKey PrivateKey, message []byte) []byte
SignはメッセージにprivateKeyで署名し、署名を返します。もしprivateKeyの長さが[PrivateKeySize]でない場合はパニックを起こします。
func Verify ¶
Verifyは、publicKeyによってメッセージのsigが有効な署名かどうかを検証します。 もしlen(publicKey)が[PublicKeySize]でない場合、パニックを引き起こします。
func VerifyWithOptions ¶ added in v1.20.0
VerifyWithOptionsは、publicKeyによってメッセージのsigが有効な署名であるかどうかを報告します。有効な署名は、nilのエラーを返すことで示されます。len(publicKey)が[PublicKeySize]でない場合、パニックが発生します。 もしopts.Hashが[crypto.SHA512]である場合、Ed25519phとして事前にハッシュされたバリアントが使用され、messageはSHA-512ハッシュであることが想定されます。それ以外の場合、opts.Hashは[crypto.Hash](0)でなければならず、メッセージはハッシュされていない状態である必要があります。なぜなら、Ed25519は署名されるメッセージを2回処理するからです。
Types ¶
type Options ¶ added in v1.20.0
type Options struct { // Ed25519 の場合、ハッシュはゼロまたは Ed25519ph の場合は crypto.SHA512 になることがあります。 Hash crypto.Hash // Contextが空でない場合、Ed25519ctxを選択するかEd25519phのコンテキスト文字列を提供します。長さは最大255バイトです。 Context string }
Optionsは[PrivateKey.Sign]または[VerifyWithOptions]と一緒に使われ、Ed25519のバリアントを選択するために使用できます。
type PrivateKey ¶
type PrivateKey []byte
PrivateKeyはEd25519の秘密鍵の型です。[crypto.Signer]を実装しています。
func NewKeyFromSeed ¶
func NewKeyFromSeed(seed []byte) PrivateKey
NewKeyFromSeedはシードから秘密鍵を計算します。もしseedの長さが[SeedSize]でない場合、パニックを発生させます。この関数はRFC 8032との互換性のために提供されています。RFC 8032の秘密鍵はこのパッケージのシードに対応します。
func (PrivateKey) Equal ¶ added in v1.15.0
func (priv PrivateKey) Equal(x crypto.PrivateKey) bool
Equal は priv と x が同じ値を持っているかどうかを報告します。
func (PrivateKey) Public ¶
func (priv PrivateKey) Public() crypto.PublicKey
Publicはprivに対応する[PublicKey]を返します。
func (PrivateKey) Seed ¶
func (priv PrivateKey) Seed() []byte
Seedはprivに対応するプライベートキーシードを返します。RFC 8032との互換性のために提供されています。RFC 8032のプライベートキーはこのパッケージのシードに対応します。
func (PrivateKey) Sign ¶
func (priv PrivateKey) Sign(rand io.Reader, message []byte, opts crypto.SignerOpts) (signature []byte, err error)
Signは与えられたメッセージをprivで署名します。randは無視され、nilであってもかまいません。
もしopts.HashFunc()が[crypto.SHA512]の場合、事前ハッシュバリアントのEd25519phが使用され、 メッセージはSHA-512ハッシュであることが期待されます。それ以外の場合、opts.HashFunc()は[crypto.Hash](0)である必要があり、 メッセージはハッシュされていない状態である必要があります。なぜなら、Ed25519は署名されるメッセージに対して二回のパスを行うからです。
[Options]型の値、またはcrypto.Hash(0)またはcrypto.SHA512を直接使用して、 純粋なEd25519またはEd25519phを選択することができます。