During env open check for pub error which indicated unencrypted payload.

This commit is contained in:
obscuren 2014-12-15 21:54:34 +01:00
parent 52ca80bdd2
commit 54605d8c8e
2 changed files with 7 additions and 2 deletions

View File

@ -11,6 +11,7 @@ import (
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/ethutil" "github.com/ethereum/go-ethereum/ethutil"
"github.com/ethereum/go-ethereum/rlp" "github.com/ethereum/go-ethereum/rlp"
"github.com/obscuren/ecies"
) )
const ( const (
@ -76,7 +77,10 @@ func (self *Envelope) Open(prv *ecdsa.PrivateKey) (msg *Message, err error) {
message.Payload = data[dataStart:] message.Payload = data[dataStart:]
if prv != nil { if prv != nil {
message.Payload, err = crypto.Decrypt(prv, message.Payload) message.Payload, err = crypto.Decrypt(prv, message.Payload)
if err != nil { switch err {
case ecies.ErrInvalidPublicKey: // Payload isn't encrypted
return &message, err
default:
return nil, fmt.Errorf("unable to open envelope. Decrypt failed: %v", err) return nil, fmt.Errorf("unable to open envelope. Decrypt failed: %v", err)
} }
} }

View File

@ -12,6 +12,7 @@ import (
"github.com/ethereum/go-ethereum/event/filter" "github.com/ethereum/go-ethereum/event/filter"
"github.com/ethereum/go-ethereum/logger" "github.com/ethereum/go-ethereum/logger"
"github.com/ethereum/go-ethereum/p2p" "github.com/ethereum/go-ethereum/p2p"
"github.com/obscuren/ecies"
"gopkg.in/fatih/set.v0" "gopkg.in/fatih/set.v0"
) )
@ -229,7 +230,7 @@ func (self *Whisper) envelopes() (envelopes []*Envelope) {
func (self *Whisper) postEvent(envelope *Envelope) { func (self *Whisper) postEvent(envelope *Envelope) {
for _, key := range self.keys { for _, key := range self.keys {
if message, err := envelope.Open(key); err == nil { if message, err := envelope.Open(key); err == nil || (err != nil && err == ecies.ErrInvalidPublicKey) {
// Create a custom filter? // Create a custom filter?
self.filters.Notify(filter.Generic{ self.filters.Notify(filter.Generic{
Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())), Str1: string(crypto.FromECDSA(key)), Str2: string(crypto.FromECDSAPub(message.Recover())),