whisperv5

package
v0.0.0-...-39cdb81 Latest Latest
Warning

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

Go to latest
Published: Jan 21, 2019 License: GPL-3.0 Imports: 31 Imported by: 0

Documentation

Index

Constants

View Source
const (
	EnvelopeVersion    = uint64(0)
	ProtocolVersion    = uint64(5)
	ProtocolVersionStr = "5.0"
	ProtocolName       = "shh"

	NumberOfMessageCodes = 64

	TopicLength = 4

	AESNonceLength = 12

	MaxMessageSize        = uint32(10 * 1024 * 1024) //邮件的最大可接受大小。
	DefaultMaxMessageSize = uint32(1024 * 1024)
	DefaultMinimumPoW     = 0.2

	DefaultTTL     = 50 //秒
	SynchAllowance = 10 //秒
)

Variables

View Source
var (
	ErrSymAsym              = errors.New("specify either a symmetric or an asymmetric key")
	ErrInvalidSymmetricKey  = errors.New("invalid symmetric key")
	ErrInvalidPublicKey     = errors.New("invalid public key")
	ErrInvalidSigningPubKey = errors.New("invalid signing public key")
	ErrTooLowPoW            = errors.New("message rejected, PoW too low")
	ErrNoTopics             = errors.New("missing topic(s)")
)
View Source
var DefaultConfig = Config{
	MaxMessageSize:     DefaultMaxMessageSize,
	MinimumAcceptedPOW: DefaultMinimumPoW,
}

Functions

func BytesToUintBigEndian

func BytesToUintBigEndian(b []byte) (res uint64)

bytestouintbigendian将切片转换为64位无符号整数。

func GenerateRandomID

func GenerateRandomID() (id string, err error)

GenerateRandomID生成一个随机字符串,然后返回该字符串用作键ID

func IsPubKeyEqual

func IsPubKeyEqual(a, b *ecdsa.PublicKey) bool

func NewSentMessage

func NewSentMessage(params *MessageParams) (*sentMessage, error)

newsentmessage创建并初始化一个未签名、未加密的悄悄消息。

func ValidatePublicKey

func ValidatePublicKey(k *ecdsa.PublicKey) bool

validatePublickey检查给定公钥的格式。

Types

type Config

type Config struct {
	MaxMessageSize     uint32  `toml:",omitempty"`
	MinimumAcceptedPOW float64 `toml:",omitempty"`
}

type Criteria

type Criteria struct {
	SymKeyID     string      `json:"symKeyID"`
	PrivateKeyID string      `json:"privateKeyID"`
	Sig          []byte      `json:"sig"`
	MinPow       float64     `json:"minPow"`
	Topics       []TopicType `json:"topics"`
	AllowP2P     bool        `json:"allowP2P"`
}

条件保存入站消息的各种筛选选项。

func (Criteria) MarshalJSON

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

func (*Criteria) UnmarshalJSON

func (c *Criteria) UnmarshalJSON(input []byte) error

type Envelope

type Envelope struct {
	Version  []byte
	Expiry   uint32
	TTL      uint32
	Topic    TopicType
	AESNonce []byte
	Data     []byte
	EnvNonce uint64
	// contains filtered or unexported fields
}

信封表示一个明文数据包,通过耳语进行传输。 网络。其内容可以加密或不加密和签名。

func NewEnvelope

func NewEnvelope(ttl uint32, topic TopicType, aesNonce []byte, msg *sentMessage) *Envelope

newenvelope用过期和目标数据包装了一条私语消息 包含在信封中,用于网络转发。

func (*Envelope) DecodeRLP

func (e *Envelope) DecodeRLP(s *rlp.Stream) error

decoderlp从rlp数据流解码信封。

func (*Envelope) Hash

func (e *Envelope) Hash() common.Hash

hash返回信封的sha3散列,如果还没有完成,则计算它。

func (*Envelope) IsSymmetric

func (e *Envelope) IsSymmetric() bool

func (*Envelope) Open

func (e *Envelope) Open(watcher *Filter) (msg *ReceivedMessage)

open试图解密信封,并在成功时填充消息字段。

func (*Envelope) OpenAsymmetric

func (e *Envelope) OpenAsymmetric(key *ecdsa.PrivateKey) (*ReceivedMessage, error)

OpenAsymmetric试图解密一个信封,可能用一个特定的密钥加密。

func (*Envelope) OpenSymmetric

func (e *Envelope) OpenSymmetric(key []byte) (msg *ReceivedMessage, err error)

opensymmetric试图解密一个可能用特定密钥加密的信封。

func (*Envelope) PoW

func (e *Envelope) PoW() float64

func (*Envelope) Seal

func (e *Envelope) Seal(options *MessageParams) error

Seal通过花费所需的时间作为证据来关闭信封 关于散列数据的工作。

func (*Envelope) Ver

func (e *Envelope) Ver() uint64

type Filter

type Filter struct {
	Src        *ecdsa.PublicKey  //邮件的发件人
	KeyAsym    *ecdsa.PrivateKey //收件人的私钥
	KeySym     []byte            //与主题关联的键
	Topics     [][]byte          //筛选邮件的主题
	PoW        float64           //耳语规范中所述的工作证明
	AllowP2P   bool              //指示此筛选器是否对直接对等消息感兴趣
	SymKeyHash common.Hash       //优化所需的对称密钥的keccak256hash

	Messages map[common.Hash]*ReceivedMessage
	// contains filtered or unexported fields
}

func (*Filter) MatchEnvelope

func (f *Filter) MatchEnvelope(envelope *Envelope) bool

func (*Filter) MatchMessage

func (f *Filter) MatchMessage(msg *ReceivedMessage) bool

func (*Filter) MatchTopic

func (f *Filter) MatchTopic(topic TopicType) bool

func (*Filter) Retrieve

func (f *Filter) Retrieve() (all []*ReceivedMessage)

func (*Filter) Trigger

func (f *Filter) Trigger(msg *ReceivedMessage)

type Filters

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

func NewFilters

func NewFilters(w *Whisper) *Filters

func (*Filters) Get

func (fs *Filters) Get(id string) *Filter

func (*Filters) Install

func (fs *Filters) Install(watcher *Filter) (string, error)

func (*Filters) NotifyWatchers

func (fs *Filters) NotifyWatchers(env *Envelope, p2pMessage bool)

func (*Filters) Uninstall

func (fs *Filters) Uninstall(id string) bool

type Info

type Info struct {
	Memory         int     `json:"memory"`         //浮动消息的内存大小(字节)。
	Messages       int     `json:"messages"`       //浮动消息数。
	MinPow         float64 `json:"minPow"`         //最小可接受功率
	MaxMessageSize uint32  `json:"maxMessageSize"` //最大接受邮件大小
}

信息包含诊断信息。

type MailServer

type MailServer interface {
	Archive(env *Envelope)
	DeliverMail(whisperPeer *Peer, request *Envelope)
}

mail server表示一个邮件服务器,能够 存档旧邮件以供后续传递 对同龄人。任何实施都必须确保 函数是线程安全的。而且,他们必须尽快返回。 delivermail应使用directmessagescode进行传递, 以绕过到期检查。

type Message

type Message struct {
	Sig       []byte    `json:"sig,omitempty"`
	TTL       uint32    `json:"ttl"`
	Timestamp uint32    `json:"timestamp"`
	Topic     TopicType `json:"topic"`
	Payload   []byte    `json:"payload"`
	Padding   []byte    `json:"padding"`
	PoW       float64   `json:"pow"`
	Hash      []byte    `json:"hash"`
	Dst       []byte    `json:"recipientPublicKey,omitempty"`
}

message是whisper消息的RPC表示。

func ToWhisperMessage

func ToWhisperMessage(message *ReceivedMessage) *Message

TowHisPermessage将内部消息转换为API版本。

func (Message) MarshalJSON

func (m Message) MarshalJSON() ([]byte, error)

func (*Message) UnmarshalJSON

func (m *Message) UnmarshalJSON(input []byte) error

type MessageParams

type MessageParams struct {
	TTL      uint32
	Src      *ecdsa.PrivateKey
	Dst      *ecdsa.PublicKey
	KeySym   []byte
	Topic    TopicType
	WorkTime uint32
	PoW      float64
	Payload  []byte
	Padding  []byte
}

messageparams指定将消息包装到信封中的确切方式。

type NewMessage

type NewMessage struct {
	SymKeyID   string    `json:"symKeyID"`
	PublicKey  []byte    `json:"pubKey"`
	Sig        string    `json:"sig"`
	TTL        uint32    `json:"ttl"`
	Topic      TopicType `json:"topic"`
	Payload    []byte    `json:"payload"`
	Padding    []byte    `json:"padding"`
	PowTime    uint32    `json:"powTime"`
	PowTarget  float64   `json:"powTarget"`
	TargetPeer string    `json:"targetPeer"`
}

new message表示通过rpc发布的新低语消息。

func (NewMessage) MarshalJSON

func (n NewMessage) MarshalJSON() ([]byte, error)

func (*NewMessage) UnmarshalJSON

func (n *NewMessage) UnmarshalJSON(input []byte) error

