scrypto

package
v0.4.6 Latest Latest
Warning

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

Go to latest
Published: Dec 18, 2023 License: MIT Imports: 8 Imported by: 0

README

说明

curve25519是一条曲线 ed25519用于签名与验签
x25519用于ecdh
ed25519的private key可以转换为x25519,不能反过来

使用x25519实现加解密的过程

  1. 随机生成x25519的公私钥对A(每一次都会新生成)

  2. 使用A的私钥及B的公钥计算出key

  3. key通过HKDF混合得到wrapped key

  4. 使用AEC算法用wrpped key加密数据

  5. B使用A的公钥计算出key

  6. key通过HKDF混合得到wrapped key

  7. 使用AEC算法解密数据

参见

age ecdh25519

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	Encoders = make(map[EndeType]AsymmetricEncoder, 2)
	Decoders = make(map[EndeType]AsymmetricDecoder, 2)
)

以下值只会在init中进行修改,所以认为是安全的

View Source
var (
	Ecdhs = make(map[string]Ecdh, 2)
)

以下值只会在init中进行修改,所以认为是安全的

Functions

func SignEd25519

func SignEd25519(privateKey ed25519.PrivateKey, hash []byte) (signature []byte, publicBytes []byte)

func ToSigningHash

func ToSigningHash(data []byte) (hash []byte)

Types

type AsymmetricDecoder

type AsymmetricDecoder interface {
	// EcdhDecode
	// EndeData中已经包含peersKey,所以没有出现在参数中
	EcdhDecode(privateKey crypto.PrivateKey, cipher *EndeData) (plain EndeData, err error)
}

func GetAsymmetricDecoder

func GetAsymmetricDecoder(data *EndeData) AsymmetricDecoder

type AsymmetricEncoder

type AsymmetricEncoder interface {
	EcdhEncode(privateKey crypto.PrivateKey, peersKey crypto.PublicKey, plain *EndeData) (cipher EndeData, err error)
}

func GetAsymmetricEncoder

func GetAsymmetricEncoder(data *EndeData) AsymmetricEncoder

type CurveParameters

type CurveParameters struct {
	Name    string // the canonical name of the curve
	BitSize int    // the size of the underlying field
}

type Ecdh

type Ecdh interface {
	// GenerateKey generates a private/public key pair using entropy from rand.
	// If rand is nil, crypto/rand.Reader will be used.
	GenerateKey(rand io.Reader) (private crypto.PrivateKey, public crypto.PublicKey, err error)

	// Parameters returns the curve parameters - like the field size.
	Parameters() CurveParameters

	// PublicKey returns the public key corresponding to the given private one.
	PublicKey(private crypto.PrivateKey) (public crypto.PublicKey, err error)

	// ComputeSecret returns the secret value computed from the given private key
	// and the peers public key.
	ComputeSecret(private crypto.PrivateKey, peersPublic crypto.PublicKey) (secret []byte, err error)

	PublicKeyToBytes(publicKey crypto.PublicKey) (key []byte, err error)

	PrivateKeyToBytes(privateKey crypto.PrivateKey) (key []byte, err error)

	BytesToPublicKey(keyBytes []byte) (publicKey crypto.PublicKey, err error)

	BytesToPrivateKey(keyBytes []byte) (privateKey crypto.PrivateKey, err error)
}

Ecdh is the interface defining all functions necessary for ECDH.

func GetEcdh

func GetEcdh(data *EndeData) Ecdh

type EndeData

type EndeData struct {
	//加密时使用的公钥
	PublicKey []byte
	EndeType  EndeType
	//对Body的签名,
	Signature []byte
	//ed25519不能从签名出计算出公钥,所以需要来验证签名。在使用中双方也可以约定公钥,并不一定要存放在字段中
	SignedPublicKey []byte
	//true数据已加密
	EnData bool
	//数据
	Body []byte
}

func DecodeData

func DecodeData(cipher *EndeData, privateKey crypto.PrivateKey, signedPublicKey ed25519.PublicKey) (plain EndeData, err error)

func EncodeData

func EncodeData(plain *EndeData, peerKey crypto.PublicKey, signedKey ed25519.PrivateKey) (cipher EndeData, err error)

func (EndeData) MarshalJSON

func (c EndeData) MarshalJSON() ([]byte, error)

func (*EndeData) UnmarshalJSON

func (c *EndeData) UnmarshalJSON(b []byte) error

type EndeType

type EndeType string
const (
	EndeType_X25519 EndeType = "x25519"
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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