Giter VIP home page Giter VIP logo

pond's Introduction

Pond

Pond is in stasis, and has been for several years. I hope that some of the ideas prove useful in the future, but people should use something better polished and reviewed. I've no plans to shutdown down the default server, but new users should look elsewhere.

The code here is broken down as follows:

  • bbssig contains an implementation of the BBS group signature scheme. This is used in Pond to allow servers to reject messages from non-contacts without the server being able to identify those contacts.
  • bn256cgo contains a wrapping of Naehrig, Niederhagen and Schwabe's pairing library. This is a drop in replacement for the bn256 package from go.crypto and speeds up bbssig. See https://github.com/agl/dclxvi.
  • client contains the Pond GUI and CLI client and package for manipulating state files.
  • doc contains the https://pond.imperialviolet.org site in Jekyll format.
  • editstate contains a debugging utility for manipulating state files.
  • panda contains a library for performing shared-key exchanges. It's used by client/ to implement that functionality.
  • protos contains the protocol buffer files for client to server communication.
  • server contains the Pond server.
  • transport contains code to implement the, low-level, client to server transport protocol.

pond's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

pond's Issues

CLI does not play nicely with GNU screen

This works, but I cannot put it in a script:

$ screen
# inside screen
$ bin/client -cli
# ctrl-A d

So does this:

$ screen -d -m mail -B

and this (but it's pointless):

$ screen -d -m bin/client

But this does not work:

$ screen -d -m bin/client -cli

I think the reason is because pond CLI does some fancy thing with the terminal (I guess for security?):

$ echo help | bin/client -cli
panic: inappropriate ioctl for device

goroutine 1 [running]:
runtime.panic(0x7630a0, 0xc21001e780)
    /usr/lib/go/src/pkg/runtime/panic.c:266 +0xb6
main.(*cliClient).Start(0xc210057280)
    /home/infinity0/var/go/src/github.com/agl/pond/client/cli.go:109 +0x8b
main.main()
    /home/infinity0/var/go/src/github.com/agl/pond/client/main_linux.go:64 +0x8ba

goroutine 3 [runnable]:
os/signal.loop()
    /usr/lib/go/src/pkg/os/signal/signal_unix.go:19
created by os/signal.init路1
    /usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x31
2

whereas mail is more "normal":

$ echo x | mail -B
# shows all messages then quits without saving

Feature: Lock state file without exiting

Sometimes it may be desireable to lock the pond state file without exiting the program (e.g., when running a permanent instance of pond in a screen instance on your server / a raspberry pi).

This is probably a quick change, but I am not familiar with the Go Language.

Installable .deb with separate signature

So I've heard a few requests for installable .deb packages coupled with a separate signature file. Much like #79, I suspect that you may consider Pond too immature to release these, but it feels like a reasonable request. 馃憤 Great work.

CLI doesn't support card trick

Users who receive cards can't input them when using the command line. (As I discovered after doing the card trick using the GUI).

No retval check of unmarshal in server.go:revocation() [server crash]

Hello,

I might be wrong but I think that two code issues can be combined to crash the pond server.

a) In server.go:newAccount() we write req.Group to that file, without checking that it's a proper group key (like the Group() method does). This is not bad on its own, but it would be more defensive if the key is checked upon insertion to the file.

b) In server.go:revocation() we do:
group := account.Group() groupCopy, _ := new(bbssig.Group).Unmarshal(group.Marshal()) groupCopy.Update(revocation)
without checking the retval of Group() or Unmarshal(). I believe that if a new account is created with a corrupted key, and then a revocation is executed for that account, the Group() operation will fail and cause a nil dereference or something in the Unmarshal. If that doens't do it, then the Unmarshal will fail and cause the same in the Update(). In any case, servers might crash. Maybe.

Change order of global and local help in CLI

When you visit a message or a contact, Pond shows a help for the current object followed by the global help. This message scrolls over the screen and in the case of terminals the user only sees the global help. I assume that the help for the current object is more useful here. So I propose to change the order of the two. First show the global help followed by the help for the current object.

panic: enchant error for language: de_DE.UTF-8 (crash)

I just installed pond on my arch linux laptop (x86), did the account setup, clicked on "Compose" and it crashed, giving me the following trace:

panic: enchant error for language: de_DE.UTF-8

goroutine 1 [running]:
runtime.panic(0x83d1f40, 0x9604bee0)
    /usr/lib/go/src/pkg/runtime/panic.c:266 +0x9a