type Peer

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

Peer表示一个耳语协议对等连接。

func (*Peer) ID

func (peer *Peer) ID() []byte

type PublicWhisperAPI

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

publicWhisperAPI提供可以 公开使用,不涉及安全问题。

func NewPublicWhisperAPI

func NewPublicWhisperAPI(w *Whisper) *PublicWhisperAPI

NewPublicWhisperAPI创建新的RPC Whisper服务。

func (*PublicWhisperAPI) AddPrivateKey

func (api *PublicWhisperAPI) AddPrivateKey(ctx context.Context, privateKey hexutil.Bytes) (string, error)

addprivatekey导入给定的私钥。

func (*PublicWhisperAPI) AddSymKey

func (api *PublicWhisperAPI) AddSymKey(ctx context.Context, key hexutil.Bytes) (string, error)

addsymkey导入对称密钥。 它返回一个可用于引用该键的ID。 可用于加密和解密双方都知道密钥的消息。

func (*PublicWhisperAPI) DeleteKeyPair

func (api *PublicWhisperAPI) DeleteKeyPair(ctx context.Context, key string) (bool, error)

DeleteKeyPair删除具有给定密钥的密钥(如果存在)。

func (*PublicWhisperAPI) DeleteMessageFilter

func (api *PublicWhisperAPI) DeleteMessageFilter(id string) (bool, error)

DeleteMessageFilter删除一个筛选器。

func (*PublicWhisperAPI) DeleteSymKey

func (api *PublicWhisperAPI) DeleteSymKey(ctx context.Context, id string) bool

DeleteSymkey删除与给定ID关联的对称密钥。

func (*PublicWhisperAPI) GenerateSymKeyFromPassword

func (api *PublicWhisperAPI) GenerateSymKeyFromPassword(ctx context.Context, passwd string) (string, error)

generatesymkeyfrompassword从给定的密码派生一个密钥,存储并返回其ID。

func (*PublicWhisperAPI) GetFilterMessages

func (api *PublicWhisperAPI) GetFilterMessages(id string) ([]*Message, error)

getfiltermessages返回符合筛选条件和 从上一次投票到现在。

func (*PublicWhisperAPI) GetPrivateKey

func (api *PublicWhisperAPI) GetPrivateKey(ctx context.Context, id string) (hexutil.Bytes, error)

getprivatekey返回与给定密钥关联的私钥。关键是十六进制 以ANSI X9.62第4.3.6节规定的格式对键进行编码表示。

func (*PublicWhisperAPI) GetPublicKey

func (api *PublicWhisperAPI) GetPublicKey(ctx context.Context, id string) (hexutil.Bytes, error)

GetPublicKey返回与给定键关联的公钥。关键是十六进制 以ANSI X9.62第4.3.6节规定的格式对键进行编码表示。

func (*PublicWhisperAPI) GetSymKey

func (api *PublicWhisperAPI) GetSymKey(ctx context.Context, id string) (hexutil.Bytes, error)

GetSymkey返回与给定ID关联的对称密钥。

func (*PublicWhisperAPI) HasKeyPair

func (api *PublicWhisperAPI) HasKeyPair(ctx context.Context, id string) bool

hasKeyPair返回节点是否有与给定ID关联的密钥对的指示。

func (*PublicWhisperAPI) HasSymKey

func (api *PublicWhisperAPI) HasSymKey(ctx context.Context, id string) bool

hassymkey返回节点是否具有与给定密钥关联的对称密钥的指示。

func (*PublicWhisperAPI) Info

func (api *PublicWhisperAPI) Info(ctx context.Context) Info

信息返回关于耳语节点的诊断信息。

func (*PublicWhisperAPI) MarkTrustedPeer

func (api *PublicWhisperAPI) MarkTrustedPeer(ctx context.Context, url string) (bool, error)

marktrustedpeer标记受信任的对等机。,这将允许它发送历史(过期)消息。 注意:此功能不添加新节点,节点需要作为对等节点存在。

func (*PublicWhisperAPI) Messages

func (api *PublicWhisperAPI) Messages(ctx context.Context, crit Criteria) (*rpc.Subscription, error)

消息设置了一个订阅,该订阅在消息到达时触发匹配的事件 给定的一组标准。

func (*PublicWhisperAPI) NewKeyPair

func (api *PublicWhisperAPI) NewKeyPair(ctx context.Context) (string, error)

new key pair为消息解密和加密生成一个新的公钥和私钥对。 它返回一个可用于引用密钥对的ID。

func (*PublicWhisperAPI) NewMessageFilter

func (api *PublicWhisperAPI) NewMessageFilter(req Criteria) (string, error)

