ed25519

package
v1.21.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 6, 2023 License: MIT Imports: 2 Imported by: 0

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

Examples

Constants

View Source
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

func Verify(publicKey PublicKey, message, sig []byte) bool

Verifyは、publicKeyによってメッセージのsigが有効な署名かどうかを検証します。 もしlen(publicKey)が[PublicKeySize]でない場合、パニックを引き起こします。

func VerifyWithOptions added in v1.20.0

func VerifyWithOptions(publicKey PublicKey, message, sig []byte, opts *Options) error

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のバリアントを選択するために使用できます。

func (*Options) HashFunc added in v1.20.0

func (o *Options) HashFunc() crypto.Hash

HashFuncはo.Hashを返します。

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を選択することができます。

type PublicKey

type PublicKey []byte

PublicKeyはEd25519公開鍵の型です。

func (PublicKey) Equal added in v1.15.0

func (pub PublicKey) Equal(x crypto.PublicKey) bool

Equalはpubとxが同じ値を持っているかどうかを報告します。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL