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
|
fs.mutex.RUnlock() // we need to unlock before calling addDecryptedMessage
|
||||||
|
|
||||||
if msg != nil {
|
if msg != nil && fs.whisper != nil {
|
||||||
fs.whisper.addDecryptedMessage(msg)
|
fs.whisper.addDecryptedMessage(msg)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,25 +16,17 @@
|
||||||
|
|
||||||
package whisperv5
|
package whisperv5
|
||||||
|
|
||||||
/*
|
|
||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
var topicXxxxxxxxxxxTests = []struct {
|
func TestFilters(x *testing.T) {
|
||||||
topic TopicType
|
filters := NewFilters(nil)
|
||||||
str string
|
f := Filter{}
|
||||||
}{
|
filters.Install(f)
|
||||||
{topic: TopicType{0x00, 0x00, 0x00, 0x00}, str: "0x00000000"},
|
i := filters.Install(f)
|
||||||
{topic: TopicType{0x00, 0x7f, 0x80, 0xff}, str: "0x007f80ff"},
|
if i == 0 {
|
||||||
{topic: TopicType{0xff, 0x80, 0x7f, 0x00}, str: "0xff807f00"},
|
x.Errorf("failed install")
|
||||||
{topic: TopicType{0xf2, 0x6e, 0x77, 0x79}, str: "0xf26e7779"},
|
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")
|
panic("please fix the padding algorithm before releasing new version")
|
||||||
}
|
}
|
||||||
buf := make([]byte, padSize)
|
buf := make([]byte, padSize)
|
||||||
mrand.Read(buf[1:])
|
randomize(buf[1:]) // change to: err = mrand.Read(buf[1:])
|
||||||
buf[0] = byte(padSize)
|
buf[0] = byte(padSize)
|
||||||
if params.Padding != nil {
|
if params.Padding != nil {
|
||||||
copy(buf[1:], params.Padding)
|
copy(buf[1:], params.Padding)
|
||||||
|
|
@ -360,3 +360,19 @@ func (msg *ReceivedMessage) hash() []byte {
|
||||||
}
|
}
|
||||||
return crypto.Keccak256(msg.Raw)
|
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)
|
return beg + len(dst)
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateMessageParams() (*MessageParams, error) {
|
func generateMessageParams() (*MessageParams, err error) {
|
||||||
buf := make([]byte, 1024)
|
buf := make([]byte, 1024)
|
||||||
_, err := rand.Read(buf)
|
randomize(buf)
|
||||||
if err != nil {
|
sz := rand.Intn(400)
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
var p MessageParams
|
var p MessageParams
|
||||||
p.TTL = uint32(rand.Intn(1024))
|
p.TTL = uint32(rand.Intn(1024))
|
||||||
sz := rand.Intn(400)
|
|
||||||
p.Payload = make([]byte, sz)
|
p.Payload = make([]byte, sz)
|
||||||
p.Padding = make([]byte, padSizeLimitUpper)
|
p.Padding = make([]byte, padSizeLimitUpper)
|
||||||
p.KeySym = make([]byte, aesKeyLength)
|
p.KeySym = make([]byte, aesKeyLength)
|
||||||
|
|
@ -49,7 +46,6 @@ func generateMessageParams() (*MessageParams, error) {
|
||||||
b = copyFromBuf(p.Padding, buf, b)
|
b = copyFromBuf(p.Padding, buf, b)
|
||||||
b = copyFromBuf(p.KeySym, buf, b)
|
b = copyFromBuf(p.KeySym, buf, b)
|
||||||
p.Topic = BytesToTopic(buf[b:])
|
p.Topic = BytesToTopic(buf[b:])
|
||||||
|
|
||||||
p.Src, err = crypto.GenerateKey()
|
p.Src, err = crypto.GenerateKey()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
@ -184,16 +180,8 @@ func TestMessageSeal(x *testing.T) {
|
||||||
params.TTL = 1
|
params.TTL = 1
|
||||||
aesnonce := make([]byte, 12)
|
aesnonce := make([]byte, 12)
|
||||||
salt := make([]byte, 12)
|
salt := make([]byte, 12)
|
||||||
_, err = rand.Read(aesnonce)
|
randomize(aesnonce)
|
||||||
if err != nil {
|
randomize(salt)
|
||||||
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
|
|
||||||
}
|
|
||||||
|
|
||||||
env := NewEnvelope(params.TTL, params.Topic, salt, aesnonce, msg)
|
env := NewEnvelope(params.TTL, params.Topic, salt, aesnonce, msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -219,7 +207,7 @@ func TestMessageSeal(x *testing.T) {
|
||||||
env.Seal(params)
|
env.Seal(params)
|
||||||
env.calculatePoW(0)
|
env.calculatePoW(0)
|
||||||
pow = env.PoW()
|
pow = env.PoW()
|
||||||
if pow < 1000 {
|
if pow < 2*target {
|
||||||
// this depends on deterministic choice of seed (1976726903)
|
// this depends on deterministic choice of seed (1976726903)
|
||||||
x.Errorf("failed Wrap with seed %d: pow too small %f.", seed, pow)
|
x.Errorf("failed Wrap with seed %d: pow too small %f.", seed, pow)
|
||||||
return
|
return
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue