Commit 62e0e180 authored by obscuren's avatar obscuren

Changed public whisper api not to reveal temporary private keys

parent bb55307a
This diff is collapsed.
...@@ -17,7 +17,7 @@ func ToQMessage(msg *whisper.Message) *Message { ...@@ -17,7 +17,7 @@ func ToQMessage(msg *whisper.Message) *Message {
return &Message{ return &Message{
ref: msg, ref: msg,
Flags: int32(msg.Flags), Flags: int32(msg.Flags),
Payload: ethutil.Bytes2Hex(msg.Payload), Payload: "0x" + ethutil.Bytes2Hex(msg.Payload),
From: ethutil.Bytes2Hex(crypto.FromECDSAPub(msg.Recover())), From: "0x" + ethutil.Bytes2Hex(crypto.FromECDSAPub(msg.Recover())),
} }
} }
...@@ -41,32 +41,41 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr ...@@ -41,32 +41,41 @@ func (self *Whisper) Post(payload []string, to, from string, topics []string, pr
data = append(data, fromHex(d)...) data = append(data, fromHex(d)...)
} }
msg := whisper.NewMessage(data) pk := crypto.ToECDSAPub(fromHex(from))
envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{ if key := self.Whisper.GetIdentity(pk); key != nil {
Ttl: time.Duration(ttl) * time.Second, msg := whisper.NewMessage(data)
To: crypto.ToECDSAPub(fromHex(to)), envelope, err := msg.Seal(time.Duration(priority*100000), whisper.Opts{
From: crypto.ToECDSA(fromHex(from)), Ttl: time.Duration(ttl) * time.Second,
Topics: whisper.TopicsFromString(topics...), To: crypto.ToECDSAPub(fromHex(to)),
}) From: key,
if err != nil { Topics: whisper.TopicsFromString(topics...),
qlogger.Infoln(err) })
// handle error
return if err != nil {
} qlogger.Infoln(err)
// handle error
return
}
if err := self.Whisper.Send(envelope); err != nil { if err := self.Whisper.Send(envelope); err != nil {
qlogger.Infoln(err) qlogger.Infoln(err)
// handle error // handle error
return return
}
} else {
qlogger.Infoln("unmatched pub / priv for seal")
} }
} }
func (self *Whisper) NewIdentity() string { func (self *Whisper) NewIdentity() string {
return toHex(self.Whisper.NewIdentity().D.Bytes()) key := self.Whisper.NewIdentity()
return toHex(crypto.FromECDSAPub(&key.PublicKey))
} }
func (self *Whisper) HasIdentity(key string) bool { func (self *Whisper) HasIdentity(key string) bool {
return self.Whisper.HasIdentity(crypto.ToECDSA(fromHex(key))) return self.Whisper.HasIdentity(crypto.ToECDSAPub(fromHex(key)))
} }
func (self *Whisper) Watch(opts map[string]interface{}, view *qml.Common) int { func (self *Whisper) Watch(opts map[string]interface{}, view *qml.Common) int {
......
...@@ -60,7 +60,7 @@ type Whisper struct { ...@@ -60,7 +60,7 @@ type Whisper struct {
quit chan struct{} quit chan struct{}
keys []*ecdsa.PrivateKey keys map[string]*ecdsa.PrivateKey
} }
func New() *Whisper { func New() *Whisper {
...@@ -69,6 +69,7 @@ func New() *Whisper { ...@@ -69,6 +69,7 @@ func New() *Whisper {
filters: filter.New(), filters: filter.New(),
expiry: make(map[uint32]*set.SetNonTS), expiry: make(map[uint32]*set.SetNonTS),
quit: make(chan struct{}), quit: make(chan struct{}),
keys: make(map[string]*ecdsa.PrivateKey),
} }
whisper.filters.Start() whisper.filters.Start()
...@@ -101,18 +102,18 @@ func (self *Whisper) NewIdentity() *ecdsa.PrivateKey { ...@@ -101,18 +102,18 @@ func (self *Whisper) NewIdentity() *ecdsa.PrivateKey {
if err != nil { if err != nil {
panic(err) panic(err)
} }
self.keys = append(self.keys, key)
self.keys[string(crypto.FromECDSAPub(&key.PublicKey))] = key
return key return key
} }
func (self *Whisper) HasIdentity(key *ecdsa.PrivateKey) bool { func (self *Whisper) HasIdentity(key *ecdsa.PublicKey) bool {
for _, key := range self.keys { return self.keys[string(crypto.FromECDSAPub(key))] != nil
if key.D.Cmp(key.D) == 0 { }
return true
} func (self *Whisper) GetIdentity(key *ecdsa.PublicKey) *ecdsa.PrivateKey {
} return self.keys[string(crypto.FromECDSAPub(key))]
return false
} }
func (self *Whisper) Watch(opts Filter) int { func (self *Whisper) Watch(opts Filter) int {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment