Documentation ¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrEmptyDomain = errors.New("信封域不能为空")
ErrEmptyDomain 表示信封域不能为空的错误
var ErrEmptyPayloadType = errors.New("负载类型不能为空")
ErrEmptyPayloadType 表示负载类型不能为空的错误
var ErrInvalidSignature = errors.New("无效的签名或不正确的域")
ErrInvalidSignature 表示签名无效或域不正确的错误
var ( // ErrPayloadTypeNotRegistered 当信封的 PayloadType 与任何已注册的 Record 类型不匹配时,从 ConsumeEnvelope 返回此错误 ErrPayloadTypeNotRegistered = errors.New("负载类型未注册") )
Functions ¶
func ConsumeEnvelope ¶
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 ¶
ConsumeTypedEnvelope 反序列化序列化的信封并验证其签名 参数:
- data: []byte 序列化的信封数据
- destRecord: Record 目标记录实例,用于反序列化信封负载
返回值:
- *Envelope: 反序列化的信封
- error: 如果发生错误,返回错误信息
func Seal ¶
Seal 将给定的 Record 编组,将编组的字节放入信封中,并使用给定的私钥签名 参数:
- rec: Record 要封装的记录
- privateKey: crypto.PrivKey 用于签名的私钥
返回值:
- *Envelope: 封装并签名后的信封
- error: 如果发生错误,返回错误信息
func UnmarshalEnvelope ¶
UnmarshalEnvelope 反序列化序列化的信封 protobuf 消息,而不验证其内容 参数:
- data: []byte 序列化的信封数据
返回值:
- *Envelope: 反序列化的信封
- error: 如果发生错误,返回错误信息
func (*Envelope) Equal ¶
Equal 如果另一个信封具有相同的公钥、负载、负载类型和签名,则返回 true 这意味着它们也是使用相同的域字符串创建的 参数:
- other: *Envelope 要比较的另一个信封
返回值:
- bool: 如果信封相等返回 true,否则返回 false
func (*Envelope) Marshal ¶
Marshal 返回包含信封序列化 protobuf 表示的字节切片 返回值:
- []byte: 序列化的信封数据
- error: 如果发生错误,返回错误信息
func (*Envelope) Record ¶
Record 返回作为 Record 反序列化的信封负载 返回的 Record 的具体类型取决于为信封的 PayloadType 注册的 Record 类型 一旦反序列化,Record 将被缓存以供将来访问 返回值:
- Record: 反序列化的记录
- error: 如果发生错误,返回错误信息
func (*Envelope) TypedRecord ¶
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 类型实例。