diff --git a/whisper/whisperv6/message.go b/whisper/whisperv6/message.go index 63bcdd85ea..fa16445916 100644 --- a/whisper/whisperv6/message.go +++ b/whisper/whisperv6/message.go @@ -123,6 +123,8 @@ func (msg *sentMessage) appendPadding(params *MessageParams) error { rawSize := len(params.Payload) + 1 if params.Src != nil { rawSize += signatureLength + } else { + rawSize += AESNonceLength } odd := rawSize % padSizeLimit diff --git a/whisper/whisperv6/message_test.go b/whisper/whisperv6/message_test.go index 281a852d67..297d7f13c6 100644 --- a/whisper/whisperv6/message_test.go +++ b/whisper/whisperv6/message_test.go @@ -416,3 +416,27 @@ func TestPadding(t *testing.T) { singlePaddingTest(t, n) } } + +func TestPaddingAppendedToSymMessages(t *testing.T) { + params := &MessageParams{ + Payload: make([]byte, 246), + KeySym: make([]byte, aesKeyLength), + } + + // Simulate a message with a payload just under 256 so that + // payload + flag + aesnonce > 256. Check that the result + // is padded on the next 256 boundary. + msg := sentMessage{} + msg.Raw = make([]byte, len(params.Payload)+1+AESNonceLength) + + err := msg.appendPadding(params) + + if err != nil { + t.Fatalf("Error appending padding to message %v", err) + return + } + + if len(msg.Raw) != 512 { + t.Errorf("Invalid size %d != 512", len(msg.Raw)) + } +}