Skip to content

Commit 6219a33

Browse files
committed
whisper: filereader mode introduced to wnode
1 parent a76e46e commit 6219a33

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

cmd/wnode/main.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ var (
8686
asymmetricMode = flag.Bool("asym", false, "use asymmetric encryption")
8787
generateKey = flag.Bool("generatekey", false, "generate and show the private key")
8888
fileExMode = flag.Bool("fileexchange", false, "file exchange mode")
89+
fileReader = flag.Bool("filereader", false, "load and decrypt messages saved as files, display as plain text")
8990
testMode = flag.Bool("test", false, "use of predefined parameters for diagnostics (password, etc.)")
9091
echoMode = flag.Bool("echo", false, "echo mode: prints some arguments for diagnostics")
9192

@@ -433,6 +434,8 @@ func run() {
433434
requestExpiredMessagesLoop()
434435
} else if *fileExMode {
435436
sendFilesLoop()
437+
} else if *fileReader {
438+
fileReaderLoop()
436439
} else {
437440
sendLoop()
438441
}
@@ -483,6 +486,40 @@ func sendFilesLoop() {
483486
}
484487
}
485488

489+
func fileReaderLoop() {
490+
watcher1 := shh.GetFilter(symFilterID)
491+
watcher2 := shh.GetFilter(asymFilterID)
492+
if watcher1 == nil && watcher2 == nil {
493+
fmt.Println("Error: neither symmetric nor asymmetric filter is installed")
494+
close(done)
495+
return
496+
}
497+
498+
for {
499+
s := scanLine("")
500+
if s == quitCommand {
501+
fmt.Println("Quit command received")
502+
close(done)
503+
return
504+
}
505+
raw, err := ioutil.ReadFile(s)
506+
if err != nil {
507+
fmt.Printf(">>> Error: %s \n", err)
508+
} else {
509+
env := whisper.Envelope{Data: raw} // the topic is zero
510+
msg := env.Open(watcher1) // force-open envelope regardless of the topic
511+
if msg == nil {
512+
msg = env.Open(watcher2)
513+
}
514+
if msg == nil {
515+
fmt.Printf(">>> Error: failed to decrypt the message \n")
516+
} else {
517+
printMessageInfo(msg)
518+
}
519+
}
520+
}
521+
}
522+
486523
func scanLine(prompt string) string {
487524
if len(prompt) > 0 {
488525
fmt.Print(prompt)

whisper/whisperv6/envelope.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,6 +208,10 @@ func (e *Envelope) OpenSymmetric(key []byte) (msg *ReceivedMessage, err error) {
208208

209209
// Open tries to decrypt an envelope, and populates the message fields in case of success.
210210
func (e *Envelope) Open(watcher *Filter) (msg *ReceivedMessage) {
211+
if watcher == nil {
212+
return nil
213+
}
214+
211215
// The API interface forbids filters doing both symmetric and asymmetric encryption.
212216
if watcher.expectsAsymmetricEncryption() && watcher.expectsSymmetricEncryption() {
213217
return nil

0 commit comments

Comments
 (0)