NewMessageFilter创建一个可用于轮询的新筛选器 (新)满足给定条件的消息。

func (*PublicWhisperAPI) NewSymKey

func (api *PublicWhisperAPI) NewSymKey(ctx context.Context) (string, error)

newsymkey生成随机对称密钥。 它返回一个可用于引用该键的ID。 可用于加密和解密双方都知道密钥的消息。

func (*PublicWhisperAPI) Post

func (api *PublicWhisperAPI) Post(ctx context.Context, req NewMessage) (bool, error)

在低语网络上发布消息。

func (*PublicWhisperAPI) SetMaxMessageSize

func (api *PublicWhisperAPI) SetMaxMessageSize(ctx context.Context, size uint32) (bool, error)

setmaxmessagesize设置可接受的最大消息大小。 上限在Whisperv5.MaxMessageSize中定义。

func (*PublicWhisperAPI) SetMinPoW

func (api *PublicWhisperAPI) SetMinPoW(ctx context.Context, pow float64) (bool, error)

setminpow设置消息在被接受之前的最小POW。

func (*PublicWhisperAPI) Version

func (api *PublicWhisperAPI) Version(ctx context.Context) string

version返回耳语子协议版本。

type ReceivedMessage

type ReceivedMessage struct {
	Raw []byte

	Payload   []byte
	Padding   []byte
	Signature []byte

	PoW   float64          //耳语规范中所述的工作证明
	Sent  uint32           //消息发布到网络的时间
	TTL   uint32           //消息允许的最长生存时间
	Src   *ecdsa.PublicKey //邮件收件人(用于解码邮件的标识)
	Dst   *ecdsa.PublicKey //邮件收件人(用于解码邮件的标识)
	Topic TopicType

	SymKeyHash      common.Hash //与主题关联的密钥的keccak256hash
	EnvelopeHash    common.Hash //作为唯一ID的消息信封哈希
	EnvelopeVersion uint64
}

ReceivedMessage表示要通过 耳语协议。

func (*ReceivedMessage) SigToPubKey

func (msg *ReceivedMessage) SigToPubKey() *ecdsa.PublicKey

sigtopubkey检索消息签名者的公钥。

func (*ReceivedMessage) Validate

func (msg *ReceivedMessage) Validate() bool

验证检查有效性并在成功时提取字段

type Statistics

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

type TopicType

type TopicType [TopicLength]byte

TopicType表示密码安全的概率部分 消息的分类,确定为 sha3消息原始作者给出的某些任意数据的散列。

func BytesToTopic

func BytesToTopic(b []byte) (t TopicType)

func (TopicType) MarshalText

func (t TopicType) MarshalText() ([]byte, error)

marshalText返回t的十六进制表示形式。

func (*TopicType) String

func (t *TopicType) String() string

字符串将主题字节数组转换为字符串表示形式。

func (*TopicType) UnmarshalText

func (t *TopicType) UnmarshalText(input []byte) error

UnmarshalText解析主题的十六进制表示。

type Whisper

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

低语代表通过以太坊的黑暗通信接口 网络,使用自己的P2P通信层。

func New

func New(cfg *Config) *Whisper

New创建了一个准备好通过以太坊P2P网络通信的耳语客户端。

func (*Whisper) APIs

func (w *Whisper) APIs() []rpc.API

API返回Whisper实现提供的RPC描述符

func (*Whisper) AddKeyPair

func (w *Whisper) AddKeyPair(key *ecdsa.PrivateKey) (string, error)

AddKeyPair导入非对称私钥并返回其标识符。

func (*Whisper) AddSymKeyDirect

func (w *Whisper) AddSymKeyDirect(key []byte) (string, error)

addsymkeydirect存储密钥并返回其ID。

func (*Whisper) AddSymKeyFromPassword

func (w *Whisper) AddSymKeyFromPassword(password string) (string, error)

addsymkeyfrompassword根据密码生成密钥,存储并返回其ID。

func (*Whisper) AllowP2PMessagesFromPeer

func (w *Whisper) AllowP2PMessagesFromPeer(peerID []byte) error

allowp2pmessagesfrompeer标记特定的受信任对等机, 这将允许它发送历史(过期)消息。

func (*Whisper) DeleteKeyPair

func (w *Whisper) DeleteKeyPair(key string) bool

DeleteKeyPair删除指定的密钥(如果存在)。

func (*Whisper) DeleteSymKey

func (w *Whisper) DeleteSymKey(id string) bool

DeleteSymkey删除与名称字符串关联的键(如果存在)。

func (*Whisper) Envelopes

