ssh_packet/crypto/
exchange.rs1use binrw::binwrite;
4
5use super::Lengthed;
6use crate::{arch, trans};
7
8#[binwrite]
13#[derive(Debug)]
14#[bw(big)]
15pub struct Ecdh<'b> {
16 pub v_c: arch::Bytes<'b>,
18
19 pub v_s: arch::Bytes<'b>,
21
22 pub i_c: Lengthed<&'b trans::KexInit<'b>>,
24
25 pub i_s: Lengthed<&'b trans::KexInit<'b>>,
27
28 pub k_s: arch::Bytes<'b>,
30
31 pub q_c: arch::Bytes<'b>,
33
34 pub q_s: arch::Bytes<'b>,
36
37 pub k: arch::MpInt<'b>,
39}
40
41impl Ecdh<'_> {
42 #[cfg(feature = "digest")]
44 #[cfg_attr(docsrs, doc(cfg(feature = "digest")))]
45 pub fn hash<D: signature::digest::Digest>(&self) -> signature::digest::Output<D> {
46 use binrw::BinWrite;
47
48 let mut buffer = Vec::new();
49 self.write(&mut std::io::Cursor::new(&mut buffer))
50 .expect("The binrw structure serialization failed");
51
52 D::digest(&buffer)
53 }
54}