main.(*GTKUI).createWidget(0x96093240, 0x83fe3c0, 0x9aa8c000, 0x9aa8c000, 0x81eeb86)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:383 +0x2dbe
main.(*GTKUI).newWidget(0x96093240, 0xb6080938, 0x9aa8c000, 0x0, 0x0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:173 +0x49
main.(*GTKUI).createWidget(0x96093240, 0x83fbe60, 0x9aa8c060, 0x9aa8c060, 0x0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:357 +0x19e4
main.(*GTKUI).newWidget(0x96093240, 0xb6080710, 0x9aa8c060, 0xb6050000, 0x0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:173 +0x49
main.(*GTKUI).createWidget(0x96093240, 0x83fac60, 0x9aa8c0c0, 0x9aa8c0c0, 0x8076590)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:252 +0x8c6
main.(*GTKUI).newWidget(0x96093240, 0xb6057c28, 0x9aa8c0c0, 0x1, 0x9604bae8)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:173 +0x49
main.(*GTKUI).handle(0x96093240, 0x83d7040, 0x9aa768b0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:564 +0x134d
main.(*GTKUI).onAction(0x96093240)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:97 +0xed
main.func路018(0x1, 0x0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:58 +0x29
reflect.Value.call(0x838bd20, 0x9604b568, 0x130, 0x8424438, 0x4, ...)
    /usr/lib/go/src/pkg/reflect/value.go:474 +0xad5
reflect.Value.Call(0x838bd20, 0x9604b568, 0x130, 0x9608f850, 0x1, ...)
    /usr/lib/go/src/pkg/reflect/value.go:345 +0x71
github.com/agl/go-gtk/glib._go_glib_sourcefunc(0xa825d08)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/go-gtk/glib/glib.go:886 +0x1ba
github.com/agl/go-gtk/gtk._Cfunc_gtk_main(0x809b06e)
    github.com/agl/go-gtk/gtk/_obj/_cgo_defun.c:4246 +0x31
github.com/agl/go-gtk/gtk.Main()
    /home/karo/pkgs/pond-git/src/src/github.com/agl/go-gtk/gtk/gtk.go:881 +0x1b
main.(*GTKUI).Run(0x96093240)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gtk.go:78 +0x1e
main.main()
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/main_linux.go:71 +0x5fd

goroutine 3 [syscall]:
os/signal.loop()
    /usr/lib/go/src/pkg/os/signal/signal_unix.go:21 +0x1e
created by os/signal.init路1
    /usr/lib/go/src/pkg/os/signal/signal_unix.go:27 +0x31

goroutine 4 [syscall]:
runtime.goexit()
    /usr/lib/go/src/pkg/runtime/proc.c:1394

goroutine 6 [select]:
main.(*guiClient).nextEvent(0x96091380, 0x0, 0x0, 0x0, 0x0, ...)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gui.go:100 +0x50f
main.(*guiClient).composeUI(0x96091380, 0x0, 0x0, 0x7, 0x1)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gui.go:3086 +0x22a9
main.(*guiClient).mainUI(0x96091380)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gui.go:668 +0x202b
main.(*client).loadUI(0x96091380, 0x9604b578, 0x96091380)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/client.go:802 +0x7ac
created by main.(*guiClient).Start
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/gui.go:3587 +0x35

goroutine 7 [chan receive]:
github.com/agl/pond/client/disk.(*StateFile).StartWriter(0x9604cd20, 0x9aa78270, 0x9aa782a0)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/disk/disk.go:268 +0x3d
created by main.(*client).loadUI
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/client.go:786 +0x6f8

goroutine 8 [IO wait]:
net.runtime_pollWait(0xb6058c30, 0x72, 0x0)
    /usr/lib/go/src/pkg/runtime/netpoll.goc:116 +0x5e
net.(*pollDesc).Wait(0x9aa82238, 0x72, 0xb60578a8, 0xb)
    /usr/lib/go/src/pkg/net/fd_poll_runtime.go:81 +0x32
net.(*pollDesc).WaitRead(0x9aa82238, 0xb, 0xb60578a8)
    /usr/lib/go/src/pkg/net/fd_poll_runtime.go:86 +0x30
net.(*netFD).Read(0x9aa82200, 0x9aa735b0, 0x2, 0x2, 0x0, ...)
    /usr/lib/go/src/pkg/net/fd_unix.go:204 +0x231
net.(*conn).Read(0x9aa80088, 0x9aa735b0, 0x2, 0x2, 0x8402744, ...)
    /usr/lib/go/src/pkg/net/net.go:122 +0xa8
io.ReadAtLeast(0xb607c6f8, 0x9aa80088, 0x9aa735b0, 0x2, 0x2, ...)
    /usr/lib/go/src/pkg/io/io.go:288 +0xad
io.ReadFull(0xb607c6f8, 0x9aa80088, 0x9aa735b0, 0x2, 0x2, ...)
    /usr/lib/go/src/pkg/io/io.go:306 +0x5c
github.com/agl/pond/transport.(*Conn).read(0x9a9e9ea0, 0x9aa78480, 0x30, 0x30, 0x0, ...)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/transport/transport.go:221 +0xa8
github.com/agl/pond/transport.(*Conn).handshakeClient(0x9a9e9ea0, 0xb6059360, 0x9aa687e0, 0x9a8adbc0, 0x20, ...)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/transport/transport.go:361 +0x1ec
github.com/agl/pond/transport.(*Conn).Handshake(0x9a9e9ea0, 0x9aa80088, 0x960913ac)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/transport/transport.go:347 +0x2cb
main.(*client).dialServer(0x96091380, 0x96095300, 0x58, 0x0, 0x0, ...)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/network.go:747 +0x2b3
main.(*client).transact(0x96091380)
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/network.go:892 +0x24b
created by main.(*client).loadUI
    /home/karo/pkgs/pond-git/src/src/github.com/agl/pond/client/client.go:787 +0x70f

PANDA documentation

Documentation or a technical specification (or even a link to) for the PANDA protocol is missing.

Install on Raspberry Pi (Rasbpian) fails

This is probably not a priority right now, but I thought I'd drop this here anyway:

When I try to build pond on a raspberry pi (following the Debian Wheezy and Ubuntu 12.04 instructions) I get the following error:

pi@mailpi ~ $ go get -tags ubuntu github.com/agl/pond/client
# github.com/agl/pond/client/disk
gopkg/src/github.com/agl/pond/client/disk/tpm_linux.go:10: imported and not used: "github.com/agl/pond/client/tpm"
gopkg/src/github.com/agl/pond/client/disk/tpm_linux.go:30: undefined: tpm
gopkg/src/github.com/agl/pond/client/disk/tpm_linux.go:31: undefined: tpm
gopkg/src/github.com/agl/pond/client/disk/tpm_linux.go:34: undefined: tpm
gopkg/src/github.com/agl/pond/client/disk/tpm_linux.go:44: undefined: tpm

All dependencies are installed.

uname -a: Linux mailpi 3.10.23+ #608 PREEMPT Mon Dec 9 21:11:23 GMT 2013 armv6l GNU/Linux

Let me know if you need any further info.

Missing signature check in server.go:revocation()?

Hello,

I'm from the hackfest (?).

the server.go:revocation() function does not seem to verify the signature of the revocation message. The protobuf of the SignedRevocation message contains a signature, but I don't see it used in the code.

Fortunately because the 'from' that gets passed to getAccount() is bound to the connection (which is authenticated. specifically it seems to be the final hmac value of the auth handshake (in handshakeServer)) so this doesn't seem to allow to do unauthenticated revocations. Still good to fix i thinks

go server binds to 0.0.0.0 instead of 127.0.0.1

The pond server should instead bind to 127.0.0.1 by default...

pond@pond-dev:~$ server --init --base-directory /home/pond/go-server-base/
2013/12/21 01:52:04 Started. Listening on port 16333 with identity ...

root@pond-dev:~# netstat -tlpn
...
tcp6 0 0 :::16333 :::* LISTEN 22116/server

editstate clears revokedUs flag

The flag which indicates a contact has revoked me is cleared by running editstate on my state file (even if I don't change anything).

Subsequently, I can try to send messages to them and they fail with DELIVERY_SIGNATURE_INVALID (but pond continues to try to deliver it until I delete the message).

How is this different from bitmessage?

Please [..] feedback [...] or else use GitHub's tools.

Hi,

interesting project! I am taking the offer to leave feedback. Actually, its just a question.

So how is this different from bitmessage?

Cheers,
adrelanos

Debian Wheezy instructions

Running go get -tags ubuntu github.com/agl/pond/client on Debian Wheezy with golang-go version 1.0.2-1.1 (current stable) produces the following error:

# github.com/agl/pond/client
gopkg/src/github.com/agl/pond/client/gui.go:1877: function ends without a return statement

After upgrading golang-go to the Debian testing version, currently 1.2-2, everything works fine.

Maybe the instructions could be more a bit clear on which golang-go version is needed.

Pond crashes inside GTK on OS X 10.9 when copy/pasting

Right clicking and selecting copy/paste crashes for me deep inside GDK. This makes copying generated secrets rather difficult. The crash looks like a null pointer dereference when calling a method called "send_crossing_events" or something like that. I can get a stack trace if you can't reproduce it.

Build CLI for use on Android

This bug is a bug to track various attempts to build the Pond CLI on Android. I haven't yet attempted it but it seems like it may be possible for some ARM devices.

build failure

I'm unable to build the client or server from the current master (d7aec01) or any of its recent ancestors. I'm guessing maybe a change to the protos didn't get committed?

./client.go:876: too many arguments in call to contact.ratchet.CompleteKeyExchange
./disk.go:92: cont.GetRevokedUs undefined (type *disk.Contact has no field or method GetRevokedUs)
./disk.go:260: unknown disk.Contact field 'RevokedUs' in struct literal
./network.go:49: proto.AlsoAck undefined (type *protos.Message has no field or method AlsoAck)
./network.go:57: proto.AlsoAck undefined (type *protos.Message has no field or method AlsoAck)
./network.go:58: proto.AlsoAck undefined (type *protos.Message has no field or method AlsoAck)
./network.go:59: proto.AlsoAck undefined (type *protos.Message has no field or method AlsoAck)
./network.go:59: too many errors
./main.go:134: config.GetAllowRegistration undefined (type *"github.com/agl/pond/server/protos".Config has no field or method GetAllowRegistration)
./server.go:340: undefined: "github.com/agl/pond/protos".Reply_REGISTRATION_DISABLED
./server.go:458: unknown "github.com/agl/pond/protos".Reply field 'ExtraRevocations' in struct literal

Also, I had to get the latest ed25519/extra25519 to get it down to this many errors, and having that installed causes pre-extra25519 commits of pond to also not build.

Permit migration from one computer to another

Pond does not appear to offer an easy way to migrate from one computer to another, particularly when TPM protection has been enabled.

I know that you don't want people to backup their pond state files, but machines do die, or need re-installation on occasion, and re-establishing your contacts is a PITA that it would be nice to avoid.

Info.plist file

The attached Info.plist file, if placed inside the Mac app bundle at Pond.app/Contents/Info.plist, will enable hi-dpi/retina fonts and make the app look nicer:

CFBundleName Pond CFBundleIdentifier org.imperialviolet.pond CFBundleVersion 0.1 CFBundleAllowMixedLocalizations true CFBundleExecutable Pond CFBundleDevelopmentRegion English CFBundlePackageType APPL CFBundleSignature ???? CFBundleInfoDictionaryVersion 6.0 NSHumanReadableCopyright Copyright Pond developers 2013 CFBundleGetInfoString Pond, 漏 2013 Pond developers CFBundleDisplayName Pond NSHighResolutionCapable

Document the install process on Debian 7.1

This is what seems to be the correct way to setup pond on Debian 7.1:

apt-get install libgtk-3-dev libpango1.0-dev libgtkspell0 libgtkspell-dev
go get -v https://github.com/agl/pond/client

I have the sad panda blues though:

$ go get -v github.com/agl/pond/client
github.com/agl/pond/panda
# github.com/agl/pond/panda
Documents/src/go/src/github.com/agl/pond/panda/appengine.go:99: function ends without a return statement
Documents/src/go/src/github.com/agl/pond/panda/panda.go:187: function ends without a return statement
Documents/src/go/src/github.com/agl/pond/panda/panda.go:196: function ends without a return statement

It would be nice if the go 1.1 features weren't added until the major distros have go 1.1 support. It makes packaging pond, even for private use, difficult.

Clarifying the role of shared secrets in the user guide

The user guide (https://pond.imperialviolet.org/user.html) currently says:
"Shared secret keying involves contacting a central server (using Tor) and performing a key exchange based on the shared secret. This means that, so long as a MITM attack isn't performed against the shared secret in real time then it's secure for the future."

It would be beneficial to explicitly explain to the reader that once the initial key exchange using a shared secret has occurred, the original shared secret no longer needs to be protected/stored (e.g. the used deck of cards).

Delivery Signature Invalid

I'm running Debian stable. I followed the Ubuntu instructions at https://pond.imperialviolet.org/ to install Pond. I added someone as new contact, and coordinated a shared secret with him using a string and a date/time. He successfully sent me one message, which I acked, and deleted.

He then composed a second message, including an uploaded detachment, and I composed another message to him, also including an uploaded detachment. These messages do not seem to have been successful.

Whenever my instance of Pond transacts, I see the following log entry:

Jul 21 19:15:08: Error from server pondserver://ICYUHSAYGIXTKYKXSAHIBWEAQCTEF26WUWEPOVC764WYELCJMUPA@jb644zapje5dvgk3.onion: error from server: DELIVERY_SIGNATURE_INVALID

The message I composed is remains unsent and marked red in my client. I have not recieved someone's second message.

gui: panic: no such widget: contactsVbox-4

go version go1.2.1 linux/amd64
Pond version: commit 261faee

Crash output:

goroutine 1 [running]:
runtime.panic(0x762fa0, 0xc2101af840)
        /home/foo/go/src/pkg/runtime/panic.c:266 +0xb6
main.(*GTKUI).getWidget(0xc210065280, 0xc210142c00, 0xe, 0xc210142c00, 0xe)
        /home/foo/gopkg/src/github.com/agl/pond/client/gtk.go:522 +0xda
main.(*GTKUI).handle(0xc210065280, 0x828d60, 0xc2101630c0)
        /home/foo/gopkg/src/github.com/agl/pond/client/gtk.go:589 +0x22b0
main.(*GTKUI).onAction(0xc210065280)
        /home/foo/gopkg/src/github.com/agl/pond/client/gtk.go:98 +0xfe
main.func路018(0x1, 0x0)
        /home/foo/gopkg/src/github.com/agl/pond/client/gtk.go:59 +0x29
reflect.Value.call(0x7ac4c0, 0xc21000a790, 0x130, 0x8bb290, 0x4, ...)
        /home/foo/go/src/pkg/reflect/value.go:474 +0xe0b
reflect.Value.Call(0x7ac4c0, 0xc21000a790, 0x130, 0xc210163100, 0x1, ...)
        /home/foo/go/src/pkg/reflect/value.go:345 +0x9d
github.com/agl/go-gtk/glib._go_glib_sourcefunc(0x1efdca0)
        /home/foo/gopkg/src/github.com/agl/go-gtk/glib/glib.go:886 +0x23a
github.com/agl/go-gtk/gtk._Cfunc_gtk_main(0x45d1ba)
        github.com/agl/go-gtk/gtk/_obj/_cgo_defun.c:4246 +0x31
github.com/agl/go-gtk/gtk.Main()
        /home/foo/gopkg/src/github.com/agl/go-gtk/gtk/gtk.go:881 +0x1a
main.(*GTKUI).Run(0xc210065280)
        /home/foo/gopkg/src/github.com/agl/pond/client/gtk.go:79 +0x1a
main.main()
        /home/foo/gopkg/src/github.com/agl/pond/client/main_linux.go:71 +0x81f

goroutine 3 [syscall]:
os/signal.loop()
        /home/foo/go/src/pkg/os/signal/signal_unix.go:21 +0x1e
created by os/signal.init路1
        /home/foo/go/src/pkg/os/signal/signal_unix.go:27 +0x31

goroutine 4 [syscall]:
runtime.goexit()
        /home/foo/go/src/pkg/runtime/proc.c:1394

goroutine 6 [select]:
main.(*guiClient).nextEvent(0xc21005f280, 0x0, 0x0, 0x0, 0x0)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:99 +0x619
main.(*guiClient).showContact(0xc21005f280, 0xb767cf22b5cb6664, 0x8b9370, 0x0)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:2101 +0x1287
main.(*guiClient).newContactManual(0xc21005f280, 0xc2101d68c0, 0x7f78343d5000, 0xf, 0x47d0b9, ...)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:2456 +0x1aa1
main.func路037(0xc2101d68c0, 0xc210077000, 0x7, 0xc2101caea0, 0x828660)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:2298 +0x47
main.(*guiClient).newContactUI(0xc21005f280, 0xc2101d68c0, 0x8e4690, 0xa)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:2310 +0x1b3c
main.(*guiClient).mainUI(0xc21005f280)
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:665 +0x2c77
main.(*client).loadUI(0xc21005f280, 0xc21001e8c0, 0xc21005f280)
        /home/foo/gopkg/src/github.com/agl/pond/client/client.go:814 +0x973
created by main.(*guiClient).Start
        /home/foo/gopkg/src/github.com/agl/pond/client/gui.go:3562 +0x35

goroutine 7 [chan receive]:
github.com/agl/pond/client/disk.(*StateFile).StartWriter(0xc21009c000, 0xc2101824e0, 0xc210182540)
        /home/foo/gopkg/src/github.com/agl/pond/client/disk/disk.go:268 +0x3e
created by main.(*client).loadUI
        /home/foo/gopkg/src/github.com/agl/pond/client/client.go:798 +0x89e

goroutine 8 [select]:
main.(*client).transact(0xc21005f280)
        /home/foo/gopkg/src/github.com/agl/pond/client/network.go:878 +0x1304
created by main.(*client).loadUI
        /home/foo/gopkg/src/github.com/agl/pond/client/client.go:799 +0x8b8

File attachments do not work on OS X 10.9

When I click to add an attachment to a message pond crashes with the following stack trace:

(<unknown>:3951): GLib-GIO-ERROR **: No GSettings schemas are installed on the system
SIGTRAP: trace trap
PC=0x4e24e93
signal arrived during cgo execution

runtime.cgocall(0x40045e0, 0x5bde358)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/cgocall.c:149 +0x11b fp=0x5bde340
github.com/agl/go-gtk/gtk._Cfunc_gtk_dialog_run(0x8086230, 0x8086230)
    github.com/agl/go-gtk/gtk/_obj/_cgo_defun.c:2402 +0x31 fp=0x5bde358
github.com/agl/go-gtk/gtk.(*GtkDialog).Run(0xc21021f0c0, 0xb)
    /Users/x/gopkg/src/github.com/agl/go-gtk/gtk/gtk.go:1637 +0x38 fp=0x5bde370
main.(*GTKUI).handle(0xc21005c280, 0x43d08c0, 0xc2100d2ac0)
    /Users/x/gopkg/src/github.com/agl/pond/client/gtk.go:626 +0xb39 fp=0x5bde960
main.(*GTKUI).onAction(0xc21005c280)
    /Users/x/gopkg/src/github.com/agl/pond/client/gtk.go:97 +0xfe fp=0x5bde9d0
main.func路012(0x1, 0x0)
    /Users/x/gopkg/src/github.com/agl/pond/client/gtk.go:58 +0x29 fp=0x5bde9e0
runtime.call16(0xc21000a740, 0xc21021f0a0)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/asm_amd64.s:338 +0x32 fp=0x5bde9f8
reflect.Value.call(0x4340380, 0xc21000a740, 0x130, 0x44405b0, 0x4, ...)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/reflect/value.go:474 +0xe0b fp=0x5bdec38
reflect.Value.Call(0x4340380, 0xc21000a740, 0x130, 0xc2101ebd60, 0x1, ...)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/reflect/value.go:345 +0x9d fp=0x5bdec98
github.com/agl/go-gtk/glib._go_glib_sourcefunc(0x6836b00)
    /Users/x/gopkg/src/github.com/agl/go-gtk/glib/glib.go:887 +0x23a fp=0x5bded28
----- stack segment boundary -----
runtime.cgocallbackg1()
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/cgocall.c:296 +0xbf fp=0x5bdede8
runtime.cgocallbackg()
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/cgocall.c:266 +0x84 fp=0x5bdedf8
runtime.cgocallback_gofunc(0x406a073, 0x4005c70, 0x5bdee70)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/asm_amd64.s:711 +0x67 fp=0x5bdee08
runtime.asmcgocall(0x4005c70, 0x5bdee70)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/asm_amd64.s:618 +0x2d fp=0x5bdee10
runtime.cgocall(0x4005c70, 0x5bdee70)
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/cgocall.c:149 +0x133 fp=0x5bdee58
github.com/agl/go-gtk/gtk._Cfunc_gtk_main(0x4016a4a)
    github.com/agl/go-gtk/gtk/_obj/_cgo_defun.c:4256 +0x31 fp=0x5bdee70
github.com/agl/go-gtk/gtk.Main()
    /Users/x/gopkg/src/github.com/agl/go-gtk/gtk/gtk.go:882 +0x1a fp=0x5bdee78
main.(*GTKUI).Run(0xc21005c280)
    /Users/x/gopkg/src/github.com/agl/pond/client/gtk.go:78 +0x1a fp=0x5bdee80
main.main()
    /Users/x/gopkg/src/github.com/agl/pond/client/main_darwin.go:39 +0x34e fp=0x5bdef48
runtime.main()
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/proc.c:220 +0x11f fp=0x5bdefa0
runtime.goexit()
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/proc.c:1394 fp=0x5bdefa8

goroutine 3 [syscall]:
runtime.goexit()
    /usr/local/Cellar/go/1.2/libexec/src/pkg/runtime/proc.c:1394

goroutine 5 [select]:
main.(*guiClient).nextEvent(0xc210056280, 0x0, 0x0, 0x0, 0x0)
    /Users/x/gopkg/src/github.com/agl/pond/client/gui.go:97 +0x5a3
main.(*guiClient).composeUI(0xc210056280, 0x0, 0x0, 0x7, 0x1)
    /Users/x/gopkg/src/github.com/agl/pond/client/gui.go:2902 +0x2b30
main.(*guiClient).mainUI(0xc210056280)
    /Users/x/gopkg/src/github.com/agl/pond/client/gui.go:666 +0x2bf2
main.(*client).loadUI(0xc210056280, 0xc21001e460, 0xc210056280)
    /Users/x/gopkg/src/github.com/agl/pond/client/client.go:762 +0x871
created by main.(*guiClient).Start
    /Users/x/gopkg/src/github.com/agl/pond/client/gui.go:3347 +0x35

goroutine 6 [chan receive]:
github.com/agl/pond/client/disk.(*StateFile).StartWriter(0xc21005d410, 0xc210155840, 0xc2101558a0)
    /Users/x/gopkg/src/github.com/agl/pond/client/disk/disk.go:252 +0x3e
created by main.(*client).loadUI
    /Users/x/gopkg/src/github.com/agl/pond/client/client.go:746 +0x79c

goroutine 7 [select]:
main.(*client).transact(0xc210056280)
    /Users/x/gopkg/src/github.com/agl/pond/client/network.go:806 +0x12c1
created by main.(*client).loadUI
    /Users/x/gopkg/src/github.com/agl/pond/client/client.go:747 +0x7b6

rax     0x1
rbx     0x2
rcx     0xfc001
rdx     0x43f60
rdi     0x5b6fe00
rsi     0x10840004
rbp     0x7fff5fbfd400
rsp     0x7fff5fbfd350
r8      0x68a31c0
r9      0x68bb7b0
r10     0xce9cece9
r11     0x5f446562
r12     0x0
r13     0x1
r14     0x4e2504d
r15     0x2
rip     0x4e24e93
rflags  0x246
cs      0x2b
fs      0x0
gs      0x0

GENERATION_REVOKED?

What does GENERATION_REVOKED mean?

From my activity log:
Jan 27 timeremoved: Error from server pondserver://onionaddressremoved: error from server: GENERATION_REVOKED

automatic deletion in cli

The GUI deletes messages after a week (unless the retain flag is set).

The CLI does not do this yet.

Pond does not atomically update its state file on termination

This can result in the truncation of the Pond state file to zero bytes.

See coruus@d3252f3 for a possible solution.

I have explicitly done things backwards from the usual sequence of ops used for atomic file operations; failure at some point in the state-saving process may result in an additional temporary Pond file being present, but it will never result in the new Pond state not being saved (if it is possible).

One other solution would be to open the file O_RW, read the current state, seek to the end of the file, append the current state there, write the new state at the beginning of the file, and then truncate the file to the length of the new state... It's not clear to me that this has much better security properties than what I'm presently doing (aside from leaving no possibility of an additional file that a user may be unaware of). (And it likely requires an fsync, or opening with O_SYNC, to actually be safe on many OSes.)

(Note that the pull request states that it is untested. In the intervening few hours, I have checked that it at least saves and restores state correctly (I think). I haven't had time yet to test the condition under which the bug is seen.)

Debian packages

I think it would be great to have deb packages for Pond. The only constructive information about packaging Go projects I found is this: https://wiki.debian.org/MichaelStapelberg/GoPackaging#Example_binary_.2B-_library_packaging

Here is an example package: http://anonscm.debian.org/gitweb/?p=collab-maint/dh-golang.git;a=tree;f=example;h=67ced007e5776cdf19e2682138a11a7abba2b2b5;hb=HEAD

I don't know to much about Debian packages; can somebody else maybe tell if this might be a viable project or not? And is somebody with more knowledge about Debian packaging also interested in this?

OS X Binary

Opening Pond.app produced an error,

Library not loaded: /usr/local/lib/libpangocairo-1.0.0.dylib
Referenced from: /Users/<me>/Downloads/Pond.app/Contents/Frameworks/libgdk-3.0.dylib
Reason: image not found

Seems like you're only replacing paths in Pond.app/Contents/MacOS/Pond,
https://github.com/agl/pond/blob/master/client/build-osx-bundle.sh

Probably need to run otool and install_name_tool on all the .dylibs in Pond.app/Contents/Frameworks as well.

Some googling points to this http://ynniv.com/blog/2006/02/deploying-app-that-use-dylibs-on-mac.html.

Revocation messages not accessible nor removable from GUI

When deleting an established contact, a Revocation message is sent out to the Pond server, but it will remain listed in Outbox without being able to open it or remove it.
I don't know if this is intended, but it would be useful to remove them in order to keep the outbox section clear.

No messages for a week, followed by all of them arriving at once?

One of my contacts recently sent me four messages all at once, all with different dates on them. This was after I had received no messages from them for a week. I had been sending and receiving messages from other people successfully during this week, so I don't think the trouble was on my end, although I suppose it could have been on their end?

cli help for attachments

In the CLI version the draft does not show the key after uploading a file. After sending, the outbox entry does not include any indication of the related file -- but it worked on the receiving end.

Further suggestions:
In the help --all list change
attach Attach a file to the current draft
to
attach Attach a file to the current draft (requrires a draft)

The error message
"File is too large (XXX bytes) to attach. Use the 'upload' or 'save-encrypted' commands to encrypt the file, include just the keys in the message and either upload or save the ciphertext"
is helpful (thanks!) but the current pond does not support 'save-encrypted' and the text does not make clear the flow of information. I suggest to change this to:
"File is too large (XXX bytes) to attach. Use the 'upload' commandsto encrypt the file and upload it to the server. Pond will include just the keys in the message."

nil pointer dereference in showDraftsSummary()

Hello,

my client started crashing. I think it started crashing after I deleted a contact.
The stacktrace is:

panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x8 pc=0x40b179]

goroutine 1 [running]:
main.(*cliClient).showDraftsSummary(0xf840154000, 0x7f98a93f2938)
/home/user/Computers/pond/client/cli.go:655 +0x1d5
main.(*cliClient).showState(0xf840154000, 0xf84042d4a0)
/home/user/Computers/pond/client/cli.go:559 +0x41
main.(*cliClient).mainUI(0xf840154000, 0x6cfc72d55180ac46)
/home/user/Computers/pond/client/cli.go:510 +0x12f
main.(*client).loadUI(0xf840154000, 0x3d000000c7, 0x0, 0x0)
/home/user/Computers/pond/client/client.go:762 +0xd81
main.(*cliClient).Start(0xf840154000, 0x14)
/home/user/Computers/pond/client/cli.go:116 +0x32b
main.main()
/home/user/Computers/pond/client/main_linux.go:39 +0x3ee

I suspect it's crashing because the user I deleted also has a draft. Line
c.Printf(" %s : %s (%s%s%s)\n", terminalEscape(c.contacts[msg.to].name, false), subline, termCliIdStart, msg.cliId.String(), termReset)
is the culpit here, and specifically terminalEscape(c.contacts[msg.to].name, false) throws the nil pointer dereference error. This happens because msg.to referes to a user ID that does not exist anymore.

Feature request: message retraction

It would be nice to be able to retract messages that have been sent. If they haven't been retrieved by the recipient yet, they would simply be deleted from the server. If they have, the recipient would receive a notification of the wish for the message to be retracted. Perhaps a small note could be sent explaining the need for the retraction in either situation.

A common complaint of most communication systems is the need to "undo" a message send. Perhaps you misspelled something, mistyped it, sent it to the wrong person, or even sent something inappropriate while intoxicated.

If you are really trying to make the replacement for email, you should consider adding in this feature.

number of pending PANDA exchanges is a distinguisher

Reattempting all of the pending PANDA transactions at the same time distinguishes a user to the PANDA server and to network adversaries between it and the user.

It would be nice if PANDA had the same traffic analysis countermeasures that the pond protocol has (including fixed-size and no-op transactions).

Add test documentation

The tests look good, but it's hard to tell exactly what they're doing without diving into their code. It would be nice if there was something like gherkins written that describe the specific application behavior being tested for, included in the comments of the test code. This would make it easier to look for logic flaws. (Yes, I realize there is already documentation for pond. I am merely suggesting that this be integrated into the tests in a standardized format.)

Feature: Erase time for sent messages

A couple of my sent and acked messages vanished from my outbox. I assume that this is due to their erase time coming up, rather than to a bug. Received messages have a header field indicating when they'll be erased. Could this be added to sent messages too?

Very minor typo on readme.md

Really trivial but noticed a typo on Readme.md under the Spam heading.

Because we this, we make the system closed

should be

Because of this, we make the system closed

Thanks

Installing pond on arch

I want to test the pond-client under archlinux.

After installing trousers, go, gtkspell3, mercurial and tor, creating a directory for go and exporting it's path "go get github.com/agl/pond/client" fails:

go get github.com/agl/pond/client
# github.com/agl/go-gtk/gtk
gtk.go: In function '_gtk_widget_get_state':
gtk.go:341:2: error: 'gtk_widget_get_state' is deprecated (declared at /usr/include/gtk-3.0/gtk/gtkwidget.h:678): Use 'gtk_widget_get_state_flags' instead [-Werror=deprecated-declarations]
  return gtk_widget_get_state(widget);
  ^
gtk.go: At top level:
gtk.go:785:1: error: 'gtk_status_icon_new_from_stock' is deprecated (declared at /usr/include/gtk-3.0/gtk/gtkstatusicon.h:90): Use 'gtk_status_icon_new_from_icon_name' instead [-Werror=deprecated-declarations]
  if b {
 ^
gtk.go:838:1: error: 'gtk_status_icon_get_stock' is deprecated (declared at /usr/include/gtk-3.0/gtk/gtkstatusicon.h:118): Use 'gtk_status_icon_get_icon_name' instead [-Werror=deprecated-declarations]
   res[i] = bresponse
 ^
gtk.go:852:1: error: 'gtk_menu_set_tearoff_state' is deprecated (declared at /usr/include/gtk-3.0/gtk/gtkmenu.h:194) [-Werror=deprecated-declarations]
 //-----------------------------------------------------------------------
 ^ 

There was no need to edit the PKGBUILD of pond, since it already has the option --with-gui=openssl, see AUR

Up to date binaries.

It would be nice if people could install Pond by simply downloading one of the binaries on https://pond.imperialviolet.org/. For exmaple with Tails 1.1 users will be able to use the Wheezy binaries, making it way easier to create a small 'install script' for Pond.

Unfortunately the binaries available at the moment are from November 2013 (according to the PGP signatures). Is this an oversight, something people can help with, or would it be better to remove the section about the binaries from the documentation?

Windows support

IMHO, a lot of Windows users would enjoy Pond.

@agl do you think Pond may be ported easily (including dependencies) on Windows ? Do you plan to do it ?

reporting connectivity failures

A friend writes:

my Pond was unable to contact the server for several days due to my clock
being 25 hours behind making Tor unhappy, and the GUI provided no feedback
that it was anything other than happy.

I'd guess the Activity log did say something, but they weren't looking at it. Perhaps the GUI should put an indicator on the activity log label when there is an error reported there? Or should there be something more prominent?

Or maybe there should be an always-visible label that says how long ago the last successful transaction with the home server was?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.