Implement SSH Compression Phase 2: Integration

- Add compression_ctos/compression_stoc to EncryptionContext
- Default impl: CompressionContext::new(6)
- from_session_keys(): initialize compression fields
- enable_compression() method (based on KEX negotiation)
- server.rs: enable compression after NEWKEYS (if negotiated)

All 179 tests pass.
This commit is contained in:
Warren
2026-06-21 01:51:39 +08:00
parent a5375075b8
commit 93e33b04a7
2 changed files with 29 additions and 0 deletions

View File

@@ -321,6 +321,16 @@ fn perform_complete_kex_exchange(
info!("Setting cipher mode to AES-CTR (MtE)");
encryption_ctx.set_cipher_mode(CipherMode::AesCtr)?;
}
// Phase 2: 根据 KEX 协商结果启用压缩compression_ctos / compression_stoc
let compression_ctos = &kex_result.compression_ctos;
let compression_stoc = &kex_result.compression_stoc;
info!("KEX negotiated compression algorithms: ctos={}, stoc={}", compression_ctos, compression_stoc);
if compression_ctos != "none" || compression_stoc != "none" {
info!("Enabling SSH compression");
encryption_ctx.enable_compression(compression_ctos, compression_stoc);
}
Ok(encryption_ctx)
}