Skip to content

Commit 1d51b39

Browse files
authored
Merge pull request bigeagle#22 from themester/master
Fixed output formatting.
2 parents 28bddf5 + 86c1fa2 commit 1d51b39

File tree

3 files changed

+90
-41
lines changed

3 files changed

+90
-41
lines changed

hop/cipher.go

Lines changed: 41 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,55 +31,74 @@ type hopCipher struct {
3131
block _cipher.Block
3232
}
3333

34+
// We are going to use AES256-CBC
3435
const cipherBlockSize = 16
3536

3637
func newHopCipher(key []byte) (*hopCipher, error) {
37-
s := new(hopCipher)
38-
key = PKCS5Padding(key, cipherBlockSize)
38+
// 32 bytes for AES256 encryption
39+
key = PKCS5Padding(key, 32)
3940
block, err := aes.NewCipher(key)
4041
if err != nil {
4142
return nil, err
4243
}
43-
s.block = block
44-
return s, nil
44+
return &hopCipher{block}, nil
4545
}
4646

4747
func (s *hopCipher) encrypt(msg []byte) []byte {
48-
cmsg := make([]byte, snappy.MaxEncodedLen(len(msg)))
49-
cmsg = snappy.Encode(cmsg, msg)
50-
51-
pmsg := PKCS5Padding(cmsg, cipherBlockSize)
52-
buf := make([]byte, len(pmsg)+cipherBlockSize)
48+
defer func() {
49+
if err := recover(); err != nil {
50+
logger.Error("error encrypting:", err)
51+
}
52+
}()
53+
// compressing using snappy and encrypting data
54+
msg = append(
55+
msg[:cipherBlockSize],
56+
PKCS5Padding(
57+
snappy.Encode(nil, msg), cipherBlockSize,
58+
)...,
59+
)
5360

54-
iv := buf[:cipherBlockSize]
55-
rand.Read(iv)
56-
encrypter := _cipher.NewCBCEncrypter(s.block, iv)
57-
encrypter.CryptBlocks(buf[cipherBlockSize:], pmsg)
61+
// generating random bytes for IV
62+
rand.Read(msg[:cipherBlockSize])
63+
// creates encrypter using block and IV
64+
encrypter := _cipher.NewCBCEncrypter(
65+
s.block, msg[:cipherBlockSize],
66+
)
67+
encrypter.CryptBlocks(
68+
msg[cipherBlockSize:], msg[cipherBlockSize:],
69+
)
5870

59-
return buf
71+
return msg
6072
}
6173

6274
func (s *hopCipher) decrypt(iv []byte, ctext []byte) []byte {
6375
defer func() {
6476
if err := recover(); err != nil {
65-
logger.Error("%v", err)
77+
logger.Error("panic:", err)
6678
}
6779
}()
80+
var err error
81+
6882
decrypter := _cipher.NewCBCDecrypter(s.block, iv)
69-
buf := make([]byte, len(ctext))
70-
decrypter.CryptBlocks(buf, ctext)
71-
cmsg := PKCS5UnPadding(buf)
83+
decrypter.CryptBlocks(ctext, ctext)
84+
ctext = PKCS5UnPadding(ctext)
7285

73-
msg, _ := snappy.Decode(nil, cmsg)
74-
return msg
86+
ctext, err = snappy.Decode(nil, ctext)
87+
if err != nil {
88+
logger.Error(err)
89+
}
90+
return ctext
7591
}
7692

93+
// PKCS5Padding implements PKCS5 as RFC8018 describes
7794
func PKCS5Padding(ciphertext []byte, blockSize int) []byte {
7895
padding := blockSize - len(ciphertext)%blockSize
79-
padtext := bytes.Repeat([]byte{byte(padding)}, padding)
80-
return append(ciphertext, padtext...)
96+
return append(ciphertext,
97+
bytes.Repeat([]byte{byte(padding)}, padding)...,
98+
)
8199
}
82100

