feat(transport): 完成安全架构拆分并收口 stream/bulk 传输优化
- 新增 managed/external/nested 三种传输保护模式 - 新增 peer attach 显式认证、抗重放、channel binding 和可选前向保密协商 - 明确单连接注入与可重拨连接源的语义边界 - 禁止 ConnectByConn 场景下 dedicated bulk 走 sidecar,auto 模式自动回退 shared - 修正 dedicated attach 在 bootstrap/steady profile 切换下的处理逻辑 - 优化 shared bulk super-batch 与批量 framed write 路径 - 降低 stream/bulk fast path 的复制和分发损耗 - 补齐 benchmark、回归测试、运行时快照和 README 文档
This commit is contained in:
+33
-10
@@ -9,7 +9,10 @@ var (
|
||||
errTransportPayloadDecryptFailed = errors.New("transport payload decrypt failed")
|
||||
)
|
||||
|
||||
func encryptTransportPayloadCodec(runtime *modernPSKCodecRuntime, msgEn func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, error) {
|
||||
func encryptTransportPayloadCodec(mode ProtectionMode, runtime *modernPSKCodecRuntime, msgEn func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, error) {
|
||||
if mode == ProtectionExternal {
|
||||
return data, nil
|
||||
}
|
||||
if runtime != nil {
|
||||
encoded, err := runtime.sealPlainPayload(data)
|
||||
if err != nil {
|
||||
@@ -27,7 +30,10 @@ func encryptTransportPayloadCodec(runtime *modernPSKCodecRuntime, msgEn func([]b
|
||||
return encoded, nil
|
||||
}
|
||||
|
||||
func decryptTransportPayloadCodec(runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, error) {
|
||||
func decryptTransportPayloadCodec(mode ProtectionMode, runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, error) {
|
||||
if mode == ProtectionExternal {
|
||||
return data, nil
|
||||
}
|
||||
if runtime != nil {
|
||||
plain, err := runtime.openPayload(data)
|
||||
if err != nil {
|
||||
@@ -45,7 +51,10 @@ func decryptTransportPayloadCodec(runtime *modernPSKCodecRuntime, msgDe func([]b
|
||||
return plain, nil
|
||||
}
|
||||
|
||||
func decryptTransportPayloadCodecPooled(runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte, release func()) ([]byte, func(), error) {
|
||||
func decryptTransportPayloadCodecPooled(mode ProtectionMode, runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte, release func()) ([]byte, func(), error) {
|
||||
if mode == ProtectionExternal {
|
||||
return data, release, nil
|
||||
}
|
||||
if runtime != nil {
|
||||
plain, plainRelease, err := runtime.openPayloadPooled(data, release)
|
||||
if err != nil {
|
||||
@@ -69,7 +78,10 @@ func decryptTransportPayloadCodecPooled(runtime *modernPSKCodecRuntime, msgDe fu
|
||||
return plain, nil, nil
|
||||
}
|
||||
|
||||
func decryptTransportPayloadCodecOwnedPooled(runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, func(), error) {
|
||||
func decryptTransportPayloadCodecOwnedPooled(mode ProtectionMode, runtime *modernPSKCodecRuntime, msgDe func([]byte, []byte) []byte, secretKey []byte, data []byte) ([]byte, func(), error) {
|
||||
if mode == ProtectionExternal {
|
||||
return data, nil, nil
|
||||
}
|
||||
if runtime != nil {
|
||||
plain, plainRelease, err := runtime.openPayloadOwnedPooled(data)
|
||||
if err != nil {
|
||||
@@ -124,9 +136,14 @@ func (s *ServerCommon) encodeTransferMsg(c *ClientConn, msg TransferMsg) ([]byte
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
logical := logicalConnFromClient(c)
|
||||
msgEn := c.clientConnMsgEnSnapshot()
|
||||
secretKey := c.clientConnSecretKeySnapshot()
|
||||
data, err = encryptTransportPayloadCodec(c.clientConnModernPSKRuntimeSnapshot(), msgEn, secretKey, data)
|
||||
mode := ProtectionManaged
|
||||
if logical != nil {
|
||||
mode = logical.protectionModeSnapshot()
|
||||
}
|
||||
data, err = encryptTransportPayloadCodec(mode, c.clientConnModernPSKRuntimeSnapshot(), msgEn, secretKey, data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -140,7 +157,11 @@ func (s *ServerCommon) encodeTransferMsg(c *ClientConn, msg TransferMsg) ([]byte
|
||||
func (s *ServerCommon) decodeTransferMsg(c *ClientConn, data []byte) (TransferMsg, error) {
|
||||
msgDe := c.clientConnMsgDeSnapshot()
|
||||
secretKey := c.clientConnSecretKeySnapshot()
|
||||
plain, err := decryptTransportPayloadCodec(c.clientConnModernPSKRuntimeSnapshot(), msgDe, secretKey, data)
|
||||
mode := ProtectionManaged
|
||||
if logical := logicalConnFromClient(c); logical != nil {
|
||||
mode = logical.protectionModeSnapshot()
|
||||
}
|
||||
plain, err := decryptTransportPayloadCodec(mode, c.clientConnModernPSKRuntimeSnapshot(), msgDe, secretKey, data)
|
||||
if err != nil {
|
||||
return TransferMsg{}, err
|
||||
}
|
||||
@@ -172,7 +193,8 @@ func (c *ClientCommon) encodeEnvelopePlain(env Envelope) ([]byte, error) {
|
||||
}
|
||||
|
||||
func (c *ClientCommon) encryptTransportPayload(data []byte) ([]byte, error) {
|
||||
return encryptTransportPayloadCodec(c.modernPSKRuntime, c.msgEn, c.SecretKey, data)
|
||||
profile := c.clientTransportProtectionSnapshot()
|
||||
return encryptTransportPayloadCodec(profile.mode, profile.runtime, profile.msgEn, profile.secretKey, data)
|
||||
}
|
||||
|
||||
func (c *ClientCommon) encodeEnvelope(env Envelope) ([]byte, error) {
|
||||
@@ -196,7 +218,8 @@ func (c *ClientCommon) decodeEnvelope(data []byte) (Envelope, error) {
|
||||
}
|
||||
|
||||
func (c *ClientCommon) decryptTransportPayload(data []byte) ([]byte, error) {
|
||||
return decryptTransportPayloadCodec(c.modernPSKRuntime, c.msgDe, c.SecretKey, data)
|
||||
profile := c.clientTransportProtectionSnapshot()
|
||||
return decryptTransportPayloadCodec(profile.mode, profile.runtime, profile.msgDe, profile.secretKey, data)
|
||||
}
|
||||
|
||||
func (c *ClientCommon) decodeEnvelopePlain(data []byte) (Envelope, error) {
|
||||
@@ -251,7 +274,7 @@ func (s *ServerCommon) encryptTransportPayloadLogical(logical *LogicalConn, data
|
||||
if msgEn == nil {
|
||||
return nil, errTransportDetached
|
||||
}
|
||||
return encryptTransportPayloadCodec(logical.modernPSKRuntimeSnapshot(), msgEn, secretKey, data)
|
||||
return encryptTransportPayloadCodec(logical.protectionModeSnapshot(), logical.modernPSKRuntimeSnapshot(), msgEn, secretKey, data)
|
||||
}
|
||||
|
||||
func (s *ServerCommon) encodeEnvelopeLogical(logical *LogicalConn, env Envelope) ([]byte, error) {
|
||||
@@ -290,7 +313,7 @@ func (s *ServerCommon) decryptTransportPayloadLogical(logical *LogicalConn, data
|
||||
if msgDe == nil {
|
||||
return nil, errTransportDetached
|
||||
}
|
||||
return decryptTransportPayloadCodec(logical.modernPSKRuntimeSnapshot(), msgDe, secretKey, data)
|
||||
return decryptTransportPayloadCodec(logical.protectionModeSnapshot(), logical.modernPSKRuntimeSnapshot(), msgDe, secretKey, data)
|
||||
}
|
||||
|
||||
func (s *ServerCommon) decodeEnvelopePlain(data []byte) (Envelope, error) {
|
||||
|
||||
Reference in New Issue
Block a user