whisper: mostly golint comments, few remain

This commit is contained in:
Kiel barry 2018-06-04 18:23:00 -07:00
parent 580b598525
commit af53954fcd
16 changed files with 60 additions and 21 deletions

View file

@ -29,6 +29,8 @@ import (
"github.com/syndtr/goleveldb/leveldb/util"
)
// WMailServer stores the leveldb instance containing an archive of messages
// as well as the whisper instance.
type WMailServer struct {
db *leveldb.DB
w *whisper.Whisper
@ -42,6 +44,7 @@ type DBKey struct {
raw []byte
}
// NewDbKey creates a new DBKey with a new raw hash based on the current time.
func NewDbKey(t uint32, h common.Hash) *DBKey {
const sz = common.HashLength + 4
var k DBKey
@ -53,6 +56,7 @@ func NewDbKey(t uint32, h common.Hash) *DBKey {
return &k
}
// Init assigns initial values for the WMailServer.
func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, pow float64) error {
var err error
if len(path) == 0 {
@ -82,12 +86,14 @@ func (s *WMailServer) Init(shh *whisper.Whisper, path string, password string, p
return nil
}
// Close shutdowns the connection to the levelDB instance of s
func (s *WMailServer) Close() {
if s.db != nil {
s.db.Close()
}
}
// Archive maps the message in bytes to a new raw key hash.
func (s *WMailServer) Archive(env *whisper.Envelope) {
key := NewDbKey(env.Expiry-env.TTL, env.Hash())
rawEnvelope, err := rlp.EncodeToBytes(env)
@ -101,6 +107,7 @@ func (s *WMailServer) Archive(env *whisper.Envelope) {
}
}
// DeliverMail will send a message via the p2p protocol.
func (s *WMailServer) DeliverMail(peer *whisper.Peer, request *whisper.Envelope) {
if peer == nil {
log.Error("Whisper peer is nil")
@ -177,15 +184,16 @@ func (s *WMailServer) validateRequest(peerID []byte, request *whisper.Envelope)
var bloom []byte
payloadSize := len(decrypted.Payload)
if payloadSize < 8 {
switch {
case (payloadSize < 8):
log.Warn(fmt.Sprintf("Undersized p2p request"))
return false, 0, 0, nil
} else if payloadSize == 8 {
case (payloadSize == 8):
bloom = whisper.MakeFullNodeBloom()
} else if payloadSize < 8+whisper.BloomFilterSize {
case (payloadSize < 8+whisper.BloomFilterSize):
log.Warn(fmt.Sprintf("Undersized bloom filter in p2p request"))
return false, 0, 0, nil
} else {
default:
bloom = decrypted.Payload[8 : 8+whisper.BloomFilterSize]
}

View file

@ -32,6 +32,7 @@ import (
"github.com/ethereum/go-ethereum/rpc"
)
// Variables that specify custom error messages.
var (
ErrSymAsym = errors.New("specify either a symmetric or an asymmetric key")
ErrInvalidSymmetricKey = errors.New("invalid symmetric key")

View file

@ -16,11 +16,13 @@
package whisperv5
// Config is used to map unambiguously to values in the doc.go file.
type Config struct {
MaxMessageSize uint32 `toml:",omitempty"`
MinimumAcceptedPOW float64 `toml:",omitempty"`
}
// DefaultConfig values are set by the doc.go file within this package.
var DefaultConfig = Config{
MaxMessageSize: DefaultMaxMessageSize,
MinimumAcceptedPOW: DefaultMinimumPoW,

View file

@ -34,6 +34,7 @@ import (
"time"
)
// Constants here define the configuration for the current release.
const (
EnvelopeVersion = uint64(0)
ProtocolVersion = uint64(5)
@ -53,7 +54,7 @@ const (
signatureLength = 65
aesKeyLength = 32
AESNonceLength = 12
keyIdSize = 32
keyIDSize = 32
MaxMessageSize = uint32(10 * 1024 * 1024) // maximum accepted size of a message.
DefaultMaxMessageSize = uint32(1024 * 1024)

View file

@ -82,14 +82,17 @@ func NewEnvelope(ttl uint32, topic TopicType, aesNonce []byte, msg *sentMessage)
return &env
}
// IsSymmetric confirms the AESNonce has length greater than 0.
func (e *Envelope) IsSymmetric() bool {
return len(e.AESNonce) > 0
}
// isAsymmetric confirms the AESNonce does not have a length greater than 0.
func (e *Envelope) isAsymmetric() bool {
return !e.IsSymmetric()
}
//Ver converts the version to 64-bit unsigned integer.
func (e *Envelope) Ver() uint64 {
return bytesToUintLittleEndian(e.Version)
}
@ -223,7 +226,7 @@ func (e *Envelope) Open(watcher *Filter) (msg *ReceivedMessage) {
if msg != nil {
msg.Dst = &watcher.KeyAsym.PublicKey
}
} else if e.IsSymmetric() {
} else {
msg, _ = e.OpenSymmetric(watcher.KeySym)
if msg != nil {
msg.SymKeyHash = crypto.Keccak256Hash(watcher.KeySym)

View file

@ -45,6 +45,7 @@ type Filters struct {
mutex sync.RWMutex
}
// NewFilters initiliazes the Filterse struct with w.
func NewFilters(w *Whisper) *Filters {
return &Filters{
watchers: make(map[string]*Filter),
@ -52,6 +53,8 @@ func NewFilters(w *Whisper) *Filters {
}
}
// Install hashes the Topic's key and sets the watcher to a random ID
// inside fs.watchers.
func (fs *Filters) Install(watcher *Filter) (string, error) {
if watcher.Messages == nil {
watcher.Messages = make(map[common.Hash]*ReceivedMessage)
@ -77,6 +80,7 @@ func (fs *Filters) Install(watcher *Filter) (string, error) {
return id, err
}
// Uninstall deletes values associated with id from fs.watchers, if one exists.
func (fs *Filters) Uninstall(id string) bool {
fs.mutex.Lock()
defer fs.mutex.Unlock()
@ -87,12 +91,15 @@ func (fs *Filters) Uninstall(id string) bool {
return false
}
// Get returns the watcher with the associated id.
func (fs *Filters) Get(id string) *Filter {
fs.mutex.RLock()
defer fs.mutex.RUnlock()
return fs.watchers[id]
}
// NotifyWatchers validates that messages are allowed to be read before
// mapping the msg to fs Messages map.
func (fs *Filters) NotifyWatchers(env *Envelope, p2pMessage bool) {
var msg *ReceivedMessage
@ -136,9 +143,8 @@ func (f *Filter) processEnvelope(env *Envelope) *ReceivedMessage {
msg := env.Open(f)
if msg != nil {
return msg
} else {
log.Trace("processing envelope: failed to open", "hash", env.Hash().Hex())
}
log.Trace("processing envelope: failed to open", "hash", env.Hash().Hex())
} else {
log.Trace("processing envelope: does not match", "hash", env.Hash().Hex())
}
@ -153,6 +159,8 @@ func (f *Filter) expectsSymmetricEncryption() bool {
return f.KeySym != nil
}
// Trigger will assign the msg to Filter's Messages map if the
// EnvelopeHash has not already been used to set a msg.
func (f *Filter) Trigger(msg *ReceivedMessage) {
f.mutex.Lock()
defer f.mutex.Unlock()
@ -162,6 +170,7 @@ func (f *Filter) Trigger(msg *ReceivedMessage) {
}
}
// Retrieve will return a slice of all messages the Filter stores.
func (f *Filter) Retrieve() (all []*ReceivedMessage) {
f.mutex.Lock()
defer f.mutex.Unlock()
@ -201,6 +210,7 @@ func (f *Filter) MatchEnvelope(envelope *Envelope) bool {
return false
}
// MatchTopic checks whether param topic exists in the f receiver.
func (f *Filter) MatchTopic(topic TopicType) bool {
if len(f.Topics) == 0 {
// any topic matches
@ -232,6 +242,8 @@ func matchSingleTopic(topic TopicType, bt []byte) bool {
return true
}
// IsPubKeyEqual checks the format of the given public keys a and b,
// and compares where each sits on an elliptical curve.
func IsPubKeyEqual(a, b *ecdsa.PublicKey) bool {
if !ValidatePublicKey(a) {
return false

View file

@ -109,7 +109,7 @@ func TestInstallFilters(t *testing.T) {
t.Fatalf("seed %d: failed to install filter: %s", seed, err)
}
tst[i].id = j
if len(j) != keyIdSize*2 {
if len(j) != keyIDSize*2 {
t.Fatalf("seed %d: wrong filter id size [%d]", seed, len(j))
}
}

View file

@ -10,6 +10,7 @@ import (
var _ = (*criteriaOverride)(nil)
// MarshalJSON implements the json.Marshaller interface.
func (c Criteria) MarshalJSON() ([]byte, error) {
type Criteria struct {
SymKeyID string `json:"symKeyID"`
@ -29,6 +30,7 @@ func (c Criteria) MarshalJSON() ([]byte, error) {
return json.Marshal(&enc)
}
// UnmarshalJSON implements json.Unmarshaler interface and maps input to C.
func (c *Criteria) UnmarshalJSON(input []byte) error {
type Criteria struct {
SymKeyID *string `json:"symKeyID"`

View file

@ -10,6 +10,7 @@ import (
var _ = (*messageOverride)(nil)
// MarshalJSON implements the json.Marshaller interface.
func (m Message) MarshalJSON() ([]byte, error) {
type Message struct {
Sig hexutil.Bytes `json:"sig,omitempty"`
@ -35,6 +36,7 @@ func (m Message) MarshalJSON() ([]byte, error) {
return json.Marshal(&enc)
}
// UnmarshalJSON implements json.Unmarshaler interface and maps input to m.
func (m *Message) UnmarshalJSON(input []byte) error {
type Message struct {
Sig *hexutil.Bytes `json:"sig,omitempty"`

View file

@ -10,6 +10,7 @@ import (
var _ = (*newMessageOverride)(nil)
// MarshalJSON implements the json.Marshaller interface.
func (n NewMessage) MarshalJSON() ([]byte, error) {
type NewMessage struct {
SymKeyID string `json:"symKeyID"`
@ -37,6 +38,7 @@ func (n NewMessage) MarshalJSON() ([]byte, error) {
return json.Marshal(&enc)
}
// UnmarshalJSON implements json.Unmarshaler interface and maps input to n.
func (n *NewMessage) UnmarshalJSON(input []byte) error {
type NewMessage struct {
SymKeyID *string `json:"symKeyID"`

View file

@ -156,18 +156,18 @@ func (peer *Peer) broadcast() error {
err := p2p.Send(peer.ws, messagesCode, envelope)
if err != nil {
return err
} else {
}
peer.mark(envelope)
cnt++
}
}
}
if cnt > 0 {
log.Trace("broadcast", "num. messages", cnt)
}
return nil
}
// ID returns the peers peer.ID in a byte slice.
func (peer *Peer) ID() []byte {
id := peer.peer.ID()
return id[:]

View file

@ -79,13 +79,13 @@ type TestNode struct {
shh *Whisper
id *ecdsa.PrivateKey
server *p2p.Server
filerId string
filerID string
}
var result TestData
var nodes [NumNodes]*TestNode
var sharedKey = []byte("some arbitrary data here")
var sharedTopic TopicType = TopicType{0xF, 0x1, 0x2, 0}
var sharedTopic = TopicType{0xF, 0x1, 0x2, 0}
var expectedMessage = []byte("per rectum ad astra")
// This test does the following:
@ -120,7 +120,7 @@ func initialize(t *testing.T) {
topics = append(topics, sharedTopic)
f := Filter{KeySym: sharedKey}
f.Topics = [][]byte{topics[0][:]}
node.filerId, err = node.shh.Subscribe(&f)
node.filerID, err = node.shh.Subscribe(&f)
if err != nil {
t.Fatalf("failed to install the filter: %s.", err)
}
@ -133,9 +133,9 @@ func initialize(t *testing.T) {
name := common.MakeName("whisper-go", "2.0")
var peers []*discover.Node
if i > 0 {
peerNodeId := nodes[i-1].id
peerNodeID := nodes[i-1].id
peerPort := uint16(port - 1)
peerNode := discover.PubkeyID(&peerNodeId.PublicKey)
peerNode := discover.PubkeyID(&peerNodeID.PublicKey)
peer := discover.NewNode(peerNode, ip, peerPort, peerPort)
peers = append(peers, peer)
}
@ -167,7 +167,7 @@ func stopServers() {
for i := 0; i < NumNodes; i++ {
n := nodes[i]
if n != nil {
n.shh.Unsubscribe(n.filerId)
n.shh.Unsubscribe(n.filerID)
n.shh.Stop()
n.server.Stop()
}
@ -186,9 +186,9 @@ func checkPropagation(t *testing.T) {
time.Sleep(cycle * time.Millisecond)
for i := 0; i < NumNodes; i++ {
f := nodes[i].shh.GetFilter(nodes[i].filerId)
f := nodes[i].shh.GetFilter(nodes[i].filerID)
if f == nil {
t.Fatalf("failed to get filterId %s from node %d.", nodes[i].filerId, i)
t.Fatalf("failed to get filterId %s from node %d.", nodes[i].filerID, i)
}
mail := f.Retrieve()

View file

@ -28,6 +28,7 @@ import (
// SHA3 hash of some arbitrary data given by the original author of the message.
type TopicType [TopicLength]byte
// BytesToTopic will return passed parameters as a TopicType.
func BytesToTopic(b []byte) (t TopicType) {
sz := TopicLength
if x := len(b); x < TopicLength {

View file

@ -37,6 +37,7 @@ import (
set "gopkg.in/fatih/set.v0"
)
// Statistics is used to store useful information regarding whisper node usage.
type Statistics struct {
messagesCleared int
memoryCleared int
@ -121,6 +122,7 @@ func New(cfg *Config) *Whisper {
return whisper
}
// MinPow returns the minimal PoW required by this node.
func (w *Whisper) MinPow() float64 {
val, _ := w.settings.Load(minPowIdx)
return val.(float64)
@ -842,7 +844,7 @@ func deriveKeyMaterial(key []byte, version uint64) (derivedKey []byte, err error
// GenerateRandomID generates a random string, which is then returned to be used as a key id
func GenerateRandomID() (id string, err error) {
buf := make([]byte, keyIdSize)
buf := make([]byte, keyIDSize)
_, err = crand.Read(buf)
if err != nil {
return "", err

View file

@ -242,6 +242,8 @@ func (peer *Peer) setBloomFilter(bloom []byte) {
}
}
// MakeFullNodeBloom returns a bloom object with all entries
// representing a single byte with the value of 255.
func MakeFullNodeBloom() []byte {
bloom := make([]byte, BloomFilterSize)
for i := 0; i < BloomFilterSize; i++ {

View file

@ -1025,6 +1025,7 @@ func isFullNode(bloom []byte) bool {
return true
}
// BloomFilterMatch compares the values of filter and sample, returning a boolean.
func BloomFilterMatch(filter, sample []byte) bool {
if filter == nil {
return true