From 34fbefb13a39df1566404d8152709219930a37b7 Mon Sep 17 00:00:00 2001 From: "Y. T. Chung" Date: Fri, 24 Oct 2014 17:09:59 +0800 Subject: [PATCH] add two benchmarks --- src/crypto/mod.rs | 1 + src/crypto/openssl.rs | 48 ++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/src/crypto/mod.rs b/src/crypto/mod.rs index 664c9099..55a8a18d 100644 --- a/src/crypto/mod.rs +++ b/src/crypto/mod.rs @@ -22,6 +22,7 @@ //! Crypto methods for shadowsocks extern crate libc; +extern crate test; pub mod cipher; pub mod openssl; diff --git a/src/crypto/openssl.rs b/src/crypto/openssl.rs index 116c5ac3..120a001f 100644 --- a/src/crypto/openssl.rs +++ b/src/crypto/openssl.rs @@ -23,6 +23,7 @@ extern crate libc; extern crate log; +extern crate test; use crypto::cipher::Cipher; use crypto::cipher; @@ -409,7 +410,7 @@ impl Cipher for OpenSSLCipher { } #[test] -fn test_aes() { +fn test_default_ciphers() { use std::str; let message = "hello world"; @@ -454,3 +455,48 @@ fn test_aes() { assert!(message.as_bytes() == decrypted_msg.as_slice()); } } + +#[bench] +fn bench_openssl_default_cipher_encrypt(b: &mut test::Bencher) { + use std::rand::random; + + let msg_size: uint = 0xffff; + + let mut test_data = Vec::new(); + for _ in range::(0, 100) { + let msg = Vec::from_fn(msg_size, |_| random::()); + let key = Vec::from_fn(1 + random::() % 63, |_| random::()); + + test_data.push((msg, key)); + } + + b.iter(|| { + let (ref msg, ref key) = test_data[random::() % test_data.len()]; + + let mut cipher = OpenSSLCipher::new(cipher::CipherTypeAes256Cfb, key.as_slice()); + cipher.encrypt(msg.as_slice()); + }); + b.bytes = msg_size as u64; +} + +#[bench] +fn bench_openssl_default_cipher_decrypt(b: &mut test::Bencher) { + use std::rand::random; + + let msg_size: uint = 0xffff; + let mut test_data = Vec::new(); + for _ in range::(0, 100) { + let msg = Vec::from_fn(msg_size, |_| random::()); + let key = Vec::from_fn(1 + random::() % 63, |_| random::()); + let mut cipher = OpenSSLCipher::new(cipher::CipherTypeAes256Cfb, key.as_slice()); + let encrypted_msg = cipher.encrypt(msg.as_slice()); + test_data.push((key, encrypted_msg)); + } + + b.iter(|| { + let (ref key, ref encrypted_msg) = test_data[random::() % test_data.len()]; + let mut cipher = OpenSSLCipher::new(cipher::CipherTypeAes256Cfb, key.as_slice()); + cipher.decrypt(encrypted_msg.as_slice()); + }); + b.bytes = msg_size as u64; +}