Пакет ed25519
Обзор
Пакет ed25519 реализует алгоритм цифровой подписи Ed25519. См. https://ed25519.cr.yp.to/.
Эти функции также совместимы с функцией «Ed25519», определённой в RFC 8032. Однако, в отличие от формулировки в RFC 8032, представление закрытого ключа в этом пакете включает суффикс открытого ключа для более эффективного выполнения нескольких операций подписи одним и тем же ключом. В этом пакете закрытый ключ из RFC 8032 называется «seed».
Операции с закрытыми ключами реализованы с использованием алгоритмов с постоянным временем выполнения.
Пример (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")
}
Индекс
Примеры
Файлы пакета
ed25519.go
Константы
const (
// PublicKeySize is the size, in bytes, of public keys as used in this package.
PublicKeySize = 32
// PrivateKeySize is the size, in bytes, of private keys as used in this package.
PrivateKeySize = 64
// SignatureSize is the size, in bytes, of signatures generated and verified by this package.
SignatureSize = 64
// SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032.
SeedSize = 32
) func GenerateKey 1.13
func GenerateKey(random io.Reader) (PublicKey, PrivateKey, error)
GenerateKey генерирует пару открытого и закрытого ключей, используя энтропию из random.
Если random равен nil, используется криптографически стойкий источник случайных чисел. (До Go 1.26 использовался пользовательский crypto/rand.Reader, если он был задан приложением. Это поведение можно восстановить с помощью GODEBUG=cryptocustomrand=1. Этот параметр будет удалён в будущем выпуске Go. Вместо этого используйте testing/cryptotest.SetGlobalRandom.)
Результат работы этой функции детерминирован и эквивалентен чтению SeedSize байт из random и передаче их в NewKeyFromSeed.
func Sign 1.13
func Sign(privateKey PrivateKey, message []byte) []byte
Sign подписывает сообщение с помощью privateKey и возвращает подпись. Функция вызовет панику, если len(privateKey) не равен PrivateKeySize.
func Verify 1.13
func Verify(publicKey PublicKey, message, sig []byte) bool
Verify сообщает, является ли sig действительной подписью сообщения message для publicKey. Функция вызовет панику, если len(publicKey) не равен PublicKeySize.
Входные данные не считаются конфиденциальными и могут стать известны через побочные каналы по времени выполнения или в случае, если злоумышленник контролирует часть входных данных.
func VerifyWithOptions 1.20
func VerifyWithOptions(publicKey PublicKey, message, sig []byte, opts *Options) error
VerifyWithOptions сообщает, является ли sig действительной подписью сообщения message для publicKey. Действительная подпись подтверждается возвратом ошибки nil. Функция вызовет панику, если len(publicKey) не равен PublicKeySize.
Если opts.Hash равен crypto.SHA512, используется предварительно хешированный вариант Ed25519ph, а message должен быть хешем SHA-512; в противном случае opts.Hash должен быть crypto.Hash(0), а сообщение не должно хешироваться, так как Ed25519 выполняет два прохода по подписываемым сообщениям.
Входные данные не считаются конфиденциальными и могут стать известны через побочные каналы по времени выполнения или в случае, если злоумышленник контролирует часть входных данных.
type Options 1.20
Options может использоваться с PrivateKey.Sign или VerifyWithOptions для выбора вариантов Ed25519.
type Options struct {
// Hash can be zero for regular Ed25519, or crypto.SHA512 for Ed25519ph.
Hash crypto.Hash
// Context, if not empty, selects Ed25519ctx or provides the context string
// for Ed25519ph. It can be at most 255 bytes in length.
Context string
}
func (*Options) HashFunc 1.20
func (o *Options) HashFunc() crypto.Hash
HashFunc возвращает o.Hash.
type PrivateKey 1.13
PrivateKey — это тип закрытых ключей Ed25519. Он реализует интерфейс crypto.Signer.
type PrivateKey []byte
func NewKeyFromSeed 1.13
func NewKeyFromSeed(seed []byte) PrivateKey
NewKeyFromSeed вычисляет закрытый ключ из seed. Функция вызовет панику, если len(seed) не равен SeedSize. Эта функция предоставляется для взаимодействия с RFC 8032. Закрытые ключи RFC 8032 соответствуют seed в этом пакете.
func (PrivateKey) Equal 1.15
func (priv PrivateKey) Equal(x crypto.PrivateKey) bool
Equal сообщает, имеют ли priv и x одинаковое значение.
func (PrivateKey) Public 1.13
func (priv PrivateKey) Public() crypto.PublicKey
Public возвращает PublicKey, соответствующий priv.
func (PrivateKey) Seed 1.13
func (priv PrivateKey) Seed() []byte
Seed возвращает seed закрытого ключа, соответствующий priv. Метод предоставляется для взаимодействия с RFC 8032. Закрытые ключи RFC 8032 соответствуют seed в этом пакете.
func (PrivateKey) Sign 1.13
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, а message должен быть хешем SHA-512; в противном случае opts.HashFunc() должен быть crypto.Hash(0), а сообщение не должно хешироваться, так как Ed25519 выполняет два прохода по подписываемым сообщениям.
В качестве opts можно использовать значение типа Options или напрямую crypto.Hash(0) либо crypto.SHA512 для выбора обычного Ed25519 или Ed25519ph соответственно.
type PublicKey 1.13
PublicKey — это тип открытых ключей Ed25519.
type PublicKey []byte
func (PublicKey) Equal 1.15
func (pub PublicKey) Equal(x crypto.PublicKey) bool
Equal сообщает, имеют ли pub и x одинаковое значение.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/ed25519/