func (w *Whisper) Envelopes() []*Envelope

信封检索节点当前汇集的所有消息。

func (*Whisper) GenerateSymKey

func (w *Whisper) GenerateSymKey() (string, error)

generatesymkey生成一个随机对称密钥并将其存储在id下, 然后返回。将在将来用于会话密钥交换。

func (*Whisper) GetFilter

func (w *Whisper) GetFilter(id string) *Filter

GetFilter按ID返回筛选器。

func (*Whisper) GetPrivateKey

func (w *Whisper) GetPrivateKey(id string) (*ecdsa.PrivateKey, error)

getprivatekey检索指定标识的私钥。

func (*Whisper) GetSymKey

func (w *Whisper) GetSymKey(id string) ([]byte, error)

GetSymkey返回与给定ID关联的对称密钥。

func (*Whisper) HandlePeer

func (w *Whisper) HandlePeer(peer *p2p.Peer, rw p2p.MsgReadWriter) error

当低语子协议时,底层p2p层调用handlepeer。 已协商连接。

func (*Whisper) HasKeyPair

func (w *Whisper) HasKeyPair(id string) bool

hasKeyPair检查耳语节点是否配置了私钥 指定的公用对。

func (*Whisper) HasSymKey

func (w *Whisper) HasSymKey(id string) bool

如果有一个键与给定的ID相关联,HassymKey将返回true。 否则返回false。

func (*Whisper) MaxMessageSize

func (w *Whisper) MaxMessageSize() uint32

maxmessagesize返回可接受的最大消息大小。

func (*Whisper) Messages

func (w *Whisper) Messages(id string) []*ReceivedMessage

消息迭代当前所有浮动信封 并检索此筛选器可以解密的所有消息。

func (*Whisper) MinPow

func (w *Whisper) MinPow() float64

func (*Whisper) NewKeyPair

func (w *Whisper) NewKeyPair() (string, error)

NewKeyPair为客户端生成新的加密标识,并注入 它进入已知的身份信息进行解密。返回新密钥对的ID。

func (*Whisper) Overflow

func (w *Whisper) Overflow() bool

溢出返回消息队列是否已满的指示。

func (*Whisper) Protocols

func (w *Whisper) Protocols() []p2p.Protocol

协议返回此特定客户端运行的耳语子协议。

func (*Whisper) RegisterServer

func (w *Whisper) RegisterServer(server MailServer)

registerserver注册mailserver接口。 邮件服务器将使用p2prequestcode处理所有传入的邮件。

func (*Whisper) RequestHistoricMessages

func (w *Whisper) RequestHistoricMessages(peerID []byte, envelope *Envelope) error

RequestHistoricMessages向特定对等端发送带有p2prequestcode的消息, 它可以实现mailserver接口,并且应该处理这个 请求和响应一些对等消息(可能已过期), 不能再转发了。 耳语协议对信封的格式和内容不可知。

func (*Whisper) Send

func (w *Whisper) Send(envelope *Envelope) error

send将一条消息插入到whisper发送队列中,并在 网络在未来的周期中。

func (*Whisper) SendP2PDirect

func (w *Whisper) SendP2PDirect(peer *Peer, envelope *Envelope) error

sendp2pdirect向特定对等发送对等消息。

func (*Whisper) SendP2PMessage

func (w *Whisper) SendP2PMessage(peerID []byte, envelope *Envelope) error

sendp2pmessage向特定对等发送对等消息。

func (*Whisper) SetMaxMessageSize

func (w *Whisper) SetMaxMessageSize(size uint32) error

setmaxmessagesize设置此节点允许的最大消息大小

func (*Whisper) SetMinimumPoW

func (w *Whisper) SetMinimumPoW(val float64) error

setminimumPow设置此节点所需的最小Pow

func (*Whisper) Start

func (w *Whisper) Start(*p2p.Server) error

start实现node.service,启动后台数据传播线程 关于耳语协议。

func (*Whisper) Stats

func (w *Whisper) Stats() Statistics

stats返回低语节点统计信息。

func (*Whisper) Stop

func (w *Whisper) Stop() error

stop实现node.service,停止后台数据传播线程 关于耳语协议。

func (*Whisper) Subscribe

func (w *Whisper) Subscribe(f *Filter) (string, error)

订阅安装用于筛选、解密的新消息处理程序 以及随后存储的传入消息。

func (*Whisper) Unsubscribe

func (w *Whisper) Unsubscribe(id string) error

取消订阅将删除已安装的消息处理程序。

func (*Whisper) Version

func (w *Whisper) Version() uint

version返回耳语子协议版本号。

Jump to

Keyboard shortcuts

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