Skip to content

Commit 64748bc

Browse files
author
number571
committed
update
1 parent 32d1dc9 commit 64748bc

37 files changed

+320
-189
lines changed

CHANGELOG.md

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,13 @@
44

55
## v1.7.11~
66

7-
*April 30, 2025*
7+
*??? ??, ????*
8+
9+
### IMPROVEMENTS
10+
11+
- `pkg/anonymity/qb`: move from pkg/anonymity -> pkg/anonymity/qb
12+
- `pkg/anonymity/qb`: add WithDecryptors
13+
- `pkg/client`: DecryptMessage with static time
814

915
### CHANGES
1016

pkg/anonymity/doc.go

Lines changed: 0 additions & 5 deletions
This file was deleted.

pkg/anonymity/action.go renamed to pkg/anonymity/qb/action.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package anonymity
1+
package qb
22

33
const (
44
cAction32bitMask = sAction(1 << 31)
File renamed without changes.
File renamed without changes.

pkg/anonymity/anonymity.go renamed to pkg/anonymity/qb/anonymity.go

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package anonymity
1+
package qb
22

33
import (
44
"context"
@@ -7,8 +7,9 @@ import (
77
"sync"
88
"time"
99

10-
"github.com/number571/go-peer/pkg/anonymity/adapters"
11-
"github.com/number571/go-peer/pkg/anonymity/queue"
10+
"github.com/number571/go-peer/pkg/anonymity/qb/adapters"
11+
"github.com/number571/go-peer/pkg/anonymity/qb/queue"
12+
"github.com/number571/go-peer/pkg/client"
1213
"github.com/number571/go-peer/pkg/crypto/asymmetric"
1314
"github.com/number571/go-peer/pkg/crypto/hashing"
1415
"github.com/number571/go-peer/pkg/crypto/random"
@@ -19,7 +20,7 @@ import (
1920
"github.com/number571/go-peer/pkg/state"
2021
"github.com/number571/go-peer/pkg/storage/database"
2122

22-
anon_logger "github.com/number571/go-peer/pkg/anonymity/logger"
23+
anon_logger "github.com/number571/go-peer/pkg/anonymity/qb/logger"
2324
)
2425

2526
var (
@@ -37,6 +38,7 @@ type sNode struct {
3738
fMapPubKeys asymmetric.IMapPubKeys
3839
fHandleRoutes map[uint32]IHandlerF
3940
fHandleActions map[string]chan []byte
41+
fDecryptors []client.IDecryptor
4042
}
4143

4244
func NewNode(
@@ -56,6 +58,7 @@ func NewNode(
5658
fMapPubKeys: asymmetric.NewMapPubKeys(),
5759
fHandleRoutes: make(map[uint32]IHandlerF, 64),
5860
fHandleActions: make(map[string]chan []byte, 64),
61+
fDecryptors: []client.IDecryptor{pQBProcessor.GetClient()},
5962
}
6063
}
6164

@@ -97,6 +100,14 @@ func (p *sNode) Run(pCtx context.Context) error {
97100
}
98101
}
99102

103+
func (p *sNode) WithDecryptors(pDecryptors ...client.IDecryptor) INode {
104+
decryptors := make([]client.IDecryptor, 0, 1+len(pDecryptors))
105+
decryptors = append(decryptors, p.fQBProcessor.GetClient())
106+
decryptors = append(decryptors, pDecryptors...)
107+
p.fDecryptors = decryptors
108+
return p
109+
}
110+
100111
func (p *sNode) runProducer(pCtx context.Context) error {
101112
for {
102113
select {
@@ -225,6 +236,27 @@ func (p *sNode) recvResponse(pCtx context.Context, pActionKey string) ([]byte, e
225236
}
226237
}
227238

239+
func (p *sNode) tryDecryptMessage(pEncMsg []byte) (uint64, asymmetric.IPubKey, []byte, error) {
240+
var (
241+
id uint64
242+
pubKey asymmetric.IPubKey
243+
decMsg []byte
244+
)
245+
for i, d := range p.fDecryptors {
246+
pk, dm, err := d.DecryptMessage(p.fMapPubKeys, pEncMsg)
247+
if err != nil {
248+
continue
249+
}
250+
id = uint64(i) // nolint: gosec
251+
pubKey = pk
252+
decMsg = dm
253+
}
254+
if pubKey == nil {
255+
return 0, nil, nil, ErrDecryptMessage
256+
}
257+
return id, pubKey, decMsg, nil
258+
}
259+
228260
func (p *sNode) consumeMessage(pCtx context.Context, pNetMsg layer1.IMessage) error {
229261
logBuilder := anon_logger.NewLogBuilder(p.fSettings.GetServiceName())
230262

@@ -251,8 +283,8 @@ func (p *sNode) consumeMessage(pCtx context.Context, pNetMsg layer1.IMessage) er
251283
return nil
252284
}
253285

254-
// try decrypt message
255-
pubKey, decMsg, err := client.DecryptMessage(p.fMapPubKeys, encMsg)
286+
// try decrypt consumed message
287+
id, pubKey, decMsg, err := p.tryDecryptMessage(encMsg)
256288
if err != nil {
257289
p.fLogger.PushInfo(logBuilder.WithType(anon_logger.CLogInfoUndecryptable))
258290
return nil
@@ -270,12 +302,13 @@ func (p *sNode) consumeMessage(pCtx context.Context, pNetMsg layer1.IMessage) er
270302
}
271303

272304
// do request or response action
273-
return p.handleDoAction(pCtx, logBuilder, pubKey, pld)
305+
return p.handleDoAction(pCtx, logBuilder, id, pubKey, pld)
274306
}
275307

276308
func (p *sNode) handleDoAction(
277309
pCtx context.Context,
278310
pLogBuilder anon_logger.ILogBuilder,
311+
pID uint64,
279312
pSender asymmetric.IPubKey,
280313
pPld payload.IPayload64,
281314
) error {
@@ -288,7 +321,7 @@ func (p *sNode) handleDoAction(
288321

289322
if action.isRequest() {
290323
// got request from another side (need generate response)
291-
p.handleRequest(pCtx, pLogBuilder, pSender, head, body)
324+
p.handleRequest(pCtx, pLogBuilder, pID, pSender, head, body)
292325
return nil
293326
}
294327

@@ -319,6 +352,7 @@ func (p *sNode) handleResponse(
319352
func (p *sNode) handleRequest(
320353
pCtx context.Context,
321354
pLogBuilder anon_logger.ILogBuilder,
355+
pID uint64,
322356
pSender asymmetric.IPubKey,
323357
pHead iHead,
324358
pBody []byte,
@@ -331,7 +365,7 @@ func (p *sNode) handleRequest(
331365
}
332366

333367
// response can be nil
334-
resp, err := f(pCtx, p, pSender, pBody)
368+
resp, err := f(pCtx, p, pID, pSender, pBody)
335369
if err != nil {
336370
p.fLogger.PushWarn(pLogBuilder.WithType(anon_logger.CLogWarnIncorrectResponse))
337371
return

pkg/anonymity/anonymity_test.go renamed to pkg/anonymity/qb/anonymity_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// nolint: err113
2-
package anonymity
2+
package qb
33

44
import (
55
"context"
@@ -11,8 +11,8 @@ import (
1111
"testing"
1212
"time"
1313

14-
"github.com/number571/go-peer/pkg/anonymity/adapters"
15-
"github.com/number571/go-peer/pkg/anonymity/queue"
14+
"github.com/number571/go-peer/pkg/anonymity/qb/adapters"
15+
"github.com/number571/go-peer/pkg/anonymity/qb/queue"
1616
"github.com/number571/go-peer/pkg/client"
1717
"github.com/number571/go-peer/pkg/crypto/asymmetric"
1818
"github.com/number571/go-peer/pkg/crypto/hashing"
@@ -26,7 +26,7 @@ import (
2626
"github.com/number571/go-peer/pkg/storage/database"
2727
testutils "github.com/number571/go-peer/test/utils"
2828

29-
anon_logger "github.com/number571/go-peer/pkg/anonymity/logger"
29+
anon_logger "github.com/number571/go-peer/pkg/anonymity/qb/logger"
3030
"github.com/number571/go-peer/pkg/network/conn"
3131
)
3232

@@ -189,7 +189,7 @@ func TestFetchPayload(t *testing.T) {
189189

190190
nodes[1].HandleFunc(
191191
tcHead,
192-
func(_ context.Context, _ INode, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
192+
func(_ context.Context, _ INode, _ uint64, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
193193
return []byte(fmt.Sprintf("echo: '%s'", string(reqBytes))), nil
194194
},
195195
)
@@ -238,7 +238,7 @@ func TestBroadcastPayload(t *testing.T) {
238238
chResult := make(chan string)
239239
nodes[1].HandleFunc(
240240
tcHead,
241-
func(_ context.Context, _ INode, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
241+
func(_ context.Context, _ INode, _ uint64, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
242242
res := fmt.Sprintf("echo: '%s'", string(reqBytes))
243243
go func() { chResult <- res }()
244244
return nil, nil
@@ -386,7 +386,7 @@ func TestHandleWrapper(t *testing.T) {
386386

387387
node.HandleFunc(
388388
111,
389-
func(_ context.Context, _ INode, _ asymmetric.IPubKey, _ []byte) ([]byte, error) {
389+
func(_ context.Context, _ INode, _ uint64, _ asymmetric.IPubKey, _ []byte) ([]byte, error) {
390390
return nil, errors.New("some error") //nolint:err113
391391
},
392392
)
@@ -600,7 +600,7 @@ func testRunNodes(ctx context.Context, t *testing.T, timeWait time.Duration, add
600600
for _, node := range nodes {
601601
node.HandleFunc(
602602
tcHead,
603-
func(_ context.Context, _ INode, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
603+
func(_ context.Context, _ INode, _ uint64, _ asymmetric.IPubKey, reqBytes []byte) ([]byte, error) {
604604
// send response
605605
return []byte(string(reqBytes) + " (response)"), nil
606606
},

pkg/anonymity/qb/doc.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Package qb allows you to perform network operations on top of anonymizing traffic.
2+
//
3+
// The package basically uses the fifth^ stage of qb with a queue-based problem.
4+
// All applied connections use friend-to-friend (F2F) communications.
5+
package qb

pkg/anonymity/errors.go renamed to pkg/anonymity/qb/errors.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
package anonymity
1+
package qb
22

33
const (
4-
errPrefix = "pkg/anonymity = "
4+
errPrefix = "pkg/anonymity/qb = "
55
)
66

77
type SAnonymityError struct {
@@ -30,4 +30,5 @@ var (
3030
ErrRunning = &SAnonymityError{"node running"}
3131
ErrProcessRun = &SAnonymityError{"process run"}
3232
ErrHashAlreadyExist = &SAnonymityError{"hash already exist"}
33+
ErrDecryptMessage = &SAnonymityError{"decrypt message"}
3334
)

0 commit comments

Comments
 (0)