Skip to content

Commit 349051b

Browse files
committed
Removed Deprecated
1 parent 8061205 commit 349051b

File tree

7 files changed

+17
-161
lines changed

7 files changed

+17
-161
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313

1414
### Fixed
1515

16+
### Removed
17+
- Removed deprecated legacy handshake functions (`derive_shared_key`, `verify_server_ack`, `server_handshake_response`)
18+
- Removed deprecated message types (`HandshakeInit`, `HandshakeAck`)
19+
- Removed references to deprecated code from dispatcher, client, and daemon
20+
- Updated API documentation to reflect removal of legacy handshake functionality
21+
1622
### Security
23+
- Enhanced security by removing insecure legacy handshake implementation
1724

1825

1926
## [0.9.3] - 2025-08-17

docs/API.md

Lines changed: 7 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -560,20 +560,19 @@ The `Message` enum defines the types of messages that can be exchanged.
560560
pub enum Message {
561561
Ping,
562562
Pong,
563-
HandshakeInit { client_nonce: u64 },
564-
HandshakeAck { server_nonce: u64 },
563+
SecureHandshakeInit { pub_key: [u8; 32], timestamp: u64, nonce: Vec<u8> },
564+
SecureHandshakeResponse { pub_key: [u8; 32], timestamp: u64, nonce: Vec<u8> },
565+
SecureHandshakeConfirm { nonce_verification: Vec<u8> },
565566
Echo(String),
566567
Disconnect,
567568
Unknown,
569+
Custom { command: String, data: Vec<u8> },
568570
}
569571
```
570572

571573
### Handshake
572574

573-
The handshake module provides functions for performing secure handshakes between client and server. It offers two handshake methods:
574-
575-
1. **Legacy Handshake**: A simple nonce-based handshake (deprecated, maintained for backward compatibility)
576-
2. **Secure ECDH Handshake**: An Elliptic Curve Diffie-Hellman key exchange providing strong security guarantees
575+
The handshake module provides functions for performing secure handshakes between client and server using Elliptic Curve Diffie-Hellman (ECDH) key exchange, offering strong security guarantees including forward secrecy and protection against various attacks.
577576

578577
#### Secure ECDH Handshake
579578

@@ -763,63 +762,9 @@ let server_key = handshake::server_derive_session_key(
763762
handshake::clear_handshake_data();
764763
```
765764

766-
#### Legacy Handshake (Deprecated)
767-
768-
> **Note**: The following functions are deprecated and maintained only for backward compatibility.
769-
770-
##### `client_handshake_init`
771-
772-
Initiates a handshake from the client side.
773-
774-
```rust
775-
pub fn client_handshake_init() -> Message
776-
```
777-
778-
**Returns:**
779-
- `Message`: A `HandshakeInit` message containing a randomly generated nonce
780-
781-
##### `server_handshake_response`
782-
783-
Handles a server-side handshake response.
784-
785-
```rust
786-
pub fn server_handshake_response(client_nonce: u64) -> Message
787-
```
788-
789-
**Parameters:**
790-
- `client_nonce`: The nonce received from the client
791-
792-
**Returns:**
793-
- `Message`: A `HandshakeAck` message containing the server's response nonce
765+
#### Legacy Handshake Support
794766

795-
##### `verify_server_ack`
796-
797-
Verifies the server's handshake response.
798-
799-
```rust
800-
pub fn verify_server_ack(server_nonce: u64, client_nonce: u64) -> bool
801-
```
802-
803-
**Parameters:**
804-
- `server_nonce`: The nonce received from the server
805-
- `client_nonce`: The original client nonce
806-
807-
**Returns:**
808-
- `bool`: `true` if the server's response is valid, `false` otherwise
809-
810-
##### `derive_shared_key`
811-
812-
Generates a 32-byte symmetric key from the client nonce.
813-
814-
```rust
815-
pub fn derive_shared_key(client_nonce: u64) -> [u8; 32]
816-
```
817-
818-
**Parameters:**
819-
- `client_nonce`: The client nonce
820-
821-
**Returns:**
822-
- `[u8; 32]`: A 32-byte symmetric key
767+
> **Note**: Legacy handshake support has been removed from the codebase in favor of the more secure ECDH handshake implementation.
823768
824769
### Dispatcher
825770

