diff --git a/whisper/whisperv6/message.go b/whisper/whisperv6/message.go index fa16445916..f8df50336e 100644 --- a/whisper/whisperv6/message.go +++ b/whisper/whisperv6/message.go @@ -123,7 +123,9 @@ func (msg *sentMessage) appendPadding(params *MessageParams) error { rawSize := len(params.Payload) + 1 if params.Src != nil { rawSize += signatureLength - } else { + } + + if params.KeySym != nil { rawSize += AESNonceLength } odd := rawSize % padSizeLimit diff --git a/whisper/whisperv6/message_test.go b/whisper/whisperv6/message_test.go index 297d7f13c6..c90bcc01ed 100644 --- a/whisper/whisperv6/message_test.go +++ b/whisper/whisperv6/message_test.go @@ -440,3 +440,35 @@ func TestPaddingAppendedToSymMessages(t *testing.T) { t.Errorf("Invalid size %d != 512", len(msg.Raw)) } } + +func TestPaddingAppendedToSymMessagesWithSignature(t *testing.T) { + params := &MessageParams{ + Payload: make([]byte, 246), + KeySym: make([]byte, aesKeyLength), + } + + pSrc, err := crypto.GenerateKey() + + if err != nil { + t.Fatalf("Error creating the signature key %v", err) + return + } + params.Src = pSrc + + // 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+signatureLength) + + 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)) + } +}