From 1be942686e1fc91346121c9c8f1457f076250ab9 Mon Sep 17 00:00:00 2001 From: Maxime THIEBAUT <46688461+0xThiebaut@users.noreply.github.com> Date: Fri, 24 Oct 2025 20:35:48 +0200 Subject: [PATCH] Expose ServerHello (un)marshal Allow external code to parse raw server hellos, similar to the client hellos. --- u_public.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/u_public.go b/u_public.go index 7b2461c0..76bc876c 100644 --- a/u_public.go +++ b/u_public.go @@ -352,6 +352,22 @@ func (shm *serverHelloMsg) getPublicPtr() *PubServerHelloMsg { } } +// UnmarshalServerHello allows external code to parse raw server hellos. +// It returns nil on failure. +func UnmarshalServerHello(data []byte) *PubServerHelloMsg { + m := &serverHelloMsg{} + if m.unmarshal(data) { + return m.getPublicPtr() + } + return nil +} + +// Marshal allows external code to convert a ServerHello object back into +// raw bytes. +func (shm *PubServerHelloMsg) Marshal() ([]byte, error) { + return shm.getPrivatePtr().marshal() +} + type PubClientHelloMsg struct { Raw []byte // renamed to clientHelloMsg.original in crypto/tls Vers uint16