handshake: Add ix_hybrid_mlkem1024, DefinedNet/noise hybrid IX with ML-KEM-1024 over version 3 certificates

This commit is contained in:
JackDoan committed 2026-10-14 10:50:33 -05:00
1 parent 1a8fb8d67e
commit ab89556c5c
8 files changed
+401 -31

No files matched your search

+10 -4
View File
@@ -72,12 +72,17 @@ const (
// in through the psk2 slot. Its messages exceed the MTU and travel as
// fragments (see handshake/fragment).
HandshakeIXPSK2MLKEM1024 MessageSubType = 2
// HandshakeIXHybridMLKEM1024 is the hybrid IX of github.com/DefinedNet/noise:
// IX with X25519 or P256 and ML-KEM-1024 side by side, authenticated by
// version 3 certificates. It takes three messages and travels as fragments.
HandshakeIXHybridMLKEM1024 MessageSubType = 3
)
// IsFragmented reports whether handshake messages of this subtype travel as
// fragments.
func IsFragmented(st MessageSubType) bool {
return st == HandshakeIXPSK2MLKEM1024
return st == HandshakeIXPSK2MLKEM1024 || st == HandshakeIXHybridMLKEM1024
}
var ErrHeaderTooShort = errors.New("header is too short")
@@ -99,8 +104,9 @@ var subTypeMap = map[MessageType]*map[MessageSubType]string{
Test: &subTypeTestMap,
CloseTunnel: &subTypeNoneMap,
Handshake: {
HandshakeIXPSK0: "ix_psk0",
HandshakeIXPSK2MLKEM1024: "ix_psk2_mlkem1024",
HandshakeIXPSK0: "ix_psk0",
HandshakeIXPSK2MLKEM1024: "ix_psk2_mlkem1024",
HandshakeIXHybridMLKEM1024: "ix_hybrid_mlkem1024",
},
Control: &subTypeNoneMap,
}
@@ -211,7 +217,7 @@ func IsValidSubType(t MessageType, s MessageSubType) bool {
case Message:
return s == MessageNone || s == MessageRelay
case Handshake:
return s == HandshakeIXPSK0 || s == HandshakeIXPSK2MLKEM1024
return s == HandshakeIXPSK0 || s == HandshakeIXPSK2MLKEM1024 || s == HandshakeIXHybridMLKEM1024
case Test:
return s == TestReply || s == TestRequest
case Control, CloseTunnel, RecvError, LightHouse:
+3 -2
View File
@@ -96,8 +96,9 @@ func TestTypeMap(t *testing.T) {
Test: &subTypeTestMap,
CloseTunnel: &subTypeNoneMap,
Handshake: {
HandshakeIXPSK0: "ix_psk0",
HandshakeIXPSK2MLKEM1024: "ix_psk2_mlkem1024",
HandshakeIXPSK0: "ix_psk0",
HandshakeIXPSK2MLKEM1024: "ix_psk2_mlkem1024",
HandshakeIXHybridMLKEM1024: "ix_hybrid_mlkem1024",
},
Control: &subTypeNoneMap,
}, subTypeMap)