101+
// PKCS5UnPadding implements PKCS as RFC8018 describes.
83102
func PKCS5UnPadding(origData []byte) []byte {
84103
length := len(origData)
85104
unpadding := int(origData[length-1])

hop/client.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,9 @@ func NewClient(cfg HopClientConfig) error {
117117
hopClient.iface = iface
118118

119119
net_gateway, net_nic, err = getNetGateway()
120-
logger.Debug("Net Gateway: %s %s", net_gateway, net_nic)
120+
logger.Debug(
121+
fmt.Sprintf("Net Gateway: %s %s", net_gateway, net_nic),
122+
)
121123
if err != nil {
122124
return err
123125
}
@@ -322,7 +324,9 @@ func (clt *HopClient) handleUDP(server string) {
322324
if handle_func, ok := pktHandle[hp.Flag]; ok {
323325
handle_func(udpConn, hp)
324326
} else {
325-
logger.Error("Unkown flag: %x", hp.Flag)
327+
logger.Error(
328+
fmt.Sprintf("Unkown flag: %x", hp.Flag),
329+
)
326330
}
327331
}
328332
}

hop/server.go

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ type HopServer struct {
7575

7676
func NewServer(cfg HopServerConfig) error {
7777
var err error
78-
logger.Debug("%v", cfg)
78+
logger.Debug(cfg)
7979

8080
cipher, err = newHopCipher([]byte(cfg.Key))
8181
if err != nil {
@@ -188,12 +188,14 @@ func (srv *HopServer) listenAndServe(addr string, port string, idx int) {
188188
port = addr + ":" + port
189189
udpAddr, err := net.ResolveUDPAddr("udp", port)
190190
if err != nil {
191-
logger.Error("Invalid port: %s", port)
191+
logger.Error("Invalid port:", port)
192192
return
193193
}
194194
udpConn, err := net.ListenUDP("udp", udpAddr)
195195
if err != nil {
196-
logger.Error("Failed to listen udp port %s: %s", port, err.Error())
196+
logger.Error(
197+
fmt.Sprintf("Failed to listen udp port %s: %s", port, err.Error()),
198+
)
197199
return
198200
}
199201

@@ -261,7 +263,9 @@ func (srv *HopServer) forwardFrames() {
261263
if hpeer, found := srv.peers[mkey]; found {
262264
srv.bufferToClient(hpeer, pack)
263265
} else {
264-
logger.Warning("client peer with key %d not found", mkey)
266+
logger.Warning(
267+
fmt.Sprintf("client peer with key %d not found", mkey),
268+
)
265269
}
266270

267271
case packet := <-srv.fromNet:
@@ -274,17 +278,23 @@ func (srv *HopServer) forwardFrames() {
274278
func (srv *HopServer) handlePacket(packet *udpPacket) {
275279
defer func() {
276280
if err := recover(); err != nil {
277-
logger.Error("handleFunction failed: %v, packet addr:%v", err, packet.addr)
281+
logger.Error(
282+
fmt.Sprintf("handleFunction failed: %v, packet addr:%v", err, packet.addr),
283+
)
278284
}
279285
}()
280286

281287
hPack, err := unpackHopPacket(packet.data)
282288
if err == nil {
283-
logger.Debug("New UDP Packet [%v] from : %v", hPack.Flag, packet.addr)
289+
logger.Debug(
290+
fmt.Sprintf("New UDP Packet [%v] from : %v", hPack.Flag, packet.addr),
291+
)
284292
if handle_func, ok := srv.pktHandle[hPack.Flag]; ok {
285293
handle_func(packet, hPack)
286294
} else {
287-
logger.Error("Unkown flag: %x", hPack.Flag)
295+
logger.Error(
296+
fmt.Sprintf("Unkown flag: %x", hPack.Flag),
297+
)
288298
}
289299
} else {
290300
logger.Error(err.Error())
@@ -298,7 +308,7 @@ func (srv *HopServer) toClient(peer *HopPeer, flag byte, payload []byte, noise b
298308
hp.payload = payload
299309

300310
if addr, idx, ok := peer.addr(); ok {
301-
logger.Debug("peer: %v", addr)
311+
logger.Debug("peer:", addr)
302312
upacket := &udpPacket{addr, hp.Pack(), idx}
303313
srv.toNet[idx] <- upacket
304314
} else {
@@ -337,7 +347,9 @@ func (srv *HopServer) bufferToClient(peer *HopPeer, buf []byte) {
337347

338348
func (srv *HopServer) handleKnock(u *udpPacket, hp *HopPacket) {
339349
sid := uint64(binary.BigEndian.Uint32(hp.payload[:4]))
340-
logger.Debug("port knock from client %v, sid: %d", u.addr, sid)
350+
logger.Debug(
351+
fmt.Sprintf("port knock from client %v, sid: %d", u.addr, sid),
352+
)
341353
sid = (sid << 32) & uint64(0xFFFFFFFF00000000)
342354

343355
hpeer, ok := srv.peers[sid]
@@ -369,7 +381,9 @@ func (srv *HopServer) handleHeartbeatAck(u *udpPacket, hp *HopPacket) {
369381
func (srv *HopServer) handleHandshake(u *udpPacket, hp *HopPacket) {
370382
sid := uint64(binary.BigEndian.Uint32(hp.payload[:4]))
371383
sid = (sid << 32) & uint64(0xFFFFFFFF00000000)
372-
logger.Debug("handshake from client %v, sid: %d", u.addr, sid)
384+
logger.Debug(
385+
fmt.Sprintf("handshake from client %v, sid: %d", u.addr, sid),
386+
)
373387

374388
hpeer, ok := srv.peers[sid]
375389
if !ok {
@@ -393,7 +407,9 @@ func (srv *HopServer) handleHandshake(u *udpPacket, hp *HopPacket) {
393407
buf.WriteByte(byte(mask))
394408
key := ip4_uint64(hpeer.ip)
395409

396-
logger.Debug("assign address %s, route key %d", cltIP, key)
410+
logger.Debug(
411+
fmt.Sprintf("assign address %s, route key %d", cltIP, key),
412+
)
397413
srv.peers[key] = hpeer
398414
atomic.StoreInt32(&hpeer.state, HOP_STAT_HANDSHAKE)
399415
srv.toClient(hpeer, HOP_FLG_HSH|HOP_FLG_ACK, buf.Bytes(), true)
@@ -431,11 +447,13 @@ func (srv *HopServer) handleHandshakeAck(u *udpPacket, hp *HopPacket) {
431447
return
432448
}
433449
logger.Debug("Client Handshake Done")
434-
logger.Info("Client %d Connected", sid)
450+
logger.Info(
451+
fmt.Sprintf("Client %d Connected", sid),
452+
)
435453
if ok = atomic.CompareAndSwapInt32(&hpeer.state, HOP_STAT_HANDSHAKE, HOP_STAT_WORKING); ok {
436454
hpeer.hsDone <- struct{}{}
437455
} else {
438-
logger.Warning("Invalid peer state: %v", hpeer.ip)
456+
logger.Warning("Invalid peer state:", hpeer.ip)
439457
srv.kickOutPeer(sid)
440458
}
441459
}
@@ -455,7 +473,9 @@ func (srv *HopServer) handleDataPacket(u *udpPacket, hp *HopPacket) {
455473
func (srv *HopServer) handleFinish(u *udpPacket, hp *HopPacket) {
456474
sid := uint64(binary.BigEndian.Uint32(hp.payload[:4]))
457475
sid = (sid << 32) & uint64(0xFFFFFFFF00000000)
458-
logger.Info("releasing client %v, sid: %d", u.addr, sid)
476+
logger.Info(
477+
fmt.Sprintf("releasing client %v, sid: %d", u.addr, sid),
478+
)
459479

460480
srv.deletePeer(sid)
461481
}
@@ -528,7 +548,9 @@ func (srv *HopServer) peerTimeoutWatcher() {
528548
if sid < 0x01<<32 {
529549
continue
530550
}
531-
logger.Debug("IP: %v, sid: %v", hpeer.ip, sid)
551+
logger.Debug(
552+
fmt.Sprintf("IP: %v, sid: %v", hpeer.ip, sid),
553+
)
532554
srv.toClient(hpeer, HOP_FLG_PSH, []byte{}, false)
533555
}
534556
// count := 0
@@ -537,14 +559,18 @@ func (srv *HopServer) peerTimeoutWatcher() {
537559
if sid < 0x01<<32 {
538560
continue
539561
}
540-
logger.Debug("watch: %v", hpeer.lastSeenTime)
562+
logger.Debug(
563+
fmt.Sprintf("watch: %v", hpeer.lastSeenTime),
564+
)
541565
// if sid>>32 > 0 {
542566
// count++
543567
// }
544568
conntime := time.Since(hpeer.lastSeenTime)
545569
// logger.Debug("watch:%v %v", conntime.Seconds(), timeout.Seconds())
546570
if conntime > timeout {
547-
logger.Info("peer %v timeout", hpeer.ip)
571+
logger.Info(
572+
fmt.Sprintf("peer %v timeout", hpeer.ip),
573+
)
548574
go srv.kickOutPeer(sid)
549575
}
550576
}

0 commit comments

Comments
 (0)