Compare commits

..

3 Commits

Author SHA1 Message Date
dff1b88a23 feat: v0.1.1 add simple bench 2023-09-03 14:21:27 +08:00
18503e70b9 feat: rm Cargo.lock 2023-09-02 19:40:15 +08:00
e0ffd77d8a feat: rm Cargo.lock 2023-09-02 19:39:56 +08:00
6 changed files with 69 additions and 83 deletions

1
.gitignore vendored
View File

@@ -1,2 +1,3 @@
Cargo.lock
target/ target/
.idea/ .idea/

77
Cargo.lock generated
View File

@@ -1,77 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
]
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "hex"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
[[package]]
name = "hmac-sm3"
version = "0.1.0"
dependencies = [
"hex",
"sm3",
]
[[package]]
name = "sm3"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebb9a3b702d0a7e33bc4d85a14456633d2b165c2ad839c5fd9a8417c1ab15860"
dependencies = [
"digest",
]
[[package]]
name = "typenum"
version = "1.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
[[package]]
name = "version_check"
version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"

View File

@@ -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"

View File

@@ -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
View 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 _));
}

View File

@@ -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";