mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-27 15:16:43 +00:00
whisper: padding refactored, tests fixed
This commit is contained in:
parent
69ec137b69
commit
75909a1694
9 changed files with 119 additions and 62 deletions
|
|
@ -492,10 +492,9 @@ func sendMsg(payload []byte) common.Hash {
|
|||
WorkTime: uint32(*argWorkTime),
|
||||
}
|
||||
|
||||
msg := whisper.NewSentMessage(¶ms)
|
||||
if msg == nil {
|
||||
fmt.Printf("failed to create new message (OS level error)")
|
||||
os.Exit(0)
|
||||
msg, err := whisper.NewSentMessage(¶ms)
|
||||
if err != nil {
|
||||
utils.Fatalf("failed to create new message: %s", err)
|
||||
}
|
||||
envelope, err := msg.Wrap(¶ms)
|
||||
if err != nil {
|
||||
|
|
@ -625,9 +624,9 @@ func requestExpiredMessagesLoop() {
|
|||
params.Src = nodeid
|
||||
params.WorkTime = 5
|
||||
|
||||
msg := whisper.NewSentMessage(¶ms)
|
||||
if msg == nil {
|
||||
utils.Fatalf("failed to create new message (OS level error)")
|
||||
msg, err := whisper.NewSentMessage(¶ms)
|
||||
if err != nil {
|
||||
utils.Fatalf("failed to create new message: %s", err)
|
||||
}
|
||||
env, err := msg.Wrap(¶ms)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -67,7 +67,10 @@ func generateEnvelope(t *testing.T) *whisper.Envelope {
|
|||
WorkTime: 2,
|
||||
}
|
||||
|
||||
msg := whisper.NewSentMessage(params)
|
||||
msg, err := whisper.NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -189,7 +192,10 @@ func createRequest(t *testing.T, p *ServerTestParams) *whisper.Envelope {
|
|||
Src: p.key,
|
||||
}
|
||||
|
||||
msg := whisper.NewSentMessage(params)
|
||||
msg, err := whisper.NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to wrap with seed %d: %s.", seed, err)
|
||||
|
|
|
|||
|
|
@ -354,9 +354,9 @@ func (api *PublicWhisperAPI) Post(args PostArgs) error {
|
|||
}
|
||||
|
||||
// encrypt and send
|
||||
message := NewSentMessage(¶ms)
|
||||
if message == nil {
|
||||
return errors.New("post: failed create new message, probably due to failed rand function (OS level)")
|
||||
message, err := NewSentMessage(¶ms)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
envelope, err := message.Wrap(¶ms)
|
||||
if err != nil {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ func BenchmarkEncryptionSym(b *testing.B) {
|
|||
}
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
_, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Errorf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -62,7 +62,7 @@ func BenchmarkEncryptionAsym(b *testing.B) {
|
|||
params.Dst = &key.PublicKey
|
||||
|
||||
for i := 0; i < b.N; i++ {
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
_, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -77,7 +77,7 @@ func BenchmarkDecryptionSymValid(b *testing.B) {
|
|||
if err != nil {
|
||||
b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -99,7 +99,7 @@ func BenchmarkDecryptionSymInvalid(b *testing.B) {
|
|||
if err != nil {
|
||||
b.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -128,7 +128,7 @@ func BenchmarkDecryptionAsymValid(b *testing.B) {
|
|||
f := Filter{KeyAsym: key}
|
||||
params.KeySym = nil
|
||||
params.Dst = &key.PublicKey
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -155,7 +155,7 @@ func BenchmarkDecryptionAsymInvalid(b *testing.B) {
|
|||
}
|
||||
params.KeySym = nil
|
||||
params.Dst = &key.PublicKey
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -197,7 +197,7 @@ func BenchmarkPoW(b *testing.B) {
|
|||
|
||||
for i := 0; i < b.N; i++ {
|
||||
increment(params.Payload)
|
||||
msg := NewSentMessage(params)
|
||||
msg, _ := NewSentMessage(params)
|
||||
_, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
b.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
|
|||
|
|
@ -179,7 +179,10 @@ func TestMatchEnvelope(t *testing.T) {
|
|||
params.Topic[0] = 0xFF // ensure mismatch
|
||||
|
||||
// mismatch with pseudo-random data
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -197,7 +200,10 @@ func TestMatchEnvelope(t *testing.T) {
|
|||
i := mrand.Int() % 4
|
||||
fsym.Topics[i] = params.Topic[:]
|
||||
fasym.Topics[i] = params.Topic[:]
|
||||
msg = NewSentMessage(params)
|
||||
msg, err = NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err = msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap() with seed %d: %s.", seed, err)
|
||||
|
|
@ -245,7 +251,10 @@ func TestMatchEnvelope(t *testing.T) {
|
|||
}
|
||||
params.KeySym = nil
|
||||
params.Dst = &key.PublicKey
|
||||
msg = NewSentMessage(params)
|
||||
msg, err = NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err = msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap() with seed %d: %s.", seed, err)
|
||||
|
|
@ -323,12 +332,14 @@ func TestMatchMessageSym(t *testing.T) {
|
|||
params.KeySym = f.KeySym
|
||||
params.Topic = BytesToTopic(f.Topics[index])
|
||||
|
||||
sentMessage := NewSentMessage(params)
|
||||
sentMessage, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := sentMessage.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
}
|
||||
|
||||
msg := env.Open(f)
|
||||
if msg == nil {
|
||||
t.Fatalf("failed Open with seed %d.", seed)
|
||||
|
|
@ -419,12 +430,14 @@ func TestMatchMessageAsym(t *testing.T) {
|
|||
keySymOrig := params.KeySym
|
||||
params.KeySym = nil
|
||||
|
||||
sentMessage := NewSentMessage(params)
|
||||
sentMessage, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := sentMessage.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
}
|
||||
|
||||
msg := env.Open(f)
|
||||
if msg == nil {
|
||||
t.Fatalf("failed to open with seed %d.", seed)
|
||||
|
|
@ -506,7 +519,10 @@ func generateCompatibeEnvelope(t *testing.T, f *Filter) *Envelope {
|
|||
|
||||
params.KeySym = f.KeySym
|
||||
params.Topic = BytesToTopic(f.Topics[2])
|
||||
sentMessage := NewSentMessage(params)
|
||||
sentMessage, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := sentMessage.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -678,7 +694,10 @@ func TestVariableTopics(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import (
|
|||
crand "crypto/rand"
|
||||
"encoding/binary"
|
||||
"errors"
|
||||
"strconv"
|
||||
|
||||
"github.com/ethereum/go-ethereum/common"
|
||||
"github.com/ethereum/go-ethereum/crypto"
|
||||
|
|
@ -86,17 +87,16 @@ func (msg *ReceivedMessage) isAsymmetricEncryption() bool {
|
|||
}
|
||||
|
||||
// NewMessage creates and initializes a non-signed, non-encrypted Whisper message.
|
||||
func NewSentMessage(params *MessageParams) *SentMessage {
|
||||
func NewSentMessage(params *MessageParams) (*SentMessage, error) {
|
||||
msg := SentMessage{}
|
||||
msg.Raw = make([]byte, 1, len(params.Payload)+len(params.Payload)+signatureLength+padSizeLimit)
|
||||
msg.Raw = make([]byte, 1, len(params.Payload)+len(params.Padding)+signatureLength+padSizeLimit)
|
||||
msg.Raw[0] = 0 // set all the flags to zero
|
||||
err := msg.appendPadding(params)
|
||||
if err != nil {
|
||||
log.Error("failed to create NewSentMessage", "err", err)
|
||||
return nil
|
||||
return nil, err
|
||||
}
|
||||
msg.Raw = append(msg.Raw, params.Payload...)
|
||||
return &msg
|
||||
return &msg, nil
|
||||
}
|
||||
|
||||
// getSizeOfLength returns the number of bytes necessary to encode the entire size padding (including these bytes)
|
||||
|
|
@ -166,8 +166,8 @@ func (msg *SentMessage) appendPadding(params *MessageParams) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if !validateSymmetricKey(buf) {
|
||||
return errors.New("failed to generate random padding")
|
||||
if totalPadSize > 6 && !validateSymmetricKey(buf) {
|
||||
return errors.New("failed to generate random padding of size " + strconv.Itoa(totalPadSize))
|
||||
}
|
||||
buf[0] = byte(totalPadSize)
|
||||
msg.Raw = append(msg.Raw, buf...)
|
||||
|
|
|
|||
|
|
@ -73,11 +73,12 @@ func singleMessageTest(t *testing.T, symmetric bool) {
|
|||
}
|
||||
|
||||
text := make([]byte, 0, 512)
|
||||
steg := make([]byte, 0, 512)
|
||||
text = append(text, params.Payload...)
|
||||
steg = append(steg, params.Padding...)
|
||||
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -98,10 +99,6 @@ func singleMessageTest(t *testing.T, symmetric bool) {
|
|||
t.Fatalf("failed to validate with seed %d.", seed)
|
||||
}
|
||||
|
||||
padsz := len(decrypted.Padding)
|
||||
if !bytes.Equal(steg[:padsz], decrypted.Padding) {
|
||||
t.Fatalf("failed with seed %d: compare padding.", seed)
|
||||
}
|
||||
if !bytes.Equal(text, decrypted.Payload) {
|
||||
t.Fatalf("failed with seed %d: compare payload.", seed)
|
||||
}
|
||||
|
|
@ -136,7 +133,10 @@ func TestMessageWrap(t *testing.T) {
|
|||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.TTL = 1
|
||||
params.WorkTime = 12
|
||||
params.PoW = target
|
||||
|
|
@ -151,7 +151,10 @@ func TestMessageWrap(t *testing.T) {
|
|||
}
|
||||
|
||||
// set PoW target too high, expect error
|
||||
msg2 := NewSentMessage(params)
|
||||
msg2, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.TTL = 1000000
|
||||
params.WorkTime = 1
|
||||
params.PoW = 10000000.0
|
||||
|
|
@ -171,7 +174,10 @@ func TestMessageSeal(t *testing.T) {
|
|||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.TTL = 1
|
||||
aesnonce := make([]byte, 12)
|
||||
mrand.Read(aesnonce)
|
||||
|
|
@ -230,11 +236,12 @@ func singleEnvelopeOpenTest(t *testing.T, symmetric bool) {
|
|||
}
|
||||
|
||||
text := make([]byte, 0, 512)
|
||||
steg := make([]byte, 0, 512)
|
||||
text = append(text, params.Payload...)
|
||||
steg = append(steg, params.Padding...)
|
||||
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -246,10 +253,6 @@ func singleEnvelopeOpenTest(t *testing.T, symmetric bool) {
|
|||
t.Fatalf("failed to open with seed %d.", seed)
|
||||
}
|
||||
|
||||
padsz := len(decrypted.Padding)
|
||||
if !bytes.Equal(steg[:padsz], decrypted.Padding) {
|
||||
t.Fatalf("failed with seed %d: compare padding.", seed)
|
||||
}
|
||||
if !bytes.Equal(text, decrypted.Payload) {
|
||||
t.Fatalf("failed with seed %d: compare payload.", seed)
|
||||
}
|
||||
|
|
@ -285,7 +288,10 @@ func TestEncryptWithZeroKey(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.KeySym = make([]byte, aesKeyLength)
|
||||
_, err = msg.Wrap(params)
|
||||
if err == nil {
|
||||
|
|
@ -296,7 +302,10 @@ func TestEncryptWithZeroKey(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg = NewSentMessage(params)
|
||||
msg, err = NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.KeySym = make([]byte, 0)
|
||||
_, err = msg.Wrap(params)
|
||||
if err == nil {
|
||||
|
|
@ -307,7 +316,10 @@ func TestEncryptWithZeroKey(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg = NewSentMessage(params)
|
||||
msg, err = NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
params.KeySym = nil
|
||||
_, err = msg.Wrap(params)
|
||||
if err == nil {
|
||||
|
|
@ -322,7 +334,10 @@ func TestRlpEncode(t *testing.T) {
|
|||
if err != nil {
|
||||
t.Fatalf("failed generateMessageParams with seed %d: %s.", seed, err)
|
||||
}
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("wrapped with zero key, seed: %d.", seed)
|
||||
|
|
@ -362,7 +377,10 @@ func singlePaddingTest(t *testing.T, padSize int) {
|
|||
t.Fatalf("padding is not copied as expected with seed %d and sz=%d:\n[%x]\n[%x].", seed, padSize, pad, params.Padding)
|
||||
}
|
||||
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to wrap, seed: %d and sz=%d.", seed, padSize)
|
||||
|
|
|
|||
|
|
@ -265,7 +265,10 @@ func sendMsg(t *testing.T, expected bool, id int) {
|
|||
opt.Payload = opt.Payload[1:]
|
||||
}
|
||||
|
||||
msg := NewSentMessage(&opt)
|
||||
msg, err := NewSentMessage(&opt)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
envelope, err := msg.Wrap(&opt)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to seal message: %s", err)
|
||||
|
|
@ -286,7 +289,10 @@ func TestPeerBasic(t *testing.T) {
|
|||
}
|
||||
|
||||
params.PoW = 0.001
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d.", seed)
|
||||
|
|
|
|||
|
|
@ -455,7 +455,10 @@ func TestExpiry(t *testing.T) {
|
|||
}
|
||||
|
||||
params.TTL = 1
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -515,7 +518,10 @@ func TestCustomization(t *testing.T) {
|
|||
params.Topic = BytesToTopic(f.Topics[2])
|
||||
params.PoW = smallPoW
|
||||
params.TTL = 3600 * 24 // one day
|
||||
msg := NewSentMessage(params)
|
||||
msg, err := NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err := msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
@ -533,7 +539,10 @@ func TestCustomization(t *testing.T) {
|
|||
}
|
||||
|
||||
params.TTL++
|
||||
msg = NewSentMessage(params)
|
||||
msg, err = NewSentMessage(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to create new message with seed %d: %s.", seed, err)
|
||||
}
|
||||
env, err = msg.Wrap(params)
|
||||
if err != nil {
|
||||
t.Fatalf("failed Wrap with seed %d: %s.", seed, err)
|
||||
|
|
|
|||
Loading…
Reference in a new issue