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 }