feat: v0.1.1 add simple bench
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "hmac-sm3"
|
name = "hmac-sm3"
|
||||||
version = "0.1.0"
|
version = "0.1.1"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
authors = ["Hatter Jiang"]
|
authors = ["Hatter Jiang"]
|
||||||
repository = "https://git.hatter.ink/hatter/hmac-sm3"
|
repository = "https://git.hatter.ink/hatter/hmac-sm3"
|
||||||
@@ -14,6 +14,8 @@ categories = ["cryptography"]
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
sm3 = "0.4.2"
|
sm3 = "0.4.2"
|
||||||
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
hex = "0.4.3"
|
hex = "0.4.3"
|
||||||
|
hmac-sha1 = "0.1.3"
|
||||||
|
hmac-sha256 = "1.1.7"
|
||||||
|
benchmark-simple = "0.1.8"
|
||||||
|
|||||||
@@ -19,3 +19,10 @@ let hmac2 = hm.finalize();
|
|||||||
assert_eq!("9d91da552268ddf11b9f69662773a66c6375b250336dfb9293e7e2611c36d79f", hex::encode(hmac2));
|
assert_eq!("9d91da552268ddf11b9f69662773a66c6375b250336dfb9293e7e2611c36d79f", hex::encode(hmac2));
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Benchmark @MacBook Pro (Retina, 15-inch, Late 2013/2 GHz Quad-Core Intel Core i7)
|
||||||
|
```text
|
||||||
|
$ cargo run --release --example bench
|
||||||
|
HMAC-SM3 : 219.19 M/s
|
||||||
|
HMAC-SHA1 : 228.57 M/s
|
||||||
|
HMAC-SHA256 : 204.96 M/s
|
||||||
|
```
|
||||||
|
|||||||
46
examples/bench.rs
Normal file
46
examples/bench.rs
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
use benchmark_simple::{Bench, Options};
|
||||||
|
|
||||||
|
use hmac_sm3::hmac_sm3;
|
||||||
|
|
||||||
|
fn test_hmac_sm3(m: &mut [u8]) {
|
||||||
|
let key = [0u8; 32];
|
||||||
|
|
||||||
|
hmac_sm3(&key, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_hmac_sha1(m: &mut [u8]) {
|
||||||
|
let key = [0u8; 32];
|
||||||
|
|
||||||
|
hmacsha1::hmac_sha1(&key, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test_hmac_sha256(m: &mut [u8]) {
|
||||||
|
let key = [0u8; 32];
|
||||||
|
|
||||||
|
let mut hsha256 = hmac_sha256::HMAC::new(&key);
|
||||||
|
hsha256.update(m);
|
||||||
|
hsha256.finalize();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let bench = Bench::new();
|
||||||
|
let mut m = vec![0xd0u8; 16384];
|
||||||
|
|
||||||
|
let options = &Options {
|
||||||
|
iterations: 1_000,
|
||||||
|
warmup_iterations: 1_00,
|
||||||
|
min_samples: 5,
|
||||||
|
max_samples: 10,
|
||||||
|
max_rsd: 1.0,
|
||||||
|
..Default::default()
|
||||||
|
};
|
||||||
|
|
||||||
|
let res = bench.run(options, || test_hmac_sm3(&mut m));
|
||||||
|
println!("HMAC-SM3 : {}", res.throughput(m.len() as _));
|
||||||
|
|
||||||
|
let res = bench.run(options, || test_hmac_sha1(&mut m));
|
||||||
|
println!("HMAC-SHA1 : {}", res.throughput(m.len() as _));
|
||||||
|
|
||||||
|
let res = bench.run(options, || test_hmac_sha256(&mut m));
|
||||||
|
println!("HMAC-SHA256 : {}", res.throughput(m.len() as _));
|
||||||
|
}
|
||||||
15
src/lib.rs
15
src/lib.rs
@@ -11,7 +11,7 @@ pub struct HmacSm3 {
|
|||||||
|
|
||||||
impl HmacSm3 {
|
impl HmacSm3 {
|
||||||
pub fn new(key: &[u8]) -> Self {
|
pub fn new(key: &[u8]) -> Self {
|
||||||
let mut structured_key = vec![0_u8; BLOCK_LENGTH];
|
let mut structured_key = [0_u8; BLOCK_LENGTH];
|
||||||
if key.len() > BLOCK_LENGTH {
|
if key.len() > BLOCK_LENGTH {
|
||||||
structured_key[0..SM3_OUTPUT_LENGTH].copy_from_slice(sm3_digest(&key).as_slice());
|
structured_key[0..SM3_OUTPUT_LENGTH].copy_from_slice(sm3_digest(&key).as_slice());
|
||||||
} else {
|
} else {
|
||||||
@@ -39,9 +39,7 @@ impl HmacSm3 {
|
|||||||
|
|
||||||
pub fn finalize(&mut self) -> Vec<u8> {
|
pub fn finalize(&mut self) -> Vec<u8> {
|
||||||
let ipad_message_digest = self.sm3.clone().finalize();
|
let ipad_message_digest = self.sm3.clone().finalize();
|
||||||
let mut opad_ipad_message_digest = self.opad.to_vec();
|
sm3_digest_2(&self.opad, &ipad_message_digest).as_slice().to_vec()
|
||||||
opad_ipad_message_digest.extend_from_slice(ipad_message_digest.as_slice());
|
|
||||||
sm3_digest(&opad_ipad_message_digest).as_slice().to_vec()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,12 +49,21 @@ pub fn hmac_sm3(key: &[u8], message: &[u8]) -> Vec<u8> {
|
|||||||
hsm3.finalize()
|
hsm3.finalize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
fn sm3_digest(message: &[u8]) -> Output<Sm3> {
|
fn sm3_digest(message: &[u8]) -> Output<Sm3> {
|
||||||
let mut sm3 = Sm3::new();
|
let mut sm3 = Sm3::new();
|
||||||
sm3.update(&message);
|
sm3.update(&message);
|
||||||
sm3.finalize()
|
sm3.finalize()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn sm3_digest_2(message: &[u8], message2: &[u8]) -> Output<Sm3> {
|
||||||
|
let mut sm3 = Sm3::new();
|
||||||
|
sm3.update(&message);
|
||||||
|
sm3.update(&message2);
|
||||||
|
sm3.finalize()
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_001() {
|
fn test_001() {
|
||||||
let message = b"Hello World";
|
let message = b"Hello World";
|
||||||
|
|||||||
Reference in New Issue
Block a user