mirror of
https://gitlab.redox-os.org/CoffeeCode/redox-ssh.git
synced 2025-12-28 19:02:19 +01:00
Update to Rust Edition 2021 and fix compilation errors
This commit is contained in:
parent
1103eb0eec
commit
86f0cc82c3
11 changed files with 38 additions and 32 deletions
|
|
@ -1,6 +1,7 @@
|
||||||
[package]
|
[package]
|
||||||
name = "redox-ssh"
|
name = "redox-ssh"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
authors = ["Thomas Gatzweiler <mail@thomasgatzweiler.com>"]
|
authors = ["Thomas Gatzweiler <mail@thomasgatzweiler.com>"]
|
||||||
|
|
||||||
[lib]
|
[lib]
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,8 @@
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::str::FromStr;
|
use std::str::FromStr;
|
||||||
|
|
||||||
use error::{ConnectionError, ConnectionResult};
|
use crate::error::{ConnectionError, ConnectionResult};
|
||||||
use key_exchange::{self, KeyExchange};
|
use crate::key_exchange::{self, KeyExchange};
|
||||||
|
|
||||||
/// Slice of implemented key exchange algorithms, ordered by preference
|
/// Slice of implemented key exchange algorithms, ordered by preference
|
||||||
pub static KEY_EXCHANGE: &[KeyExchangeAlgorithm] =
|
pub static KEY_EXCHANGE: &[KeyExchangeAlgorithm] =
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@ use std::os::unix::process::CommandExt;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
use std::process::{self, Stdio};
|
use std::process::{self, Stdio};
|
||||||
use std::thread::{self, JoinHandle};
|
use std::thread::{self, JoinHandle};
|
||||||
use sys;
|
|
||||||
|
use crate::sys;
|
||||||
|
|
||||||
pub type ChannelId = u32;
|
pub type ChannelId = u32;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,15 +2,16 @@ use std::collections::{BTreeMap, VecDeque};
|
||||||
use std::io::{self, BufReader, Read, Write};
|
use std::io::{self, BufReader, Read, Write};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use channel::{Channel, ChannelId, ChannelRequest};
|
|
||||||
use encryption::{AesCtr, Decryptor, Encryption};
|
|
||||||
use error::{ConnectionError, ConnectionResult as Result};
|
|
||||||
use key_exchange::{KexResult, KeyExchange};
|
|
||||||
use mac::{Hmac, MacAlgorithm};
|
|
||||||
use message::MessageType;
|
|
||||||
use packet::{Packet, ReadPacketExt, WritePacketExt};
|
|
||||||
use rand::distributions::Standard;
|
use rand::distributions::Standard;
|
||||||
use server::ServerConfig;
|
|
||||||
|
use crate::channel::{Channel, ChannelId, ChannelRequest};
|
||||||
|
use crate::encryption::{AesCtr, Decryptor, Encryption};
|
||||||
|
use crate::error::{ConnectionError, ConnectionResult as Result};
|
||||||
|
use crate::key_exchange::{KexResult, KeyExchange};
|
||||||
|
use crate::mac::{Hmac, MacAlgorithm};
|
||||||
|
use crate::message::MessageType;
|
||||||
|
use crate::packet::{Packet, ReadPacketExt, WritePacketExt};
|
||||||
|
use crate::server::ServerConfig;
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
enum ConnectionState {
|
enum ConnectionState {
|
||||||
|
|
@ -364,7 +365,7 @@ impl<'a> Connection {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn kex_init(&mut self, packet: Packet) -> Result<Option<Packet>> {
|
fn kex_init(&mut self, packet: Packet) -> Result<Option<Packet>> {
|
||||||
use algorithm::*;
|
use crate::algorithm::*;
|
||||||
|
|
||||||
let (kex_algo, srv_host_key_algo, enc_algo, mac_algo, comp_algo) = {
|
let (kex_algo, srv_host_key_algo, enc_algo, mac_algo, comp_algo) = {
|
||||||
let mut reader = packet.reader();
|
let mut reader = packet.reader();
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
use crypto::aes::{KeySize, ctr};
|
use crypto::aes::{KeySize, ctr};
|
||||||
use crypto::symmetriccipher::SynchronousStreamCipher;
|
use crypto::symmetriccipher::SynchronousStreamCipher;
|
||||||
|
|
||||||
use encryption::Encryption;
|
use crate::encryption::Encryption;
|
||||||
|
|
||||||
pub struct AesCtr {
|
pub struct AesCtr {
|
||||||
cipher: Box<dyn SynchronousStreamCipher + 'static>,
|
cipher: Box<dyn SynchronousStreamCipher + 'static>,
|
||||||
|
|
|
||||||
|
|
@ -1,13 +1,14 @@
|
||||||
use connection::{Connection, ConnectionType};
|
|
||||||
use crypto::curve25519;
|
use crypto::curve25519;
|
||||||
use crypto::digest::Digest;
|
use crypto::digest::Digest;
|
||||||
use crypto::sha2::Sha256;
|
use crypto::sha2::Sha256;
|
||||||
use key_exchange::{KexResult, KeyExchange};
|
|
||||||
use message::MessageType;
|
|
||||||
use num_bigint::{BigInt, Sign};
|
use num_bigint::{BigInt, Sign};
|
||||||
use packet::{Packet, ReadPacketExt, WritePacketExt};
|
|
||||||
use rand::RngCore;
|
use rand::RngCore;
|
||||||
|
|
||||||
|
use crate::connection::{Connection, ConnectionType};
|
||||||
|
use crate::key_exchange::{KexResult, KeyExchange};
|
||||||
|
use crate::message::MessageType;
|
||||||
|
use crate::packet::{Packet, ReadPacketExt, WritePacketExt};
|
||||||
|
|
||||||
const ECDH_KEX_INIT: u8 = 30;
|
const ECDH_KEX_INIT: u8 = 30;
|
||||||
const ECDH_KEX_REPLY: u8 = 31;
|
const ECDH_KEX_REPLY: u8 = 31;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,8 @@ mod curve25519;
|
||||||
pub use self::curve25519::Curve25519;
|
pub use self::curve25519::Curve25519;
|
||||||
// pub use self::dh_group_sha1::DhGroupSha1;
|
// pub use self::dh_group_sha1::DhGroupSha1;
|
||||||
|
|
||||||
use connection::Connection;
|
use crate::connection::Connection;
|
||||||
use packet::Packet;
|
use crate::packet::Packet;
|
||||||
|
|
||||||
pub enum KexResult {
|
pub enum KexResult {
|
||||||
Ok(Packet),
|
Ok(Packet),
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
use crypto::hmac::Hmac as rcHmac;
|
use crypto::hmac::Hmac as rcHmac;
|
||||||
use crypto::mac::Mac;
|
use crypto::mac::Mac;
|
||||||
use crypto::sha2::Sha256;
|
use crypto::sha2::Sha256;
|
||||||
use mac::MacAlgorithm;
|
|
||||||
|
use crate::mac::MacAlgorithm;
|
||||||
|
|
||||||
pub struct Hmac {
|
pub struct Hmac {
|
||||||
hmac: Box<rcHmac<Sha256>>,
|
hmac: Box<rcHmac<Sha256>>,
|
||||||
|
|
|
||||||
|
|
@ -3,10 +3,10 @@ use std::io::{self, BufReader, Read, Result, Write};
|
||||||
use std::str::{self, FromStr};
|
use std::str::{self, FromStr};
|
||||||
|
|
||||||
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
|
use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
|
||||||
|
|
||||||
use message::MessageType;
|
|
||||||
use num_bigint::BigInt;
|
use num_bigint::BigInt;
|
||||||
|
|
||||||
|
use crate::message::MessageType;
|
||||||
|
|
||||||
pub enum Packet {
|
pub enum Packet {
|
||||||
Raw(Vec<u8>, usize),
|
Raw(Vec<u8>, usize),
|
||||||
Payload(Vec<u8>),
|
Payload(Vec<u8>),
|
||||||
|
|
|
||||||
|
|
@ -2,8 +2,9 @@ use std::io::{self, Read, Write};
|
||||||
use std::io::ErrorKind::InvalidData;
|
use std::io::ErrorKind::InvalidData;
|
||||||
|
|
||||||
use crypto::ed25519;
|
use crypto::ed25519;
|
||||||
use public_key::{CryptoSystem, KeyPair};
|
use rand::RngCore;
|
||||||
use rand::{Rng, RngCore};
|
|
||||||
|
use crate::public_key::{CryptoSystem, KeyPair};
|
||||||
|
|
||||||
pub static ED25519: CryptoSystem = CryptoSystem {
|
pub static ED25519: CryptoSystem = CryptoSystem {
|
||||||
id: "ed25519",
|
id: "ed25519",
|
||||||
|
|
@ -31,7 +32,7 @@ impl Ed25519KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn import(mut r: &mut dyn Read) -> io::Result<Box<dyn KeyPair>> {
|
fn import(mut r: &mut dyn Read) -> io::Result<Box<dyn KeyPair>> {
|
||||||
use packet::ReadPacketExt;
|
use crate::packet::ReadPacketExt;
|
||||||
|
|
||||||
if r.read_utf8()? != "ssh-ed25519" {
|
if r.read_utf8()? != "ssh-ed25519" {
|
||||||
return Err(io::Error::new(InvalidData, "not a ED25519 key"));
|
return Err(io::Error::new(InvalidData, "not a ED25519 key"));
|
||||||
|
|
@ -58,7 +59,7 @@ impl Ed25519KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn read_public(mut r: &mut dyn Read) -> io::Result<Box<dyn KeyPair>> {
|
fn read_public(mut r: &mut dyn Read) -> io::Result<Box<dyn KeyPair>> {
|
||||||
use packet::ReadPacketExt;
|
use crate::packet::ReadPacketExt;
|
||||||
|
|
||||||
if r.read_uint32()? != 32 {
|
if r.read_uint32()? != 32 {
|
||||||
return Err(io::Error::new(InvalidData, "invalid ED25519 key"));
|
return Err(io::Error::new(InvalidData, "invalid ED25519 key"));
|
||||||
|
|
@ -84,7 +85,7 @@ impl KeyPair for Ed25519KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn verify(&self, data: &[u8], signature: &[u8]) -> Result<bool, ()> {
|
fn verify(&self, data: &[u8], signature: &[u8]) -> Result<bool, ()> {
|
||||||
use packet::ReadPacketExt;
|
use crate::packet::ReadPacketExt;
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
|
|
||||||
let mut reader = Cursor::new(signature);
|
let mut reader = Cursor::new(signature);
|
||||||
|
|
@ -99,7 +100,7 @@ impl KeyPair for Ed25519KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign(&self, data: &[u8]) -> Result<Vec<u8>, ()> {
|
fn sign(&self, data: &[u8]) -> Result<Vec<u8>, ()> {
|
||||||
use packet::WritePacketExt;
|
use crate::packet::WritePacketExt;
|
||||||
if let Some(private_key) = self.private {
|
if let Some(private_key) = self.private {
|
||||||
let mut result = Vec::new();
|
let mut result = Vec::new();
|
||||||
let sig = ed25519::signature(data, &private_key);
|
let sig = ed25519::signature(data, &private_key);
|
||||||
|
|
@ -113,13 +114,13 @@ impl KeyPair for Ed25519KeyPair {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn write_public(&self, w: &mut dyn Write) -> io::Result<()> {
|
fn write_public(&self, w: &mut dyn Write) -> io::Result<()> {
|
||||||
use packet::WritePacketExt;
|
use crate::packet::WritePacketExt;
|
||||||
w.write_string("ssh-ed25519")?;
|
w.write_string("ssh-ed25519")?;
|
||||||
w.write_bytes(&self.public)
|
w.write_bytes(&self.public)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn export(&self, w: &mut dyn Write) -> io::Result<()> {
|
fn export(&self, w: &mut dyn Write) -> io::Result<()> {
|
||||||
use packet::WritePacketExt;
|
use crate::packet::WritePacketExt;
|
||||||
w.write_string("ssh-ed25519")?;
|
w.write_string("ssh-ed25519")?;
|
||||||
w.write_bytes(&self.public)?;
|
w.write_bytes(&self.public)?;
|
||||||
if let Some(private_key) = self.private {
|
if let Some(private_key) = self.private {
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ use std::net::TcpListener;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
use std::thread;
|
use std::thread;
|
||||||
|
|
||||||
use connection::{Connection, ConnectionType};
|
use crate::connection::{Connection, ConnectionType};
|
||||||
use public_key::KeyPair;
|
use crate::public_key::KeyPair;
|
||||||
|
|
||||||
pub struct ServerConfig {
|
pub struct ServerConfig {
|
||||||
pub host: String,
|
pub host: String,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue