Spec-Zone.ru › Go

Пакет ecdh

  • import "crypto/ecdh"
  • Обзор
  • Индекс

Обзор

Пакет ecdh реализует криптографический обмен Диффи-Хеллмана на эллиптических кривых NIST и кривой Curve25519.

Индекс

  • Тип Curve
  • Функция P256() Curve
  • Функция P384() Curve
  • Функция P521() Curve
  • Функция X25519() Curve
  • Тип PrivateKey
  • Функция (k *PrivateKey) Bytes() []byte
  • Функция (k *PrivateKey) Curve() Curve
  • Функция (k *PrivateKey) ECDH(remote *PublicKey) ([]byte, error)
  • Функция (k *PrivateKey) Equal(x crypto.PrivateKey) bool
  • Функция (k *PrivateKey) Public() crypto.PublicKey
  • Функция (k *PrivateKey) PublicKey() *PublicKey
  • Тип PublicKey
  • Функция (k *PublicKey) Bytes() []byte
  • Функция (k *PublicKey) Curve() Curve
  • Функция (k *PublicKey) Equal(x crypto.PublicKey) bool

Файлы пакета

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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API