ecdh

package
v1.0.3028 Latest Latest
Warning

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

Go to latest
Published: Aug 28, 2024 License: Apache-2.0 Imports: 20 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MarshalPrivateKey

func MarshalPrivateKey(key *PrivateKey) ([]byte, error)

包装私钥

func MarshalPublicKey

func MarshalPublicKey(pub *PublicKey) ([]byte, error)

包装公钥

func ToPrivateKey added in v1.0.2030

func ToPrivateKey(key *PrivateKey) (*crypto_ecdh.PrivateKey, error)

func ToPublicKey added in v1.0.2030

func ToPublicKey(pub *PublicKey) (*crypto_ecdh.PublicKey, error)

Types

type Curve added in v1.0.2028

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)

	// ecdh performs a ECDH exchange and returns the shared secret. It's exposed
	// as the PrivateKey.ECDH method.
	//
	// The private method also allow us to expand the ECDH interface with more
	// methods in the future without breaking backwards compatibility.
	ECDH(local *PrivateKey, remote *PublicKey) ([]byte, error)

	// PrivateKeyToPublicKey converts a PrivateKey to a PublicKey. It's exposed
	// as the PrivateKey.PublicKey method.
	//
	// This method always succeeds: for X25519, the zero key can't be
	// constructed due to clamping; for NIST curves, it is rejected by
	// NewPrivateKey.
	PrivateKeyToPublicKey(*PrivateKey) *PublicKey
}

func GmSM2 added in v1.0.2031

func GmSM2() Curve

Multiple invocations of this function will return the same value, so it can be used for equality checks and switch statements.

func NewNistCurve added in v1.0.2029

func NewNistCurve(curve ecdh.Curve) Curve

func P256 added in v1.0.2029

func P256() Curve

wrap go ecdh Curves.

func P384 added in v1.0.2029

func P384() Curve

func P521 added in v1.0.2029

func P521() Curve

func X25519 added in v1.0.2029

func X25519() Curve

func X448 added in v1.0.2028

func X448() Curve

Multiple invocations of this function will return the same value, so it can be used for equality checks and switch statements.

type ECMQVCurve added in v1.0.2063

type ECMQVCurve interface {
	ECMQV(sLocal, eLocal *PrivateKey, sRemote, eRemote *PublicKey) (*PublicKey, error)
}

ECMQVCurve

type PrivateKey added in v1.0.2028

type PrivateKey struct {
	NamedCurve Curve
	KeyBytes   []byte
	// contains filtered or unexported fields
}

PrivateKey is an ECDH private key, usually kept secret.

These keys can be parsed with crypto/x509.ParsePKCS8PrivateKey and encoded with crypto/x509.MarshalPKCS8PrivateKey. For NIST curves, they then need to be converted with crypto/ecdsa.PrivateKey.ECDH after parsing.

func FromPrivateKey added in v1.0.2030

func FromPrivateKey(key *crypto_ecdh.PrivateKey) (*PrivateKey, error)

格式转换

func ParsePrivateKey

func ParsePrivateKey(der []byte) (*PrivateKey, error)

解析私钥

func SM2PrivateKeyToECDH added in v1.0.2031

func SM2PrivateKeyToECDH(pri *sm2.PrivateKey) (*PrivateKey, error)

私钥导入为 ECDH 私钥

func (*PrivateKey) Bytes added in v1.0.2028

func (k *PrivateKey) Bytes() []byte

Bytes returns a copy of the encoding of the private key.

func (*PrivateKey) Curve added in v1.0.2028

func (k *PrivateKey) Curve() Curve

func (*PrivateKey) ECDH added in v1.0.2028

func (k *PrivateKey) ECDH(remote *PublicKey) ([]byte, error)

ECDH performs a ECDH exchange and returns the shared secret. The PrivateKey and PublicKey must use the same curve.

For NIST curves, this performs ECDH as specified in SEC 1, Version 2.0, Section 3.3.1, and returns the x-coordinate encoded according to SEC 1, Version 2.0, Section 2.3.5. The result is never the point at infinity.

For X25519, this performs ECDH as specified in RFC 7748, Section 6.1. If the result is the all-zero value, ECDH returns an error.

func (*PrivateKey) ECMQV added in v1.0.2063

func (k *PrivateKey) ECMQV(eLocal *PrivateKey, sRemote, eRemote *PublicKey) (*PublicKey, error)

ECMQV performs a ECMQV exchange and return the shared secret.

func (*PrivateKey) Equal added in v1.0.2028

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

Equal returns whether x represents the same private key as k.

Note that there can be equivalent private keys with different encodings which would return false from this check but behave the same way as inputs to ECDH.

This check is performed in constant time as long as the key types and their curve match.

func (*PrivateKey) Public added in v1.0.2028

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

Public implements the implicit interface of all standard library private keys. See the docs of crypto.PrivateKey.

func (*PrivateKey) PublicKey added in v1.0.2028

func (k *PrivateKey) PublicKey() *PublicKey

type PublicKey added in v1.0.2028

type PublicKey struct {
	NamedCurve Curve
	KeyBytes   []byte
}

PublicKey is an ECDH public key, usually a peer's ECDH share sent over the wire.

These keys can be parsed with crypto/x509.ParsePKIXPublicKey and encoded with crypto/x509.MarshalPKIXPublicKey. For NIST curves, they then need to be converted with crypto/ecdsa.PublicKey.ECDH after parsing.

func FromPublicKey added in v1.0.2030

func FromPublicKey(pub *crypto_ecdh.PublicKey) (*PublicKey, error)

func ParsePublicKey

func ParsePublicKey(derBytes []byte) (*PublicKey, error)

解析公钥

func SM2PublicKeyToECDH added in v1.0.2031

func SM2PublicKeyToECDH(pub *sm2.PublicKey) (*PublicKey, error)

公钥导入为 ECDH 公钥

func (*PublicKey) Bytes added in v1.0.2028

func (k *PublicKey) Bytes() []byte

Bytes returns a copy of the encoding of the public key.

func (*PublicKey) Curve added in v1.0.2028

func (k *PublicKey) Curve() Curve

func (*PublicKey) Equal added in v1.0.2028

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

Equal returns whether x represents the same public key as k.

Note that there can be equivalent public keys with different encodings which would return false from this check but behave the same way as inputs to ECDH.

This check is performed in constant time as long as the key types and their curve match.

func (*PublicKey) SM2SharedKey added in v1.0.2063

func (k *PublicKey) SM2SharedKey(sPub, sRemote *PublicKey, uid, remoteUID []byte, kenLen int) ([]byte, error)

SM2SharedKey performs SM2 key derivation to generate shared keying data, the k was generated by SM2MQV.

func (*PublicKey) SM2ZA added in v1.0.2063

func (k *PublicKey) SM2ZA(h func() hash.Hash, uid []byte) ([]byte, error)

SM2ZA ZA = H256(ENTLA || IDA || a || b || xG || yG || xA || yA). Compliance with GB/T 32918.2-2016 5.5

type SM2ZACurve added in v1.0.2063

type SM2ZACurve interface {
	SM2ZA(h func() hash.Hash, pub *PublicKey, uid []byte) ([]byte, error)
}

SM2ZACurve

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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