5POTCWP5BFLZA7Z4KMTXMK44FGG7M3BEBKAO5GNCXMTKZCMDJDYAC
LYRZREY75IOPQJ3DMJJB4SINAEVI5P5TE32SSFO7QKFBDYVXXKNAC
7FRJYUI62VW257VVFQXND6OKSAILVTHGEJCXFE6CG6FIOIUTDVYAC
OBHPOIUH2CPAB2ORVMOGAAQVN4NYP6GHGTIODEQ46VUFNZIUAIRQC
UHAEQPZUODJ5YVBZJPPJVLO7EBW6DC2JXHQBN26ARELAVULG3JUQC
D6H7OWTTMHHX6BTB3B6MNBOBX2L66CBL4LGSEUSAI2MCRCJDQFRQC
32GIIFWR6CUE24WCZJHM2D76QVXV4SNPOUNXJB62LGALJJSWCZUQC
WX7UY5KKUXOHBGPNWJC6ZQDQ3LFGNTKGF6ZQFIPYNI6H5IMWGOYAC
VJIXIN4TVZX2ZELE3H5PVZIO6JIG7JZ3UKEJC7TAUYLOPW6GOGOQC
WXZWQLGLNQ3QRHMBH7YPTHKSPUST4HD34H3PW5E4LHQYH3KLNHYAC
2WEO7OZLWJJPUYK4WXLT5FD46G2MAEIHEYMDW5GASCBUNKOPXCVAC
XEKZBXNINGU2NELIKOQXWY5SS4MOVEVXX3QWQUSN42X7V46CQDKQC
#[cfg(all(feature = "openssl", feature = "p256"))]
pub const DEFAULT_SERVER: Preferred = Preferred {
is_server: true,
kex: &[kex::CURVE25519, kex::STRICT_S],
key: &[
#[cfg(all(feature = "openssl", feature = "p256"))]
macro_rules! key {
() => {
&[
#[cfg(all(feature = "openssl", feature = "p256"))]
pub const DEFAULT_CLIENT: Preferred = Preferred {
is_server: false,
kex: &[kex::CURVE25519, kex::STRICT_C],
key: &[
key::ED25519,
key::ECDSA_SHA2_NISTP256,
key::RSA_SHA2_256,
key::RSA_SHA2_512,
],
cipher: &[cipher::chacha20poly1305::NAME, cipher::aes256_gcm::NAME],
mac: &[mac::hmac_sha256::NAME, mac::Name("none")],
compression: &["none", "zlib", "zlib@openssh.com"],
}
#[cfg(all(feature = "openssl", not(feature = "p256")))]
macro_rules! key {
() => {
&[key::ED25519, key::RSA_SHA2_256, key::RSA_SHA2_512]
#[cfg(all(not(feature = "openssl"), feature = "p256"))]
pub const DEFAULT_SERVER: Preferred = Preferred {
is_server: true,
kex: &[kex::CURVE25519, kex::STRICT_S],
key: &[key::ED25519, key::ECDSA_SHA2_NISTP256],
cipher: &[cipher::chacha20poly1305::NAME],
mac: &[mac::Name("none")],
compression: &["none", "zlib", "zlib@openssh.com"],
#[cfg(all(not(feature = "openssl"), feature = "p256"))]
macro_rules! key {
() => {
&[key::ED25519, key::ECDSA_SHA2_NISTP256]
#[cfg(all(not(feature = "openssl"), feature = "p256"))]
pub const DEFAULT_CLIENT: Preferred = Preferred {
is_server: false,
kex: &[kex::CURVE25519, kex::STRICT_C],
key: &[key::ED25519, key::ECDSA_SHA2_NISTP256],
cipher: &[cipher::chacha20poly1305::NAME],
mac: &[mac::Name("none")],
compression: &["none", "zlib", "zlib@openssh.com"],
#[cfg(all(not(feature = "openssl"), not(feature = "p256")))]
macro_rules! key {
() => {
&[key::ED25519]
#[cfg(all(feature = "openssl", not(feature = "p256")))]
pub const DEFAULT_SERVER: Preferred = Preferred {
is_server: true,
kex: &[kex::CURVE25519, kex::STRICT_S],
key: &[key::ED25519, key::RSA_SHA2_256, key::RSA_SHA2_512],
cipher: &[cipher::chacha20poly1305::NAME, cipher::aes256_gcm::NAME],
mac: &[mac::hmac_sha256::NAME, mac::Name("none")],
compression: &["none", "zlib", "zlib@openssh.com"],
#[cfg(feature = "openssl")]
macro_rules! cipher {
() => {
&[
cipher::chacha20poly1305::NAME,
cipher::aes256_gcm::NAME,
cipher::aes256_ctr::NAME,
]
#[cfg(all(feature = "openssl", not(feature = "p256")))]
pub const DEFAULT_CLIENT: Preferred = Preferred {
is_server: false,
kex: &[kex::CURVE25519, kex::STRICT_C],
key: &[key::ED25519, key::RSA_SHA2_256, key::RSA_SHA2_512],
cipher: &[cipher::chacha20poly1305::NAME, cipher::aes256_gcm::NAME],
mac: &[mac::hmac_sha256::NAME, mac::Name("none")],
compression: &["none", "zlib", "zlib@openssh.com"],
#[cfg(not(feature = "openssl"))]
macro_rules! cipher {
() => {
&[cipher::chacha20poly1305::NAME]
key: &[key::ED25519],
cipher: &[cipher::chacha20poly1305::NAME],
mac: &[mac::Name("none")],
key: key!(),
cipher: cipher!(),
mac: mac!(),
is_server: false,
kex: &[kex::CURVE25519, kex::STRICT_C],
key: &[key::ED25519],
cipher: &[cipher::chacha20poly1305::NAME],
mac: &[mac::Name("none")],
is_server: true,
kex: &[kex::CURVE25519, kex::STRICT_S],
key: key!(),
cipher: cipher!(),
mac: mac!(),
if buffer.len == 0 {
let mut len = [0; 4];
stream.read_exact(&mut len).await?;
let len_block_size = if buffer.len == 0 {
let mut len = [0; MAX_BLOCK_SIZE];
let len = {
let key = pair.remote_to_local.as_opening_key();
&mut len[..key.length_block_size()]
};
stream.read_exact(len).await?;
fn decrypt_packet_length(&self, _seqn: u32, packet_length: [u8; 4]) -> [u8; 4] {
packet_length
fn length_block_size(&self) -> usize {
4
}
fn decrypt_packet_length(&self, _seqn: u32, packet_length: &[u8]) -> u32 {
BigEndian::read_u32(packet_length)