mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 22:26:42 +00:00
whisper: fixed math/rand.Read() issue
This commit is contained in:
parent
e9d3ff3760
commit
641114ba28
4 changed files with 34 additions and 38 deletions
|
|
@ -96,7 +96,7 @@ func (fs *Filters) NotifyWatchers(env *Envelope, messageCode uint64) {
|
|||
}
|
||||
fs.mutex.RUnlock() // we need to unlock before calling addDecryptedMessage
|
||||
|
||||
if msg != nil {
|
||||
if msg != nil && fs.whisper != nil {
|
||||
fs.whisper.addDecryptedMessage(msg)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,25 +16,17 @@
|
|||
|
||||
package whisperv5
|
||||
|
||||
/*
|
||||
import "testing"
|
||||
|
||||
var topicXxxxxxxxxxxTests = []struct {
|
||||
topic TopicType
|
||||
str string
|
||||
}{
|
||||
{topic: TopicType{0x00, 0x00, 0x00, 0x00}, str: "0x00000000"},
|
||||
{topic: TopicType{0x00, 0x7f, 0x80, 0xff}, str: "0x007f80ff"},
|
||||
{topic: TopicType{0xff, 0x80, 0x7f, 0x00}, str: "0xff807f00"},
|
||||
{topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, str: "0xf26e7779"},
|
||||
}
|
||||
func TestFilters(x *testing.T) {
|
||||
filters := NewFilters(nil)
|
||||
f := Filter{}
|
||||
filters.Install(f)
|
||||
i := filters.Install(f)
|
||||
if i == 0 {
|
||||
x.Errorf("failed install")
|
||||
return
|
||||
}
|
||||
|
||||
func TestXxxxxxxxxxxx(x *testing.T) {
|
||||
for i, tst := range topicStringTests {
|
||||
s := tst.topic.String()
|
||||
if s != tst.str {
|
||||
x.Errorf("failed test %d: have %s, want %s.", i, s, tst.str)
|
||||
}
|
||||
}
|
||||
// todo: test Install, Uninstall, Get
|
||||
}
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -130,7 +130,7 @@ func (msg *SentMessage) appendPadding(params *MessageParams) {
|
|||
panic("please fix the padding algorithm before releasing new version")
|
||||
}
|
||||
buf := make([]byte, padSize)
|
||||
mrand.Read(buf[1:])
|
||||
randomize(buf[1:]) // change to: err = mrand.Read(buf[1:])
|
||||
buf[0] = byte(padSize)
|
||||
if params.Padding != nil {
|
||||
copy(buf[1:], params.Padding)
|
||||
|
|
@ -360,3 +360,19 @@ func (msg *ReceivedMessage) hash() []byte {
|
|||
}
|
||||
return crypto.Keccak256(msg.Raw)
|
||||
}
|
||||
|
||||
// rand.Rand provides a Read method in Go 1.7 and later,
|
||||
// but we can't use it yet.
|
||||
func randomize(b []byte) {
|
||||
cnt := 0
|
||||
val := mrand.Int63()
|
||||
for n := 0; n < len(b); n++ {
|
||||
b[n] = byte(val)
|
||||
val >>= 8
|
||||
cnt++
|
||||
if cnt >= 7 {
|
||||
cnt = 0
|
||||
val = mrand.Int63()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,16 +30,13 @@ func copyFromBuf(dst []byte, src []byte, beg int) int {
|
|||
return beg + len(dst)
|
||||
}
|
||||
|
||||
func generateMessageParams() (*MessageParams, error) {
|
||||
func generateMessageParams() (*MessageParams, err error) {
|
||||
buf := make([]byte, 1024)
|
||||
_, err := rand.Read(buf)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
randomize(buf)
|
||||
sz := rand.Intn(400)
|
||||
|
||||
var p MessageParams
|
||||
p.TTL = uint32(rand.Intn(1024))
|
||||
sz := rand.Intn(400)
|
||||
p.Payload = make([]byte, sz)
|
||||
p.Padding = make([]byte, padSizeLimitUpper)
|
||||
p.KeySym = make([]byte, aesKeyLength)
|
||||
|
|
@ -49,7 +46,6 @@ func generateMessageParams() (*MessageParams, error) {
|
|||
b = copyFromBuf(p.Padding, buf, b)
|
||||
b = copyFromBuf(p.KeySym, buf, b)
|
||||
p.Topic = BytesToTopic(buf[b:])
|
||||
|
||||
p.Src, err = crypto.GenerateKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -184,16 +180,8 @@ func TestMessageSeal(x *testing.T) {
|
|||
params.TTL = 1
|
||||
aesnonce := make([]byte, 12)
|
||||
salt := make([]byte, 12)
|
||||
_, err = rand.Read(aesnonce)
|
||||
if err != nil {
|
||||
x.Errorf("failed generate aesnonce with seed %d: %s.", seed, err)
|
||||
return
|
||||
}
|
||||
_, err = rand.Read(salt)
|
||||
if err != nil {
|
||||
x.Errorf("failed generate salt with seed %d: %s.", seed, err)
|
||||
return
|
||||
}
|
||||
randomize(aesnonce)
|
||||
randomize(salt)
|
||||
|
||||
env := NewEnvelope(params.TTL, params.Topic, salt, aesnonce, msg)
|
||||
if err != nil {
|
||||
|
|
@ -219,7 +207,7 @@ func TestMessageSeal(x *testing.T) {
|
|||
env.Seal(params)
|
||||
env.calculatePoW(0)
|
||||
pow = env.PoW()
|
||||
if pow < 1000 {
|
||||
if pow < 2*target {
|
||||
// this depends on deterministic choice of seed (1976726903)
|
||||
x.Errorf("failed Wrap with seed %d: pow too small %f.", seed, pow)
|
||||
return
|
||||
|
|
|
|||
Loading…
Reference in a new issue