[][src]Struct shadowsocks::crypto::openssl::OpenSSLCipher

pub struct OpenSSLCipher { /* fields omitted */ }

The Cipher binding for OpenSSL's libcrypto.

It should be noticed that the decipher needs to read the iv (initialization vector) from the first call of decrypt. So the cipher will have to insert the iv into the front of the encrypted data.

Note: This behavior works just the same as the official version of shadowsocks.

use shadowsocks::crypto::{openssl::OpenSSLCipher, CipherType, CryptoMode, StreamCipher};

let method = CipherType::Aes128Cfb;

let key = method.bytes_to_key(b"password");
let iv = method.gen_init_vec();

let mut enc = OpenSSLCipher::new(method, &key[0..], &iv[0..], CryptoMode::Encrypt);
let mut dec = OpenSSLCipher::new(method, &key[0..], &iv[0..], CryptoMode::Decrypt);

let message = "hello world";
let mut encrypted_message = Vec::new();
enc.update(message.as_bytes(), &mut encrypted_message).unwrap();

let mut decrypted_message = Vec::new();
dec.update(&encrypted_message[..], &mut decrypted_message).unwrap();

assert!(&decrypted_message[..] == message.as_bytes());

Implementations

impl OpenSSLCipher[src]

pub fn new(
    cipher_type: CipherType,
    key: &[u8],
    iv: &[u8],
    mode: CryptoMode
) -> OpenSSLCipher
[src]

Creates by type

Trait Implementations

impl Send for OpenSSLCipher[src]

impl StreamCipher for OpenSSLCipher[src]

Auto Trait Implementations

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

impl<T> From<T> for T[src]

impl<T> Instrument for T[src]

impl<T> Instrument for T[src]

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

impl<T> Same<T> for T[src]

type Output = T

Should always be Self

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

impl<T> UnsafeAny for T where
    T: Any

impl<V, T> VZip<V> for T where
    V: MultiLane<T>,