src/protocol/dispatcher.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,6 @@ fn get_opcode(msg: &Message) -> String {
5656
Message::Ping => "PING",
5757
Message::Pong => "PONG",
5858
Message::Echo(_) => "ECHO",
59-
// Deprecated handshake messages (still need to handle them)
60-
#[allow(deprecated)]
61-
Message::HandshakeInit { .. } => "HS_INIT",
62-
#[allow(deprecated)]
63-
Message::HandshakeAck { .. } => "HS_ACK",
6459
// Secure handshake messages
6560
Message::SecureHandshakeInit { .. } => "SEC_HS_INIT",
6661
Message::SecureHandshakeResponse { .. } => "SEC_HS_RESP",

src/protocol/handshake.rs

Lines changed: 3 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -598,17 +598,7 @@ fn client_derive_session_key_internal(test_nonce: Option<[u8; 16]>) -> Result<[u
598598
Ok(session_key)
599599
}
600600

601-
/// Derive a shared key from the ECDH exchange using insecure legacy method
602-
/// This should only be used for backward compatibility
603-
#[deprecated(note = "Use derive_secure_key instead")]
604-
pub fn derive_shared_key(client_nonce: u64) -> [u8; 32] {
605-
let mut key = [0u8; 32];
606-
let nonce_bytes = client_nonce.to_le_bytes();
607-
for i in 0..32 {
608-
key[i] = nonce_bytes[i % 8] ^ (0xA5 ^ (i as u8));
609-
}
610-
key
611-
}
601+
// Removed deprecated derive_shared_key function
612602

613603
/// Legacy client handshake function for compatibility
614604
/// Now uses the secure handshake implementation
@@ -643,55 +633,9 @@ pub fn client_handshake_init() -> Result<(u64, Message)> {
643633
}))
644634
}
645635

646-
/// Legacy handshake verification function for compatibility
647-
/// @deprecated Use client_secure_handshake_verify instead
648-
#[deprecated(note = "Use client_secure_handshake_verify instead")]
649-
pub fn verify_server_ack(server_nonce: u64, client_nonce: u64) -> bool {
650-
// Legacy verification simply checks if nonces are not zero
651-
server_nonce != 0 && client_nonce != 0
652-
}
636+
// Removed deprecated verify_server_ack function
653637

654-
/// Legacy server handshake response for compatibility
655-
/// @deprecated Use server_secure_handshake_response instead
656-
#[deprecated(note = "Use server_secure_handshake_response instead")]
657-
pub fn server_handshake_response(client_nonce: u64) -> Message {
658-
let mut rng = OsRng;
659-
let server_nonce = rng.next_u64();
660-
661-
// Generate a server key pair for compatibility with secure handshake
662-
let server_secret = EphemeralSecret::random_from_rng(OsRng);
663-
let server_public = PublicKey::from(&server_secret);
664-
665-
// Convert u64 nonces to proper format
666-
let mut client_nonce_bytes = [0u8; 16];
667-
client_nonce_bytes[0..8].copy_from_slice(&client_nonce.to_le_bytes());
668-
669-
let mut server_nonce_bytes = [0u8; 16];
670-
server_nonce_bytes[0..8].copy_from_slice(&server_nonce.to_le_bytes());
671-
672-
// Create verification hash of client nonce
673-
let nonce_verification = hash_nonce(&client_nonce_bytes);
674-
675-
// Store server keys and nonces
676-
let mut server_keys = SERVER_KEYS.lock().unwrap();
677-
server_keys.secret = Some(server_secret);
678-
server_keys.public = Some(server_public.to_bytes());
679-
server_keys.client_nonce = Some(client_nonce_bytes);
680-
server_keys.server_nonce = Some(server_nonce_bytes);
681-
682-
// Convert client nonce bytes to a proper public key format for compatibility
683-
// This is just for backward compatibility - in real secure handshake this would be a real public key
684-
let mut dummy_client_pub = [0u8; 32];
685-
dummy_client_pub[..16].copy_from_slice(&client_nonce_bytes);
686-
dummy_client_pub[16..32].copy_from_slice(&client_nonce_bytes); // Duplicate to fill 32 bytes
687-
server_keys.client_public = Some(dummy_client_pub);
688-
689-
Message::SecureHandshakeResponse {
690-
pub_key: server_public.to_bytes(),
691-
nonce: server_nonce_bytes,
692-
nonce_verification,
693-
}
694-
}
638+
// Removed deprecated server_handshake_response function
695639

