sym-encryption #1

Merged
johnnylee merged 18 commits from sym-encryption into main 2024-12-24 18:37:44 +00:00
4 changed files with 37 additions and 56 deletions
Showing only changes of commit a6e022e570 - Show all commits

View File

@ -5,48 +5,25 @@ import (
"sync/atomic" "sync/atomic"
) )
func _sendControlPacket( func _sendControlPacket(pkt interface{ Marshal([]byte) []byte }, route peerRoute, buf1, buf2 []byte) {
pkt interface{ Marshal([]byte) []byte }, buf := pkt.Marshal(buf2)
route peerRoute, h := header{
buf1 []byte,
buf2 []byte,
) {
buf := pkt.Marshal(buf1)
h1 := header{
StreamID: controlStreamID, StreamID: controlStreamID,
Counter: atomic.AddUint64(&sendCounters[route.IP], 1), Counter: atomic.AddUint64(&sendCounters[route.IP], 1),
SourceIP: localIP, SourceIP: localIP,
DestIP: route.IP, DestIP: route.IP,
} }
buf = route.ControlCipher.Encrypt(h1, buf, buf2) buf = route.ControlCipher.Encrypt(h, buf, buf1)
if route.RelayIP == 0 { if route.RelayIP == 0 {
_conn.WriteTo(buf, route.RemoteAddr) _conn.WriteTo(buf, route.RemoteAddr)
return return
} }
relayRoute := routingTable[route.RelayIP].Load() _relayPacket(route.RelayIP, route.IP, buf, buf2)
if !relayRoute.Up || !relayRoute.Relay {
log.Print("Failed to send control packet: relay not available.")
return
} }
h2 := header{ func _sendDataPacket(route *peerRoute, pkt, buf1, buf2 []byte) {
StreamID: dataStreamID,
Counter: atomic.AddUint64(&sendCounters[relayRoute.IP], 1),
SourceIP: localIP,
DestIP: route.IP,
}
buf = relayRoute.DataCipher.Encrypt(h2, buf, buf1)
_conn.WriteTo(buf, relayRoute.RemoteAddr)
}
func _sendDataPacket(
pkt []byte,
route *peerRoute,
buf1 []byte,
buf2 []byte,
) {
h := header{ h := header{
StreamID: dataStreamID, StreamID: dataStreamID,
Counter: atomic.AddUint64(&sendCounters[route.IP], 1), Counter: atomic.AddUint64(&sendCounters[route.IP], 1),
@ -61,19 +38,23 @@ func _sendDataPacket(
return return
} }
relayRoute := routingTable[route.RelayIP].Load() _relayPacket(route.RelayIP, route.IP, enc, buf2)
}
func _relayPacket(relayIP, destIP byte, data, buf []byte) {
relayRoute := routingTable[relayIP].Load()
if !relayRoute.Up || !relayRoute.Relay { if !relayRoute.Up || !relayRoute.Relay {
log.Print("Failed to send data packet: relay not available.") log.Print("Failed to send data packet: relay not available.")
return return
} }
h2 := header{ h := header{
StreamID: dataStreamID, StreamID: dataStreamID,
Counter: atomic.AddUint64(&sendCounters[relayRoute.IP], 1), Counter: atomic.AddUint64(&sendCounters[relayRoute.IP], 1),
SourceIP: localIP, SourceIP: localIP,
DestIP: route.IP, DestIP: destIP,
} }
enc = relayRoute.DataCipher.Encrypt(h2, enc, buf2) enc := relayRoute.DataCipher.Encrypt(h, data, buf)
_conn.WriteTo(enc, relayRoute.RemoteAddr) _conn.WriteTo(enc, relayRoute.RemoteAddr)
} }

View File

@ -27,31 +27,31 @@ type peerRoute struct {
RelayIP byte // Non-zero if we should relay. RelayIP byte // Non-zero if we should relay.
} }
// Configuration for this peer.
var ( var (
// Configuration for this peer.
netName string netName string
localIP byte localIP byte
localPub bool localPub bool
privateKey []byte privateKey []byte
)
// Shared interface for writing. // Shared interface for writing.
var _iface *ifWriter _iface *ifWriter
// Shared connection for writing. // Shared connection for writing.
var _conn *connWriter _conn *connWriter
// Counters for sending to each peer. // Counters for sending to each peer.
var sendCounters [256]uint64 sendCounters [256]uint64
// Duplicate checkers for incoming packets. // Duplicate checkers for incoming packets.
var dupChecks [256]*dupCheck dupChecks [256]*dupCheck
// Channels for incoming control packets. // Channels for incoming control packets.
var controlPackets [256]chan controlPacket controlPackets [256]chan controlPacket
// Channels for incoming peer updates from the hub. // Channels for incoming peer updates from the hub.
var peerUpdates [256]chan *m.Peer peerUpdates [256]chan *m.Peer
// Global routing table. // Global routing table.
var routingTable [256]*atomic.Pointer[peerRoute] routingTable [256]*atomic.Pointer[peerRoute]
)

View File

@ -287,6 +287,6 @@ func readFromIFace(iface io.ReadWriteCloser) {
continue continue
} }
_sendDataPacket(packet, route, buf1, buf2) _sendDataPacket(route, packet, buf1, buf2)
} }
} }