Пакет ecdh
Обзор
Пакет ecdh реализует криптографический обмен Диффи-Хеллмана на эллиптических кривых NIST и кривой Curve25519.
Индекс
Файлы пакета
ecdh.go nist.go x25519.go
Тип Curve 1.20
type Curve interface {
// GenerateKey generates a random PrivateKey.
//
// Most applications should use [crypto/rand.Reader] as rand. Note that the
// returned key does not depend deterministically on the bytes read from rand,
// and may change between calls and/or between versions.
GenerateKey(rand io.Reader) (*PrivateKey, error)
// NewPrivateKey checks that key is valid and returns a PrivateKey.
//
// For NIST curves, this follows SEC 1, Version 2.0, Section 2.3.6, which
// amounts to decoding the bytes as a fixed length big endian integer and
// checking that the result is lower than the order of the curve. The zero
// private key is also rejected, as the encoding of the corresponding public
// key would be irregular.
//
// For X25519, this only checks the scalar length.
NewPrivateKey(key []byte) (*PrivateKey, error)
// NewPublicKey checks that key is valid and returns a PublicKey.
//
// For NIST curves, this decodes an uncompressed point according to SEC 1,
// Version 2.0, Section 2.3.4. Compressed encodings and the point at
// infinity are rejected.
//
// For X25519, this only checks the u-coordinate length. Adversarially
// selected public keys can cause ECDH to return an error.
NewPublicKey(key []byte) (*PublicKey, error)
// contains filtered or unexported methods
} Функция P256 1.20
func P256() Curve
P256 возвращает Curve, реализующую кривую NIST P-256 (FIPS 186-3, раздел D.2.3), также известную как secp256r1 или prime256v1.
Несколько вызовов этой функции вернут одно и то же значение, которое можно использовать для проверок на равенство и в операторах switch.
Функция P384 1.20
func P384() Curve
P384 возвращает Curve, реализующую кривую NIST P-384 (FIPS 186-3, раздел D.2.4), также известную как secp384r1.
Несколько вызовов этой функции вернут одно и то же значение, которое можно использовать для проверок на равенство и в операторах switch.
Функция P521 1.20
func P521() Curve
P521 возвращает Curve, реализующую кривую NIST P-521 (FIPS 186-3, раздел D.2.5), также известную как secp521r1.
Несколько вызовов этой функции вернут одно и то же значение, которое можно использовать для проверок на равенство и в операторах switch.
Функция X25519 1.20
func X25519() Curve
X25519 возвращает Curve, реализующую функцию X25519 над кривой Curve25519 (RFC 7748, раздел 5).
Несколько вызовов этой функции вернут одно и то же значение, поэтому ее можно использовать для проверок на равенство и в операторах switch.
Тип PrivateKey 1.20
PrivateKey — это закрытый ключ ECDH, который обычно держится в секрете.
Эти ключи можно парсить с помощью crypto/x509.ParsePKCS8PrivateKey и кодировать с помощью crypto/x509.MarshalPKCS8PrivateKey. Для кривых NIST их затем нужно преобразовать с помощью crypto/ecdsa.PrivateKey.ECDH после парсинга.
type PrivateKey struct {
// contains filtered or unexported fields
}
Функция (*PrivateKey) Bytes 1.20
func (k *PrivateKey) Bytes() []byte
Bytes возвращает копию кодирования закрытого ключа.
Функция (*PrivateKey) Curve 1.20
func (k *PrivateKey) Curve() Curve
Функция (*PrivateKey) ECDH 1.20
func (k *PrivateKey) ECDH(remote *PublicKey) ([]byte, error)
ECDH выполняет обмен Диффи-Хеллмана и возвращает общий секрет. PrivateKey и PublicKey должны использовать одну и ту же кривую.
Для кривых NIST эта функция выполняет ECDH, как указано в SEC 1, версия 2.0, раздел 3.3.1, и возвращает x-координату, закодированную в соответствии с SEC 1, версия 2.0, раздел 2.3.5. Результатом никогда не является точка на бесконечности.
Для X25519 эта функция выполняет ECDH, как указано в RFC 7748, раздел 6.1. Если результат — все нули, ECDH возвращает ошибку.
Функция (*PrivateKey) Equal 1.20
func (k *PrivateKey) Equal(x crypto.PrivateKey) bool
Equal возвращает true, если x представляет тот же закрытый ключ, что и k.
Обратите внимание, что могут существовать эквивалентные закрытые ключи с различными кодировками, которые вернут false при проверке, но будут вести себя одинаково как входные данные для [ECDH].
Эта проверка выполняется в постоянное время, пока типы ключей и кривые совпадают.
Функция (*PrivateKey) Public 1.20
func (k *PrivateKey) Public() crypto.PublicKey
Public реализует неявное интерфейс всех стандартных закрытых ключей. См. документацию crypto.PrivateKey.
Функция (*PrivateKey) PublicKey 1.20
func (k *PrivateKey) PublicKey() *PublicKey
Тип PublicKey 1.20
PublicKey — это открытый ключ ECDH, обычно это открытая часть ключа ECDH партнёра, переданная по сети.
Эти ключи можно парсить с помощью crypto/x509.ParsePKIXPublicKey и кодировать с помощью crypto/x509.MarshalPKIXPublicKey. Для кривых NIST их затем нужно преобразовать с помощью crypto/ecdsa.PublicKey.ECDH после парсинга.
type PublicKey struct {
// contains filtered or unexported fields
}
Функция (*PublicKey) Bytes 1.20
func (k *PublicKey) Bytes() []byte
Bytes возвращает копию кодирования открытого ключа.
Функция (*PublicKey) Curve 1.20
func (k *PublicKey) Curve() Curve
Функция (*PublicKey) Equal 1.20
func (k *PublicKey) Equal(x crypto.PublicKey) bool
Equal возвращает true, если x представляет тот же открытый ключ, что и k.
Обратите внимание, что могут существовать эквивалентные открытые ключи с различными кодировками, которые вернут false при проверке, но будут вести себя одинаково как входные данные для ECDH.
Эта проверка выполняется в постоянное время, пока типы ключей и кривые совпадают.
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/ecdh/