perf(handshaker): optimize protobuf serialization by using MarshalVT
cognitive committed
Dec 30, 2025 at 00:29 UTC
78dfe5eb7c95ebcb11b6d6d8d390e82b033d4cfa
1 file changed
+8
-9
portal/core/cryptoops/handshaker.go
+8
-9
@@ -17,7 +17,6 @@ import (
17
"golang.org/x/crypto/chacha20poly1305"
18
"golang.org/x/crypto/curve25519"
19
"golang.org/x/crypto/hkdf"
20
- "google.golang.org/protobuf/proto"
20
21
"github.com/valyala/bytebufferpool"
22
"gosuda.org/portal/portal/core/proto/rdsec"
@@ -316,7 +315,7 @@ func (h *Handshaker) ClientHandshake(conn io.ReadWriteCloser, alpn string) (*Sec
315
}
316
317
// Serialize and sign the payload
319
- payloadBytes, err := proto.Marshal(clientInitPayload)
318
+ payloadBytes, err := clientInitPayload.MarshalVT()
319
if err != nil {
320
return nil, ErrHandshakeFailed
321
}
@@ -329,7 +328,7 @@ func (h *Handshaker) ClientHandshake(conn io.ReadWriteCloser, alpn string) (*Sec
328
}
329
330
// Send client init message
332
- clientInitBytes, err := proto.Marshal(clientInit)
331
+ clientInitBytes, err := clientInit.MarshalVT()
332
if err != nil {
333
return nil, ErrHandshakeFailed
334
}
@@ -346,13 +345,13 @@ func (h *Handshaker) ClientHandshake(conn io.ReadWriteCloser, alpn string) (*Sec
345
}
346
347
serverInitSigned := &rdsec.SignedPayload{}
349
- if err := proto.Unmarshal(serverInitBytes, serverInitSigned); err != nil {
348
+ if err := serverInitSigned.UnmarshalVT(serverInitBytes); err != nil {
349
return nil, ErrHandshakeFailed
350
}
351
352
// Unmarshal the server init payload
353
serverInitPayload := &rdsec.ServerInitPayload{}
355
- if err := proto.Unmarshal(serverInitSigned.GetData(), serverInitPayload); err != nil {
354
+ if err := serverInitPayload.UnmarshalVT(serverInitSigned.GetData()); err != nil {
355
return nil, ErrHandshakeFailed
356
}
357
@@ -385,13 +384,13 @@ func (h *Handshaker) ServerHandshake(conn io.ReadWriteCloser, alpns []string) (*
384
}
385
386
clientInitSigned := &rdsec.SignedPayload{}
388
- if err := proto.Unmarshal(clientInitBytes, clientInitSigned); err != nil {
387
+ if err := clientInitSigned.UnmarshalVT(clientInitBytes); err != nil {
388
return nil, ErrHandshakeFailed
389
}
390
391
// Unmarshal the client init payload
392
clientInitPayload := &rdsec.ClientInitPayload{}
394
- if err := proto.Unmarshal(clientInitSigned.GetData(), clientInitPayload); err != nil {
393
+ if err := clientInitPayload.UnmarshalVT(clientInitSigned.GetData()); err != nil {
394
return nil, ErrHandshakeFailed
395
}
396
@@ -428,7 +427,7 @@ func (h *Handshaker) ServerHandshake(conn io.ReadWriteCloser, alpns []string) (*
427
}
428
429
// Serialize and sign the payload
431
- payloadBytes, err := proto.Marshal(serverInitPayload)
430
+ payloadBytes, err := serverInitPayload.MarshalVT()
431
if err != nil {
432
return nil, ErrHandshakeFailed
433
}
@@ -452,7 +451,7 @@ func (h *Handshaker) ServerHandshake(conn io.ReadWriteCloser, alpns []string) (*
451
wipeMemory(ephemeralPriv)
452
453
// Send server init message
455
- serverInitBytes, err := proto.Marshal(serverInit)
454
+ serverInitBytes, err := serverInit.MarshalVT()
455
if err != nil {
456
return nil, ErrHandshakeFailed
457
}