Upgrading to Tapir Identity (Tapir v0.1.9) #268
|
@ -9,3 +9,5 @@ server/app/messages
|
|||
.reviewboardrc
|
||||
/vendor/
|
||||
/testing/tor/
|
||||
/storage/testing/
|
||||
/testing/storage/
|
||||
|
|
|
@ -7,9 +7,9 @@ import (
|
|||
"cwtch.im/cwtch/peer"
|
||||
"cwtch.im/cwtch/protocol/connections"
|
||||
"cwtch.im/cwtch/storage"
|
||||
"cwtch.im/tapir/primitives"
|
||||
"fmt"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/connectivity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/identity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
@ -112,7 +112,7 @@ func (app *application) CreatePeer(name string, password string) {
|
|||
|
||||
blockedPeers := profile.BlockedPeers()
|
||||
// TODO: Would be nice if ProtocolEngine did not need to explicitly be given the Private Key.
|
||||
identity := identity.InitializeV3(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
identity := primitives.InitializeIdentity(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
engine := connections.NewProtocolEngine(identity, profile.Ed25519PrivateKey, app.acn, app.eventBuses[profile.Onion], blockedPeers)
|
||||
|
||||
app.peers[profile.Onion] = peer
|
||||
|
@ -167,7 +167,7 @@ func (app *application) LoadProfiles(password string) {
|
|||
peer.Init(app.eventBuses[profile.Onion])
|
||||
|
||||
blockedPeers := profile.BlockedPeers()
|
||||
identity := identity.InitializeV3(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
identity := primitives.InitializeIdentity(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
engine := connections.NewProtocolEngine(identity, profile.Ed25519PrivateKey, app.acn, app.eventBuses[profile.Onion], blockedPeers)
|
||||
app.mutex.Lock()
|
||||
app.peers[profile.Onion] = peer
|
||||
|
|
|
@ -6,8 +6,8 @@ import (
|
|||
"cwtch.im/cwtch/model"
|
||||
"cwtch.im/cwtch/protocol/connections"
|
||||
"cwtch.im/cwtch/storage"
|
||||
"cwtch.im/tapir/primitives"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/connectivity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/identity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
||||
"path"
|
||||
"strconv"
|
||||
|
@ -95,7 +95,7 @@ func (as *applicationService) createPeer(name, password string) {
|
|||
|
||||
blockedPeers := profile.BlockedPeers()
|
||||
// TODO: Would be nice if ProtocolEngine did not need to explicitly be given the Private Key.
|
||||
identity := identity.InitializeV3(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
identity := primitives.InitializeIdentity(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
engine := connections.NewProtocolEngine(identity, profile.Ed25519PrivateKey, as.acn, as.eventBuses[profile.Onion], blockedPeers)
|
||||
|
||||
as.storage[profile.Onion] = profileStore
|
||||
|
@ -111,7 +111,7 @@ func (as *applicationService) loadProfiles(password string) {
|
|||
as.eventBuses[profile.Onion] = event.IPCEventManagerFrom(as.bridge, profile.Onion, as.eventBuses[profile.Onion])
|
||||
|
||||
blockedPeers := profile.BlockedPeers()
|
||||
identity := identity.InitializeV3(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
identity := primitives.InitializeIdentity(profile.Name, &profile.Ed25519PrivateKey, &profile.Ed25519PublicKey)
|
||||
engine := connections.NewProtocolEngine(identity, profile.Ed25519PrivateKey, as.acn, as.eventBuses[profile.Onion], blockedPeers)
|
||||
as.mutex.Lock()
|
||||
as.storage[profile.Onion] = profileStore
|
||||
|
|
2
go.mod
2
go.mod
|
@ -1,7 +1,7 @@
|
|||
module cwtch.im/cwtch
|
||||
|
||||
require (
|
||||
cwtch.im/tapir v0.1.6
|
||||
cwtch.im/tapir v0.1.9
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.5
|
||||
github.com/c-bata/go-prompt v0.2.3
|
||||
github.com/golang/protobuf v1.3.2
|
||||
|
|
5
go.sum
5
go.sum
|
@ -1,7 +1,8 @@
|
|||
cwtch.im/tapir v0.1.6 h1:5wd0z8TOUftEBIlCosLechh5KSAo9HfiQNcqknSzRWA=
|
||||
cwtch.im/tapir v0.1.6/go.mod h1:EuRYdVrwijeaGBQ4OijDDRHf7R2MDSypqHkSl5DxI34=
|
||||
cwtch.im/tapir v0.1.9 h1:TXIKN/8q2cNMlwGmu8c8i3Vq2+x61I8G9638LkBicjk=
|
||||
cwtch.im/tapir v0.1.9/go.mod h1:EuRYdVrwijeaGBQ4OijDDRHf7R2MDSypqHkSl5DxI34=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.4 h1:GWLMJ5jBSIC/gFXzdbbeVz7fIAn2FTgW8+wBci6/3Ek=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.4/go.mod h1:yMSG1gBaP4f1U+RMZXN85d29D39OK5s8aTpyVRoH5FY=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.5 h1:WAq54xI2xfRCtc3+Tw20MOVvOPmWmO6u0tSrCSt65G8=
|
||||
git.openprivacy.ca/openprivacy/libricochet-go v1.0.5/go.mod h1:yMSG1gBaP4f1U+RMZXN85d29D39OK5s8aTpyVRoH5FY=
|
||||
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 h1:w1UutsfOrms1J05zt7ISrnJIXKzwaspym5BTKGx93EI=
|
||||
github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412/go.mod h1:WPjqKcmVOxf0XSf3YxCJs6N6AOSrOx3obionmG7T0y0=
|
||||
|
|
|
@ -6,9 +6,9 @@ import (
|
|||
"cwtch.im/tapir"
|
||||
"cwtch.im/tapir/applications"
|
||||
"cwtch.im/tapir/networks/tor"
|
||||
"cwtch.im/tapir/primitives"
|
||||
"errors"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/connectivity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/identity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/log"
|
||||
"github.com/golang/protobuf/proto"
|
||||
"golang.org/x/crypto/ed25519"
|
||||
|
@ -21,7 +21,7 @@ type engine struct {
|
|||
connectionsManager *Manager
|
||||
|
||||
// Engine Attributes
|
||||
identity identity.Identity
|
||||
identity primitives.Identity
|
||||
acn connectivity.ACN
|
||||
|
||||
// Engine State
|
||||
|
@ -45,14 +45,13 @@ type engine struct {
|
|||
// Engine (ProtocolEngine) encapsulates the logic necessary to make and receive Cwtch connections.
|
||||
// Note: ProtocolEngine doesn't have access to any information necessary to encrypt or decrypt GroupMessages
|
||||
type Engine interface {
|
||||
Identity() identity.Identity
|
||||
ACN() connectivity.ACN
|
||||
EventManager() event.Manager
|
||||
Shutdown()
|
||||
}
|
||||
|
||||
// NewProtocolEngine initializes a new engine that runs Cwtch using the given parameters
|
||||
func NewProtocolEngine(identity identity.Identity, privateKey ed25519.PrivateKey, acn connectivity.ACN, eventManager event.Manager, blockedPeers []string) Engine {
|
||||
func NewProtocolEngine(identity primitives.Identity, privateKey ed25519.PrivateKey, acn connectivity.ACN, eventManager event.Manager, blockedPeers []string) Engine {
|
||||
engine := new(engine)
|
||||
engine.identity = identity
|
||||
engine.privateKey = privateKey
|
||||
|
@ -65,7 +64,7 @@ func NewProtocolEngine(identity identity.Identity, privateKey ed25519.PrivateKey
|
|||
|
||||
// Init the Server running the Simple App.
|
||||
engine.service = new(tor.BaseOnionService)
|
||||
engine.service.Init(acn, privateKey, identity)
|
||||
engine.service.Init(acn, privateKey, &identity)
|
||||
|
||||
engine.eventManager = eventManager
|
||||
|
||||
|
@ -90,10 +89,6 @@ func (e *engine) ACN() connectivity.ACN {
|
|||
return e.acn
|
||||
}
|
||||
|
||||
func (e *engine) Identity() identity.Identity {
|
||||
return e.identity
|
||||
}
|
||||
|
||||
func (e *engine) EventManager() event.Manager {
|
||||
return e.eventManager
|
||||
}
|
||||
|
@ -257,7 +252,7 @@ func (e *engine) peerDisconnected(onion string) {
|
|||
func (e *engine) sendMessageToPeer(eventID string, onion string, context string, message []byte) error {
|
||||
conn, err := e.service.GetConnection(onion)
|
||||
if err == nil {
|
||||
peerApp, ok := conn.App.(*PeerApp)
|
||||
peerApp, ok := (conn.App()).(*PeerApp)
|
||||
if ok {
|
||||
peerApp.SendMessage(PeerMessage{eventID, context, message})
|
||||
return nil
|
||||
|
|
|
@ -11,7 +11,7 @@ import (
|
|||
// PeerApp encapsulates the behaviour of a Cwtch Peer
|
||||
type PeerApp struct {
|
||||
applications.AuthApp
|
||||
connection *tapir.Connection
|
||||
connection tapir.Connection
|
||||
MessageHandler func(string, string, []byte)
|
||||
IsBlocked func(string) bool
|
||||
OnAcknowledgement func(string, string)
|
||||
|
@ -40,7 +40,7 @@ func (pa PeerApp) NewInstance() tapir.Application {
|
|||
}
|
||||
|
||||
// Init is run when the connection is first started.
|
||||
func (pa *PeerApp) Init(connection *tapir.Connection) {
|
||||
func (pa *PeerApp) Init(connection tapir.Connection) {
|
||||
|
||||
// First run the Authentication App
|
||||
pa.AuthApp.Init(connection)
|
||||
|
@ -49,15 +49,15 @@ func (pa *PeerApp) Init(connection *tapir.Connection) {
|
|||
|
||||
pa.connection = connection
|
||||
|
||||
if pa.IsBlocked(connection.Hostname) {
|
||||
if pa.IsBlocked(connection.Hostname()) {
|
||||
pa.connection.Close()
|
||||
pa.OnClose(connection.Hostname)
|
||||
pa.OnClose(connection.Hostname())
|
||||
} else {
|
||||
pa.OnAuth(connection.Hostname)
|
||||
pa.OnAuth(connection.Hostname())
|
||||
go pa.listen()
|
||||
}
|
||||
} else {
|
||||
pa.OnClose(connection.Hostname)
|
||||
pa.OnClose(connection.Hostname())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -66,16 +66,16 @@ func (pa PeerApp) listen() {
|
|||
message := pa.connection.Expect()
|
||||
if len(message) == 0 {
|
||||
log.Errorf("0 byte read, socket has likely failed. Closing the listen goroutine")
|
||||
pa.OnClose(pa.connection.Hostname)
|
||||
pa.OnClose(pa.connection.Hostname())
|
||||
return
|
||||
}
|
||||
var peerMessage PeerMessage
|
||||
err := json.Unmarshal(message, &peerMessage)
|
||||
if err == nil {
|
||||
if peerMessage.Context == event.ContextAck {
|
||||
pa.OnAcknowledgement(pa.connection.Hostname, peerMessage.ID)
|
||||
pa.OnAcknowledgement(pa.connection.Hostname(), peerMessage.ID)
|
||||
} else {
|
||||
pa.MessageHandler(pa.connection.Hostname, peerMessage.Context, peerMessage.Data)
|
||||
pa.MessageHandler(pa.connection.Hostname(), peerMessage.Context, peerMessage.Data)
|
||||
|
||||
// Acknowledge the message
|
||||
// TODO Should this be in the ui?
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
package connections
|
||||
|
||||
import (
|
||||
"crypto/rand"
|
||||
"cwtch.im/cwtch/event"
|
||||
"cwtch.im/cwtch/protocol"
|
||||
"cwtch.im/cwtch/server/fetch"
|
||||
"cwtch.im/cwtch/server/send"
|
||||
"cwtch.im/tapir/primitives"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/connection"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/connectivity"
|
||||
"git.openprivacy.ca/openprivacy/libricochet-go/identity"
|
||||
identityOld "git.openprivacy.ca/openprivacy/libricochet-go/identity"
|
||||
"golang.org/x/crypto/ed25519"
|
||||
"net"
|
||||
"testing"
|
||||
|
@ -34,7 +34,7 @@ func (ts *TestServer) HandleFetchRequest() []*protocol.GroupMessage {
|
|||
return []*protocol.GroupMessage{{Ciphertext: []byte("hello"), Signature: []byte{}, Spamguard: []byte{}}, {Ciphertext: []byte("hello"), Signature: []byte{}, Spamguard: []byte{}}}
|
||||
}
|
||||
|
||||
func runtestserver(t *testing.T, ts *TestServer, identity identity.Identity, listenChan chan bool) {
|
||||
func runtestserver(t *testing.T, ts *TestServer, priv ed25519.PrivateKey, identity primitives.Identity, listenChan chan bool) {
|
||||
ln, _ := net.Listen("tcp", "127.0.0.1:5451")
|
||||
listenChan <- true
|
||||
conn, _ := ln.Accept()
|
||||
|
@ -44,7 +44,9 @@ func runtestserver(t *testing.T, ts *TestServer, identity identity.Identity, lis
|
|||
if err != nil {
|
||||
t.Errorf("Negotiate Version Error: %v", err)
|
||||
}
|
||||
err = connection.HandleInboundConnection(rc).ProcessAuthAsV3Server(identity, ServerAuthValid)
|
||||
// TODO switch from old identity to new tapir identity.
|
||||
pub := identity.PublicKey()
|
||||
err = connection.HandleInboundConnection(rc).ProcessAuthAsV3Server(identityOld.InitializeV3("", &priv, &pub), ServerAuthValid)
|
||||
if err != nil {
|
||||
t.Errorf("ServerAuth Error: %v", err)
|
||||
}
|
||||
|
@ -65,15 +67,13 @@ func runtestserver(t *testing.T, ts *TestServer, identity identity.Identity, lis
|
|||
}
|
||||
|
||||
func TestPeerServerConnection(t *testing.T) {
|
||||
pub, priv, _ := ed25519.GenerateKey(rand.Reader)
|
||||
|
||||
identity := identity.InitializeV3("", &priv, &pub)
|
||||
identity, priv := primitives.InitializeEphemeralIdentity()
|
||||
t.Logf("Launching Server....\n")
|
||||
ts := new(TestServer)
|
||||
ts.Init()
|
||||
ts.Received = make(chan bool)
|
||||
listenChan := make(chan bool)
|
||||
go runtestserver(t, ts, identity, listenChan)
|
||||
go runtestserver(t, ts, priv, identity, listenChan)
|
||||
<-listenChan
|
||||
onionAddr := identity.Hostname()
|
||||
|
||||
|
|
Loading…
Reference in New Issue