Spec-Zone.ru › Go

Пакет ecdsa

  • import "crypto/ecdsa"
  • Обзор
  • Индекс
  • Примеры

Обзор

Пакет ecdsa реализует алгоритм Эллиптической кривой цифровой подписи, как определено в FIPS 186-4 и SEC 1, Версия 2.0.

Подписи, сгенерированные этим пакетом, не являются детерминированными, но энтропия смешивается с закрытым ключом и сообщением, достигая того же уровня безопасности в случае отказа источника случайности.

Операции, связанные с закрытыми ключами, реализованы с использованием алгоритмов постоянного времени, при условии, что используется elliptic.Curve, возвращаемый elliptic.P224, elliptic.P256, elliptic.P384 или elliptic.P521.

Пример

Код:

privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
if err != nil {
    panic(err)
}

msg := "hello, world"
hash := sha256.Sum256([]byte(msg))

sig, err := ecdsa.SignASN1(rand.Reader, privateKey, hash[:])
if err != nil {
    panic(err)
}
fmt.Printf("signature: %x\n", sig)

valid := ecdsa.VerifyASN1(&privateKey.PublicKey, hash[:], sig)
fmt.Println("signature verified:", valid)

Индекс

  • func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)
  • func SignASN1(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)
  • func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool
  • func VerifyASN1(pub *PublicKey, hash, sig []byte) bool
  • тип PrivateKey
  • func GenerateKey(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)
  • func (k *PrivateKey) ECDH() (*ecdh.PrivateKey, error)
  • func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool
  • func (priv *PrivateKey) Public() crypto.PublicKey
  • func (priv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error)
  • тип PublicKey
  • func (k *PublicKey) ECDH() (*ecdh.PublicKey, error)
  • func (pub *PublicKey) Equal(x crypto.PublicKey) bool

Примеры

Пакет

Файлы пакета

ecdsa.go ecdsa_legacy.go ecdsa_noasm.go notboring.go

func Sign

func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)

Sign подписывает хэш (который должен быть результатом хэширования большего сообщения) с помощью закрытого ключа, priv. Если хэш длиннее, чем длина в битах порядка кривой закрытого ключа, хэш будет усечен до этой длины. Возвращает подпись как пару целых чисел. Большинство приложений должны использовать SignASN1 вместо работы напрямую с r, s.

func SignASN1 1.15

func SignASN1(rand io.Reader, priv *PrivateKey, hash []byte) ([]byte, error)

SignASN1 подписывает хэш (который должен быть результатом хэширования большего сообщения) с помощью закрытого ключа, priv. Если хэш длиннее, чем длина в битах порядка кривой закрытого ключа, хэш будет усечен до этой длины. Возвращает подпись в формате ASN.1.

Подпись случайная. Большинство приложений должны использовать crypto/rand.Reader в качестве rand. Обратите внимание, что возвращаемая подпись не зависит детерминированно от байтов, считанных из rand, и может меняться между вызовами и/или между версиями.

func Verify

func Verify(pub *PublicKey, hash []byte, r, s *big.Int) bool

Verify проверяет подпись в r, s хэша с использованием открытого ключа, pub. Его возвращаемое значение записывает, является ли подпись действительной. Большинство приложений должны использовать VerifyASN1 вместо работы напрямую с r, s.

Вводные данные не считаются конфиденциальными и могут утечь через временные каналы, или если у злоумышленника есть контроль над частью входных данных.

func VerifyASN1 1.15

func VerifyASN1(pub *PublicKey, hash, sig []byte) bool

VerifyASN1 проверяет подпись в формате ASN.1, sig, хэша с использованием открытого ключа, pub. Его возвращаемое значение записывает, является ли подпись действительной.

Вводные данные не считаются конфиденциальными и могут утечь через временные каналы, или если у злоумышленника есть контроль над частью входных данных.

тип PrivateKey

PrivateKey представляет собой закрытый ключ ECDSA.

type PrivateKey struct {
    PublicKey
    D *big.Int
}

func GenerateKey

func GenerateKey(c elliptic.Curve, rand io.Reader) (*PrivateKey, error)

GenerateKey генерирует новый закрытый ключ ECDSA для указанной кривой.

Большинство приложений должны использовать crypto/rand.Reader в качестве rand. Обратите внимание, что возвращаемый ключ не зависит детерминированно от байтов, считанных из rand, и может меняться между вызовами и/или между версиями.

func (*PrivateKey) ECDH 1.20

func (k *PrivateKey) ECDH() (*ecdh.PrivateKey, error)

ECDH возвращает k в виде ecdh.PrivateKey. Возвращает ошибку, если ключ недействителен согласно определению ecdh.Curve.NewPrivateKey, или если кривая не поддерживается crypto/ecdh.

func (*PrivateKey) Equal 1.15

func (priv *PrivateKey) Equal(x crypto.PrivateKey) bool

Equal сообщает, имеют ли priv и x одинаковое значение.

См. PublicKey.Equal для получения подробностей о том, как сравнивается кривая.

func (*PrivateKey) Public 1.4

func (priv *PrivateKey) Public() crypto.PublicKey

Public возвращает открытый ключ, соответствующий priv.

func (*PrivateKey) Sign 1.4

func (priv *PrivateKey) Sign(rand io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte, error)

Sign подписывает digest с помощью priv, читая случайность из rand. Аргумент opts в данный момент не используется, но, в соответствии с интерфейсом crypto.Signer, должен представлять функцию хеширования, используемую для хэширования сообщения.

Этот метод реализует crypto.Signer, который является интерфейсом для поддержки ключей, где частная часть хранится, например, в аппаратном модуле. Общие случаи использования могут напрямую использовать функцию SignASN1 в этом пакете.

тип PublicKey

PublicKey представляет собой открытый ключ ECDSA.

type PublicKey struct {
    elliptic.Curve
    X, Y *big.Int
}

func (*PublicKey) ECDH 1.20

func (k *PublicKey) ECDH() (*ecdh.PublicKey, error)

ECDH возвращает k как ecdh.PublicKey. Возвращает ошибку, если ключ недействителен согласно определению ecdh.Curve.NewPublicKey, или если кривая не поддерживается crypto/ecdh.

func (*PublicKey) Equal 1.15

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

Equal сообщает, имеют ли pub и x одинаковое значение.

Два ключа считаются одинаковыми только в том случае, если у них одинаковое значение Curve. Обратите внимание, что, например, elliptic.P256 и elliptic.P256().Params() имеют разные значения, так как последнее является обобщенной, а не реализацией постоянного времени.

© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/crypto/ecdsa/

Spec-Zone.ru

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