record

package
v0.0.6 Latest Latest
Warning

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

Go to latest
Published: Jan 22, 2025 License: MIT Imports: 11 Imported by: 1

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrEmptyDomain = errors.New("信封域不能为空")

ErrEmptyDomain 表示信封域不能为空的错误

View Source
var ErrEmptyPayloadType = errors.New("负载类型不能为空")

ErrEmptyPayloadType 表示负载类型不能为空的错误

View Source
var ErrInvalidSignature = errors.New("无效的签名或不正确的域")

ErrInvalidSignature 表示签名无效或域不正确的错误

View Source
var (
	// ErrPayloadTypeNotRegistered 当信封的 PayloadType 与任何已注册的 Record 类型不匹配时,从 ConsumeEnvelope 返回此错误
	ErrPayloadTypeNotRegistered = errors.New("负载类型未注册")
)

Functions

func ConsumeEnvelope

func ConsumeEnvelope(data []byte, domain string) (envelope *Envelope, rec Record, err error)

ConsumeEnvelope 反序列化序列化的信封并使用提供的"域"字符串验证其签名 如果验证失败,将返回错误以及反序列化的信封,以便可以检查它 参数:

  • data: []byte 序列化的信封数据
  • domain: string 用于验证签名的域字符串

返回值:

  • *Envelope: 反序列化的信封
  • Record: 解析为具体记录类型的内部负载
  • error: 如果发生错误,返回错误信息

func RegisterType

func RegisterType(prototype Record)

RegisterType 将二进制负载类型标识符与具体的 Record 类型关联。 这用于在使用 ConsumeEnvelope 时自动解组来自信封的 Record 负载, 并在调用 Seal 时自动编组 Records 并确定正确的 PayloadType。

调用者必须提供要注册的记录类型的实例,该实例必须是指针类型。 注册应在定义 Record 类型的包的 init 函数中完成:

package hello_record
import record "github.com/dep2p/libp2p/core/record"

func init() {
    record.RegisterType(&HelloRecord{})
}

type HelloRecord struct { } // 等等..

Types

type Envelope

type Envelope struct {
	// PublicKey 用于验证签名并派生签名者的节点ID的公钥
	PublicKey crypto.PubKey

	// PayloadType 指示负载中包含的数据类型的二进制标识符
	// TODO(yusef): 强制执行 multicodec 前缀
	PayloadType []byte

	// RawPayload 信封的负载数据
	RawPayload []byte
	// contains filtered or unexported fields
}

Envelope 包含一个任意的 []byte 负载,由 dep2p 节点签名 信封在特定的"域"上下文中签名,这是在创建和验证信封时指定的字符串 必须知道用于生成信封的域字符串才能验证签名并访问负载

func ConsumeTypedEnvelope

func ConsumeTypedEnvelope(data []byte, destRecord Record) (envelope *Envelope, err error)

ConsumeTypedEnvelope 反序列化序列化的信封并验证其签名 参数:

  • data: []byte 序列化的信封数据
  • destRecord: Record 目标记录实例,用于反序列化信封负载

返回值:

  • *Envelope: 反序列化的信封
  • error: 如果发生错误,返回错误信息

func Seal

func Seal(rec Record, privateKey crypto.PrivKey) (*Envelope, error)

Seal 将给定的 Record 编组,将编组的字节放入信封中,并使用给定的私钥签名 参数:

  • rec: Record 要封装的记录
  • privateKey: crypto.PrivKey 用于签名的私钥

返回值:

  • *Envelope: 封装并签名后的信封
  • error: 如果发生错误,返回错误信息

func UnmarshalEnvelope

func UnmarshalEnvelope(data []byte) (*Envelope, error)

UnmarshalEnvelope 反序列化序列化的信封 protobuf 消息,而不验证其内容 参数:

  • data: []byte 序列化的信封数据

返回值:

  • *Envelope: 反序列化的信封
  • error: 如果发生错误,返回错误信息

func (*Envelope) Equal

func (e *Envelope) Equal(other *Envelope) bool

Equal 如果另一个信封具有相同的公钥、负载、负载类型和签名,则返回 true 这意味着它们也是使用相同的域字符串创建的 参数:

  • other: *Envelope 要比较的另一个信封

返回值:

  • bool: 如果信封相等返回 true,否则返回 false

func (*Envelope) Marshal

func (e *Envelope) Marshal() (res []byte, err error)

Marshal 返回包含信封序列化 protobuf 表示的字节切片 返回值:

  • []byte: 序列化的信封数据
  • error: 如果发生错误,返回错误信息

func (*Envelope) Record

func (e *Envelope) Record() (Record, error)

Record 返回作为 Record 反序列化的信封负载 返回的 Record 的具体类型取决于为信封的 PayloadType 注册的 Record 类型 一旦反序列化,Record 将被缓存以供将来访问 返回值:

  • Record: 反序列化的记录
  • error: 如果发生错误,返回错误信息

func (*Envelope) TypedRecord

func (e *Envelope) TypedRecord(dest Record) error

TypedRecord 将信封的负载反序列化到给定的 Record 实例中 参数:

  • dest: Record 目标记录实例

返回值:

  • error: 如果发生错误,返回错误信息

type Record

type Record interface {

	// Domain 是签名和验证特定 Record 类型时使用的"签名域"。
	// Domain 字符串对于您的 Record 类型应该是唯一的,并且 Record 类型的所有实例必须具有相同的 Domain 字符串。
	Domain() string

	// Codec 是此记录类型的二进制标识符,最好是已注册的 multicodec (参见 https://github.com/multiformats/multicodec)。
	// 当 Record 放入信封时(参见 record.Seal),Codec 值将用作信封的 PayloadType。
	// 当信封稍后被解封时,PayloadType 将用于查找正确的 Record 类型以将信封负载解组到其中。
	Codec() []byte

	// MarshalRecord 将 Record 实例转换为 []byte,以便可以用作信封负载。
	MarshalRecord() ([]byte, error)

	// UnmarshalRecord 将 []byte 负载解组为特定 Record 类型的实例。
	UnmarshalRecord([]byte) error
}

Record 表示可以用作信封负载的数据类型。 Record 接口定义了用于将 Record 类型编组和解组为字节切片的方法。

Record 类型可以使用 RegisterType 函数"注册"为给定信封的默认类型。 PayloadType。一旦 Record 类型被注册,当使用 ConsumeEnvelope 函数打开信封时, 将创建该类型的实例并用于解组具有已注册 PayloadType 的任何信封的负载。

要使用未注册的 Record 类型,请使用 ConsumeTypedEnvelope 并传入您希望将信封的负载解组到的 Record 类型实例。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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