Skip to main content

iris_core/protocols/stream/ssh/
handshake.rs

1//! SSH handshake components.
2//!
3
4use crate::utils::base64;
5
6use serde::Serialize;
7
8/// A parsed SSH Protocol Version Exchange message.
9#[derive(Clone, Debug, Default, PartialEq, Serialize)]
10pub struct SshVersionExchange {
11    pub protoversion: Option<String>,
12    pub softwareversion: Option<String>,
13    pub comments: Option<String>,
14}
15
16/// A parsed SSH Key Exchange message.
17#[derive(Debug, PartialEq, Serialize)]
18pub struct SshKeyExchange {
19    #[serde(with = "base64")]
20    pub cookie: Vec<u8>,
21    pub kex_algs: Vec<String>,
22    pub server_host_key_algs: Vec<String>,
23    pub encryption_algs_client_to_server: Vec<String>,
24    pub encryption_algs_server_to_client: Vec<String>,
25    pub mac_algs_client_to_server: Vec<String>,
26    pub mac_algs_server_to_client: Vec<String>,
27    pub compression_algs_client_to_server: Vec<String>,
28    pub compression_algs_server_to_client: Vec<String>,
29    pub languages_client_to_server: Vec<String>,
30    pub languages_server_to_client: Vec<String>,
31    pub first_kex_packet_follows: bool,
32}
33
34/// A parsed Diffie-Hellman Key Exchange message sent by the client.
35#[derive(Debug, Default, Serialize)]
36pub struct SshDhInit {
37    pub e: Vec<u8>,
38}
39
40/// A parsed Diffie-Hellman Key Exchange message sent by the server.
41#[derive(Debug, Default, Serialize)]
42pub struct SshDhResponse {
43    pub pubkey_and_certs: Vec<u8>,
44    pub f: Vec<u8>,
45    pub signature: Vec<u8>,
46}
47
48#[derive(Debug, Default, Serialize)]
49pub struct SshNewKeys;