mirror of
https://github.com/shadowsocks/shadowsocks-rust.git
synced 2026-02-09 01:59:16 +08:00
construct cipher inside stream wrapper
This commit is contained in:
@@ -27,8 +27,7 @@ use std::rc::Rc;
|
||||
use std::mem;
|
||||
use std::time::Duration;
|
||||
|
||||
use crypto;
|
||||
use crypto::{CryptoMode, CipherCategory};
|
||||
use crypto::CipherCategory;
|
||||
use relay::socks5::Address;
|
||||
use relay::{BoxIoFuture, boxed_future};
|
||||
use relay::dns_resolver::DnsResolver;
|
||||
@@ -248,12 +247,7 @@ pub fn proxy_handshake(remote_stream: TcpStream,
|
||||
match svr_cfg.method().category() {
|
||||
CipherCategory::Stream => {
|
||||
let local_iv = prev_buf;
|
||||
let encryptor = crypto::new_stream(svr_cfg.method(),
|
||||
svr_cfg.key(),
|
||||
&local_iv[..],
|
||||
CryptoMode::Encrypt);
|
||||
|
||||
Ok(From::from(StreamEncryptedWriter::new(w, encryptor)))
|
||||
Ok(From::from(StreamEncryptedWriter::new(w, svr_cfg.method(), svr_cfg.key(), &local_iv)))
|
||||
}
|
||||
CipherCategory::Aead => {
|
||||
let local_salt = prev_buf;
|
||||
@@ -282,16 +276,11 @@ pub fn proxy_handshake(remote_stream: TcpStream,
|
||||
match svr_cfg.method().category() {
|
||||
CipherCategory::Stream => {
|
||||
trace!("Got initialize vector {:?}", remote_iv);
|
||||
|
||||
let decryptor = crypto::new_stream(svr_cfg.method(),
|
||||
svr_cfg.key(),
|
||||
&remote_iv[..],
|
||||
CryptoMode::Decrypt);
|
||||
let decrypt_stream = StreamDecryptedReader::new(r, decryptor);
|
||||
|
||||
let decrypt_stream = StreamDecryptedReader::new(r, svr_cfg.method(), svr_cfg.key(), &remote_iv);
|
||||
Ok(From::from(decrypt_stream))
|
||||
}
|
||||
CipherCategory::Aead => {
|
||||
trace!("Got salt {:?}", remote_iv);
|
||||
let dr = AeadDecryptedReader::new(r, svr_cfg.method(), svr_cfg.key(), &remote_iv[..]);
|
||||
Ok(From::from(dr))
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
use std::io::{self, Read, BufRead, Write};
|
||||
use std::cmp;
|
||||
|
||||
use crypto::{StreamCipher, StreamCipherVariant};
|
||||
use crypto::{CipherType, StreamCipher, StreamCipherVariant, CryptoMode, new_stream};
|
||||
|
||||
use super::BUFFER_SIZE;
|
||||
use super::{EncryptedWrite, DecryptedRead};
|
||||
@@ -41,11 +41,11 @@ pub struct DecryptedReader<R>
|
||||
impl<R> DecryptedReader<R>
|
||||
where R: Read
|
||||
{
|
||||
pub fn new(r: R, cipher: StreamCipherVariant) -> DecryptedReader<R> {
|
||||
pub fn new(r: R, t: CipherType, key: &[u8], iv: &[u8]) -> DecryptedReader<R> {
|
||||
DecryptedReader {
|
||||
reader: r,
|
||||
buffer: Vec::new(),
|
||||
cipher: cipher,
|
||||
cipher: new_stream(t, key, iv, CryptoMode::Decrypt),
|
||||
pos: 0,
|
||||
sent_final: false,
|
||||
}
|
||||
@@ -139,10 +139,10 @@ impl<W> EncryptedWriter<W>
|
||||
where W: Write
|
||||
{
|
||||
/// Creates a new EncryptedWriter
|
||||
pub fn new(w: W, cipher: StreamCipherVariant) -> EncryptedWriter<W> {
|
||||
pub fn new(w: W, t: CipherType, key: &[u8], iv: &[u8]) -> EncryptedWriter<W> {
|
||||
EncryptedWriter {
|
||||
writer: w,
|
||||
cipher: cipher,
|
||||
cipher: new_stream(t, key, iv, CryptoMode::Encrypt),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user