696640
/// Clears handshake data for clean test runs
697641
pub fn clear_handshake_data() -> Result<()> {

src/protocol/message.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,11 @@
1-
#![allow(deprecated)]
2-
31
use serde::{Serialize, Deserialize};
42

53
#[derive(Debug, Serialize, Deserialize, Clone)]
64
#[repr(u8)]
7-
#[allow(deprecated)]
85
pub enum Message {
96
Ping,
107
Pong,
118

12-
/// Legacy handshake types (deprecated)
13-
#[allow(deprecated)]
14-
#[deprecated(note = "Use SecureHandshakeInit instead")]
15-
HandshakeInit { client_nonce: u64 },
16-
#[allow(deprecated)]
17-
#[deprecated(note = "Use SecureHandshakeResponse instead")]
18-
HandshakeAck { server_nonce: u64 },
19-
209
/// Secure handshake using ECDH key exchange
2110
/// Client initiates with its public key and a timestamp to prevent replay attacks
2211
SecureHandshakeInit {

src/service/client.rs

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ use crate::core::packet::Packet;
77
use crate::protocol::message::Message;
88
// Import secure handshake functions
99
use crate::protocol::handshake::{client_secure_handshake_init, client_secure_handshake_verify, client_derive_session_key};
10-
// Keep deprecated imports for reference but commented out
11-
// use crate::protocol::handshake::{client_handshake_init, verify_server_ack, derive_shared_key};
1210
use crate::service::secure::SecureConnection;
1311
use crate::transport::remote;
1412
use crate::error::{Result, ProtocolError};
@@ -30,26 +28,6 @@ impl Client {
3028
// // Legacy handshake process
3129
// let (client_nonce, handshake) = client_handshake_init();
3230
//
33-
// let handshake_bytes = bincode::serialize(&handshake)?;
34-
// framed.send(Packet {
35-
// version: 1,
36-
// payload: handshake_bytes,
37-
// }).await?;
38-
//
39-
// let packet = framed.next().await.ok_or(ProtocolError::Timeout)??;
40-
// let ack: Message = bincode::deserialize(&packet.payload)?;
41-
// match ack {
42-
// Message::HandshakeAck { server_nonce } => {
43-
// if !verify_server_ack(server_nonce, client_nonce) {
44-
// return Err(ProtocolError::HandshakeError("Invalid handshake ack".into()));
45-
// }
46-
// }
47-
// _ => return Err(ProtocolError::UnexpectedMessage),
48-
// }
49-
//
50-
// Ok(derive_shared_key(client_nonce))
51-
// }
52-
5331
// --- Secure Handshake Process ---
5432
// Step 1: Send client init with public key, nonce, and timestamp
5533
let init_msg = client_secure_handshake_init()?;

src/service/daemon.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ use crate::core::packet::Packet;
1111
use crate::protocol::message::Message;
1212
// Import secure handshake functions
1313
use crate::protocol::handshake::{server_secure_handshake_response, server_secure_handshake_finalize, clear_handshake_data};
14-
// Legacy imports (commented out for reference)
15-
// use crate::protocol::handshake::{server_handshake_response, derive_shared_key};
1614
use crate::protocol::dispatcher::Dispatcher;
1715
use crate::service::secure::SecureConnection;
1816
use crate::error::{Result, ProtocolError};

0 commit comments

Comments
 (0)