ecdh

package
v0.21.5-beta.1 Latest Latest
Warning

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

Go to latest
Published: Nov 1, 2023 License: MIT Imports: 13 Imported by: 2

Documentation

Overview

Package ecdh implements Elliptic Curve Diffie-Hellman / SM2-MQV over SM2 curve.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Curve

type Curve interface {
	// GenerateKey generates a new PrivateKey from rand.
	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. Adversarially selected
	// private keys can cause ECDH to return an error.
	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
}

func P256

func P256() Curve

P256 returns a Curve which implements SM2, also known as sm2p256v1

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

type PrivateKey

type PrivateKey struct {
	// contains filtered or unexported fields
}

PrivateKey is an ECDH private key, usually kept secret.

These keys can be parsed with [smx509.ParsePKCS8PrivateKey] and encoded with [smx509.MarshalPKCS8PrivateKey]. For SM2 curve, it then needs to be converted with [sm2.PrivateKey.ECDH] after parsing.

func (*PrivateKey) Bytes

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

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

func (*PrivateKey) Curve

func (k *PrivateKey) Curve() Curve

func (*PrivateKey) ECDH added in v0.15.4

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

ECDH performs a ECDH exchange and returns the shared secret.

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) Equal

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

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

func (k *PrivateKey) PublicKey() *PublicKey

func (*PrivateKey) SM2MQV added in v0.15.4

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

SM2MQV performs a SM2 specific style ECMQV exchange and return the shared secret.

type PublicKey

type PublicKey struct {
	// contains filtered or unexported fields
}

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

These keys can be parsed with [smx509.ParsePKIXPublicKey] and encoded with [smx509.MarshalPKIXPublicKey]. For SM2 curve, it then needs to be converted with [sm2.PublicKeyToECDH] after parsing.

func (*PublicKey) Bytes

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

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

func (*PublicKey) Curve

func (k *PublicKey) Curve() Curve

func (*PublicKey) Equal

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 v0.15.4

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

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

func (*PublicKey) SM2ZA added in v0.15.4

func (k *PublicKey) SM2ZA(md 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

Jump to

Keyboard shortcuts

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