Windows X64 AMD Ryzen 5 7600X Hash Benchmarks
Machine Profile
Machine Specification
The benchmarks were run on the following machine:
BenchmarkDotNet v0.15.8, Windows 11 (10.0.26200.8037/25H2/2025Update/HudsonValley2)
AMD Ryzen 5 7600X 4.70GHz, 1 CPU, 12 logical and 6 physical cores
.NET SDK 10.0.201
[Host] : .NET 10.0.5 (10.0.5, 10.0.526.15411), X64 RyuJIT x86-64-v4
.NET 10.0 : .NET 10.0.5 (10.0.5, 10.0.526.15411), X64 RyuJIT x86-64-v4
Job=.NET 10.0 Runtime=.NET 10.0 Toolchain=net10.0
Note: Results are machine-specific and may vary between systems. Run benchmarks locally for your specific hardware.
BenchmarkDotNet measurements for all hash algorithm implementations in CryptoHives.Foundation.Security.Cryptography. Each algorithm is benchmarked across representative payload sizes (128 bytes through 128 KiB) to capture both latency and throughput characteristics.
Implementations are compared against:
- OS — .NET's built-in
System.Security.Cryptography (backed by CNG/OpenSSL)
- BouncyCastle — BouncyCastle C# library
- Native — Platform-specific native libraries (e.g., blake3-dotnet)
- Managed — CryptoHives managed implementation (scalar)
- SIMD — CryptoHives SIMD variants (SSE2, SSSE3, AVX2, AVX-512F)
Highlights
| Family |
Leader |
Key Insight |
| SHA-2 |
OS (SHA-NI) |
Hardware SHA-NI gives OS ~4.5× advantage; managed outperforms BouncyCastle by ~13% |
| SHA-3/Keccak |
Managed |
Scalar Keccak outperforms OS by ~30% and SIMD variants by 25–35% |
| BLAKE2b/2s |
Managed SIMD |
BLAKE2s SIMD on parity with BouncyCastle; BLAKE2b AVX2 within ~20% |
| BLAKE3 |
Native (Rust) |
Rust interop ~1.4× faster at small inputs, ~12× at large due to multi-chunk parallelism; SSSE3 managed ~4× faster than BouncyCastle |
| Streebog |
Managed |
1.4–1.8× faster than OpenGost/BouncyCastle |
| Kupyna |
Managed |
T-table optimization ~30–45% faster than BouncyCastle |
| KMAC |
Managed |
~30% faster than OS and ~48% faster than BouncyCastle at all sizes |
| Ascon |
Managed |
~33% faster than BouncyCastle across all input sizes |
SHA-2 Family
The OS SHA-256/SHA-512 implementations leverage SHA-NI hardware instructions (available on AMD Zen+ and Intel Ice Lake+), providing ~4.5× speedup over any software implementation. For pure managed code, CryptoHives outperforms BouncyCastle by approximately 13% through loop unrolling and hardcoded round constants.
Key observations:
- OS: Uses SHA-NI hardware acceleration
- Managed: Optimized scalar with unrolled rounds
- BouncyCastle: Reference scalar implementation
SHA-224
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-224 · Managed |
128B |
474.8 ns |
3.66 ns |
3.06 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
128B |
553.0 ns |
3.52 ns |
3.29 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-224 · Managed |
137B |
477.4 ns |
1.83 ns |
1.72 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
137B |
557.6 ns |
3.89 ns |
3.64 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-224 · Managed |
1KB |
2,655.9 ns |
17.26 ns |
16.14 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
1KB |
3,073.9 ns |
10.18 ns |
8.50 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-224 · Managed |
1025B |
2,659.4 ns |
15.66 ns |
14.65 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
1025B |
3,078.5 ns |
12.85 ns |
11.39 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-224 · Managed |
8KB |
20,103.9 ns |
126.06 ns |
117.91 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
8KB |
23,237.4 ns |
96.77 ns |
90.52 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-224 · Managed |
128KB |
318,282.1 ns |
1,286.13 ns |
1,140.12 ns |
- |
| TryComputeHash · SHA-224 · BouncyCastle |
128KB |
368,758.2 ns |
1,008.89 ns |
842.47 ns |
- |
SHA-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-256 · OS Native |
128B |
106.7 ns |
0.27 ns |
0.24 ns |
- |
| TryComputeHash · SHA-256 · Managed |
128B |
474.7 ns |
1.98 ns |
1.85 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
128B |
544.2 ns |
2.56 ns |
2.27 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-256 · OS Native |
137B |
106.7 ns |
0.30 ns |
0.25 ns |
- |
| TryComputeHash · SHA-256 · Managed |
137B |
474.6 ns |
1.57 ns |
1.31 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
137B |
557.2 ns |
2.91 ns |
2.72 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-256 · OS Native |
1KB |
463.4 ns |
1.19 ns |
1.05 ns |
- |
| TryComputeHash · SHA-256 · Managed |
1KB |
2,649.9 ns |
14.01 ns |
11.70 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
1KB |
3,043.7 ns |
14.94 ns |
13.97 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-256 · OS Native |
1025B |
463.9 ns |
0.67 ns |
0.63 ns |
- |
| TryComputeHash · SHA-256 · Managed |
1025B |
2,663.3 ns |
11.45 ns |
10.71 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
1025B |
3,035.9 ns |
14.55 ns |
13.61 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-256 · OS Native |
8KB |
3,277.3 ns |
6.70 ns |
6.27 ns |
- |
| TryComputeHash · SHA-256 · Managed |
8KB |
19,990.4 ns |
55.85 ns |
49.51 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
8KB |
22,966.2 ns |
142.29 ns |
133.10 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-256 · OS Native |
128KB |
51,518.9 ns |
85.85 ns |
76.11 ns |
- |
| TryComputeHash · SHA-256 · Managed |
128KB |
317,562.8 ns |
2,088.27 ns |
1,953.37 ns |
- |
| TryComputeHash · SHA-256 · BouncyCastle |
128KB |
363,487.9 ns |
1,536.17 ns |
1,436.93 ns |
- |
SHA-384
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-384 · OS Native |
128B |
347.5 ns |
1.04 ns |
0.92 ns |
- |
| TryComputeHash · SHA-384 · Managed |
128B |
402.5 ns |
0.95 ns |
0.79 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
128B |
473.6 ns |
1.64 ns |
1.37 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-384 · OS Native |
137B |
346.3 ns |
2.23 ns |
2.09 ns |
- |
| TryComputeHash · SHA-384 · Managed |
137B |
404.0 ns |
1.87 ns |
1.75 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
137B |
477.1 ns |
1.71 ns |
1.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-384 · OS Native |
1KB |
1,387.3 ns |
6.93 ns |
6.14 ns |
- |
| TryComputeHash · SHA-384 · Managed |
1KB |
1,782.3 ns |
8.23 ns |
7.70 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
1KB |
2,107.9 ns |
14.36 ns |
11.99 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-384 · OS Native |
1025B |
1,389.2 ns |
10.17 ns |
9.52 ns |
- |
| TryComputeHash · SHA-384 · Managed |
1025B |
1,783.0 ns |
5.05 ns |
4.48 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
1025B |
2,098.8 ns |
5.67 ns |
5.02 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-384 · OS Native |
8KB |
9,691.0 ns |
21.71 ns |
19.25 ns |
- |
| TryComputeHash · SHA-384 · Managed |
8KB |
12,778.5 ns |
55.31 ns |
49.03 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
8KB |
15,098.1 ns |
31.93 ns |
26.66 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-384 · OS Native |
128KB |
152,267.4 ns |
644.11 ns |
602.50 ns |
- |
| TryComputeHash · SHA-384 · Managed |
128KB |
201,016.9 ns |
915.32 ns |
856.19 ns |
- |
| TryComputeHash · SHA-384 · BouncyCastle |
128KB |
237,533.1 ns |
1,329.50 ns |
1,243.62 ns |
- |
SHA-512
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-512 · OS Native |
128B |
343.2 ns |
1.41 ns |
1.25 ns |
- |
| TryComputeHash · SHA-512 · Managed |
128B |
402.9 ns |
2.08 ns |
1.95 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
128B |
477.3 ns |
3.47 ns |
3.24 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512 · OS Native |
137B |
342.6 ns |
1.76 ns |
1.56 ns |
- |
| TryComputeHash · SHA-512 · Managed |
137B |
403.8 ns |
1.09 ns |
1.02 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
137B |
479.7 ns |
1.61 ns |
1.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512 · OS Native |
1KB |
1,385.0 ns |
8.30 ns |
7.77 ns |
- |
| TryComputeHash · SHA-512 · Managed |
1KB |
1,781.4 ns |
8.89 ns |
8.31 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
1KB |
2,104.9 ns |
11.42 ns |
10.68 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512 · OS Native |
1025B |
1,384.3 ns |
4.88 ns |
4.07 ns |
- |
| TryComputeHash · SHA-512 · Managed |
1025B |
1,784.8 ns |
7.75 ns |
7.25 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
1025B |
2,108.4 ns |
13.03 ns |
12.19 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512 · OS Native |
8KB |
9,675.1 ns |
45.96 ns |
42.99 ns |
- |
| TryComputeHash · SHA-512 · Managed |
8KB |
12,753.5 ns |
34.74 ns |
30.80 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
8KB |
15,071.4 ns |
42.14 ns |
35.19 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512 · OS Native |
128KB |
152,288.9 ns |
740.78 ns |
692.93 ns |
- |
| TryComputeHash · SHA-512 · Managed |
128KB |
201,652.5 ns |
921.70 ns |
862.16 ns |
- |
| TryComputeHash · SHA-512 · BouncyCastle |
128KB |
237,709.5 ns |
928.76 ns |
868.76 ns |
- |
SHA-512/224
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-512/224 · Managed |
128B |
402.6 ns |
1.48 ns |
1.39 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
128B |
487.1 ns |
1.59 ns |
1.33 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/224 · Managed |
137B |
402.7 ns |
1.81 ns |
1.69 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
137B |
494.1 ns |
1.69 ns |
1.41 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/224 · Managed |
1KB |
1,781.9 ns |
7.05 ns |
6.59 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
1KB |
2,116.2 ns |
19.84 ns |
15.49 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/224 · Managed |
1025B |
1,785.2 ns |
7.57 ns |
7.08 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
1025B |
2,116.8 ns |
8.08 ns |
6.75 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/224 · Managed |
8KB |
12,747.8 ns |
56.60 ns |
52.94 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
8KB |
15,079.3 ns |
51.50 ns |
45.66 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/224 · Managed |
128KB |
200,583.3 ns |
696.17 ns |
581.34 ns |
- |
| TryComputeHash · SHA-512/224 · BouncyCastle |
128KB |
238,232.2 ns |
931.40 ns |
871.23 ns |
- |
SHA-512/256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-512/256 · Managed |
128B |
401.8 ns |
1.80 ns |
1.60 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
128B |
491.2 ns |
2.79 ns |
2.61 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/256 · Managed |
137B |
404.0 ns |
2.63 ns |
2.46 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
137B |
495.5 ns |
2.81 ns |
2.63 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/256 · Managed |
1KB |
1,780.8 ns |
8.67 ns |
8.11 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
1KB |
2,118.0 ns |
9.94 ns |
8.30 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/256 · Managed |
1025B |
1,778.3 ns |
5.70 ns |
5.05 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
1025B |
2,121.6 ns |
8.96 ns |
7.48 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/256 · Managed |
8KB |
12,755.1 ns |
51.84 ns |
45.95 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
8KB |
15,106.1 ns |
51.82 ns |
48.47 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-512/256 · Managed |
128KB |
201,291.2 ns |
1,233.41 ns |
1,153.73 ns |
- |
| TryComputeHash · SHA-512/256 · BouncyCastle |
128KB |
237,375.7 ns |
644.88 ns |
571.67 ns |
- |
Keccak-derived Families
The managed Keccak core uses an optimized scalar implementation that outperforms both the OS-provided SHA-3 and SIMD variants (AVX2/AVX-512F). This is unusual—typically SIMD accelerates cryptographic operations—but Keccak's irregular permutation structure doesn't map efficiently to SIMD lanes.
Key observations:
- Managed scalar is ~30% faster than OS SHA-3 and 25–35% faster than SIMD variants
- SIMD implementations (AVX2/AVX-512F) are provided but disabled by default
- All Keccak-derived algorithms (SHA-3, SHAKE, cSHAKE, TurboSHAKE, KT) share the same optimized core
SHA-3 Family
SHA3-224
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA3-224 · Managed |
128B |
213.9 ns |
1.26 ns |
1.18 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
128B |
287.6 ns |
0.75 ns |
0.70 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
128B |
300.5 ns |
0.89 ns |
0.83 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
128B |
331.7 ns |
1.19 ns |
1.05 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-224 · Managed |
137B |
212.0 ns |
1.00 ns |
0.94 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
137B |
280.9 ns |
1.20 ns |
1.06 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
137B |
289.4 ns |
0.66 ns |
0.62 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
137B |
333.0 ns |
1.06 ns |
0.99 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-224 · Managed |
1KB |
1,641.8 ns |
13.87 ns |
12.97 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
1KB |
2,221.0 ns |
7.02 ns |
6.56 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
1KB |
2,284.1 ns |
5.74 ns |
5.09 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
1KB |
2,462.3 ns |
8.32 ns |
7.79 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-224 · Managed |
1025B |
1,636.7 ns |
9.80 ns |
9.17 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
1025B |
2,218.9 ns |
5.15 ns |
4.81 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
1025B |
2,279.0 ns |
7.82 ns |
6.93 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
1025B |
2,460.0 ns |
10.78 ns |
9.56 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-224 · Managed |
8KB |
11,229.1 ns |
38.76 ns |
32.36 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
8KB |
15,354.3 ns |
45.31 ns |
42.39 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
8KB |
15,746.8 ns |
50.88 ns |
47.59 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
8KB |
17,363.5 ns |
94.86 ns |
88.73 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-224 · Managed |
128KB |
179,442.5 ns |
755.75 ns |
669.95 ns |
- |
| TryComputeHash · SHA3-224 · AVX2 |
128KB |
245,328.8 ns |
1,120.44 ns |
993.24 ns |
- |
| TryComputeHash · SHA3-224 · AVX512F |
128KB |
251,811.9 ns |
1,269.50 ns |
1,125.38 ns |
- |
| TryComputeHash · SHA3-224 · BouncyCastle |
128KB |
277,721.5 ns |
623.30 ns |
520.48 ns |
- |
SHA3-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA3-256 · Managed |
128B |
208.1 ns |
1.25 ns |
1.11 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
128B |
274.1 ns |
1.99 ns |
1.86 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
128B |
280.6 ns |
1.02 ns |
0.96 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
128B |
290.7 ns |
1.78 ns |
1.57 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
128B |
329.3 ns |
0.97 ns |
0.81 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-256 · Managed |
137B |
461.8 ns |
2.40 ns |
2.24 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
137B |
504.3 ns |
2.90 ns |
2.57 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
137B |
609.8 ns |
1.13 ns |
1.00 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
137B |
629.8 ns |
1.45 ns |
1.36 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
137B |
630.2 ns |
2.52 ns |
2.24 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-256 · Managed |
1KB |
1,618.9 ns |
10.68 ns |
9.99 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
1KB |
1,917.8 ns |
15.01 ns |
14.04 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
1KB |
2,206.5 ns |
10.11 ns |
8.44 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
1KB |
2,255.7 ns |
5.87 ns |
5.49 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
1KB |
2,454.7 ns |
14.42 ns |
13.49 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-256 · Managed |
1025B |
1,615.0 ns |
6.79 ns |
6.35 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
1025B |
1,905.3 ns |
12.98 ns |
11.50 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
1025B |
2,191.8 ns |
6.58 ns |
6.15 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
1025B |
2,249.4 ns |
6.12 ns |
5.72 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
1025B |
2,457.4 ns |
8.74 ns |
7.75 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-256 · Managed |
8KB |
12,035.4 ns |
57.42 ns |
50.90 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
8KB |
14,383.1 ns |
100.15 ns |
93.68 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
8KB |
16,446.5 ns |
28.20 ns |
25.00 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
8KB |
16,946.8 ns |
43.93 ns |
41.09 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
8KB |
18,496.8 ns |
97.01 ns |
86.00 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-256 · Managed |
128KB |
189,183.0 ns |
839.73 ns |
785.48 ns |
- |
| TryComputeHash · SHA3-256 · OS Native |
128KB |
225,852.5 ns |
1,374.34 ns |
1,218.32 ns |
- |
| TryComputeHash · SHA3-256 · AVX2 |
128KB |
259,252.1 ns |
510.63 ns |
477.65 ns |
- |
| TryComputeHash · SHA3-256 · AVX512F |
128KB |
266,058.3 ns |
495.19 ns |
413.51 ns |
- |
| TryComputeHash · SHA3-256 · BouncyCastle |
128KB |
292,550.0 ns |
908.96 ns |
805.77 ns |
- |
SHA3-384
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA3-384 · Managed |
128B |
437.3 ns |
1.70 ns |
1.59 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
128B |
501.2 ns |
4.20 ns |
3.93 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
128B |
588.3 ns |
1.43 ns |
1.27 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
128B |
605.2 ns |
1.25 ns |
1.11 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
128B |
626.1 ns |
1.86 ns |
1.55 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-384 · Managed |
137B |
433.1 ns |
2.37 ns |
2.22 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
137B |
501.0 ns |
2.78 ns |
2.61 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
137B |
584.5 ns |
1.33 ns |
1.04 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
137B |
600.3 ns |
1.74 ns |
1.45 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
137B |
625.7 ns |
3.20 ns |
2.99 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-384 · Managed |
1KB |
1,971.5 ns |
12.95 ns |
12.11 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
1KB |
2,360.6 ns |
14.59 ns |
13.65 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
1KB |
2,707.2 ns |
4.20 ns |
3.28 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
1KB |
2,777.8 ns |
6.58 ns |
5.50 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
1KB |
3,044.7 ns |
11.75 ns |
10.41 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-384 · Managed |
1025B |
1,976.8 ns |
10.25 ns |
9.59 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
1025B |
2,363.3 ns |
16.71 ns |
15.63 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
1025B |
2,707.3 ns |
5.56 ns |
4.93 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
1025B |
2,778.5 ns |
7.19 ns |
6.37 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
1025B |
3,036.8 ns |
15.66 ns |
14.65 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-384 · Managed |
8KB |
15,437.5 ns |
139.61 ns |
130.59 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
8KB |
18,421.8 ns |
119.05 ns |
111.36 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
8KB |
21,188.0 ns |
39.37 ns |
36.83 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
8KB |
21,748.3 ns |
45.40 ns |
40.24 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
8KB |
23,655.2 ns |
85.93 ns |
71.76 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-384 · Managed |
128KB |
246,400.1 ns |
1,466.62 ns |
1,371.88 ns |
- |
| TryComputeHash · SHA3-384 · OS Native |
128KB |
293,007.6 ns |
1,125.98 ns |
940.24 ns |
- |
| TryComputeHash · SHA3-384 · AVX2 |
128KB |
337,722.8 ns |
870.52 ns |
814.29 ns |
- |
| TryComputeHash · SHA3-384 · AVX512F |
128KB |
346,931.9 ns |
562.56 ns |
526.22 ns |
- |
| TryComputeHash · SHA3-384 · BouncyCastle |
128KB |
379,422.1 ns |
1,993.61 ns |
1,864.83 ns |
- |
SHA3-512
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA3-512 · Managed |
128B |
410.9 ns |
1.82 ns |
1.70 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
128B |
501.2 ns |
4.68 ns |
4.38 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
128B |
558.9 ns |
1.67 ns |
1.56 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
128B |
577.4 ns |
2.51 ns |
2.23 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
128B |
626.1 ns |
3.10 ns |
2.59 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-512 · Managed |
137B |
399.9 ns |
2.23 ns |
2.09 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
137B |
503.2 ns |
5.56 ns |
5.20 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
137B |
547.4 ns |
2.08 ns |
1.85 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
137B |
561.4 ns |
1.43 ns |
1.19 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
137B |
627.3 ns |
4.27 ns |
3.99 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-512 · Managed |
1KB |
2,948.2 ns |
18.78 ns |
17.56 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
1KB |
3,503.3 ns |
13.73 ns |
12.17 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
1KB |
4,042.3 ns |
10.05 ns |
8.91 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
1KB |
4,156.1 ns |
21.35 ns |
17.83 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
1KB |
4,505.0 ns |
27.87 ns |
26.07 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-512 · Managed |
1025B |
2,939.9 ns |
23.92 ns |
22.37 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
1025B |
3,505.9 ns |
20.23 ns |
18.92 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
1025B |
4,036.9 ns |
10.10 ns |
9.45 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
1025B |
4,153.2 ns |
11.04 ns |
9.22 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
1025B |
4,493.9 ns |
24.78 ns |
23.18 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-512 · Managed |
8KB |
22,111.7 ns |
139.26 ns |
130.26 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
8KB |
26,373.1 ns |
152.16 ns |
142.33 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
8KB |
30,411.7 ns |
58.42 ns |
54.65 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
8KB |
31,203.0 ns |
75.71 ns |
67.11 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
8KB |
34,092.3 ns |
158.38 ns |
148.15 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA3-512 · Managed |
128KB |
352,843.3 ns |
1,856.06 ns |
1,736.16 ns |
- |
| TryComputeHash · SHA3-512 · OS Native |
128KB |
420,651.8 ns |
1,747.83 ns |
1,634.92 ns |
- |
| TryComputeHash · SHA3-512 · AVX2 |
128KB |
485,908.9 ns |
618.03 ns |
578.11 ns |
- |
| TryComputeHash · SHA3-512 · AVX512F |
128KB |
501,116.0 ns |
1,507.32 ns |
1,409.94 ns |
- |
| TryComputeHash · SHA3-512 · BouncyCastle |
128KB |
545,815.0 ns |
3,644.89 ns |
3,409.43 ns |
- |
Keccak Family
Keccak-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Keccak-256 · Managed |
128B |
211.1 ns |
0.99 ns |
0.92 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
128B |
281.9 ns |
1.43 ns |
1.27 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
128B |
290.0 ns |
0.61 ns |
0.57 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
128B |
329.4 ns |
2.01 ns |
1.88 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-256 · Managed |
137B |
461.2 ns |
1.73 ns |
1.61 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
137B |
610.6 ns |
1.14 ns |
1.06 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
137B |
625.8 ns |
3.63 ns |
3.40 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
137B |
629.5 ns |
1.51 ns |
1.34 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-256 · Managed |
1KB |
1,609.0 ns |
4.48 ns |
3.74 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
1KB |
2,193.9 ns |
6.43 ns |
6.01 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
1KB |
2,257.0 ns |
5.06 ns |
4.73 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
1KB |
2,456.4 ns |
14.32 ns |
13.39 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-256 · Managed |
1025B |
1,611.0 ns |
5.68 ns |
5.32 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
1025B |
2,196.1 ns |
9.82 ns |
8.70 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
1025B |
2,255.8 ns |
4.04 ns |
3.78 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
1025B |
2,447.7 ns |
13.35 ns |
11.84 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-256 · Managed |
8KB |
12,023.9 ns |
43.01 ns |
33.58 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
8KB |
16,455.3 ns |
38.99 ns |
36.47 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
8KB |
16,902.9 ns |
49.90 ns |
44.24 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
8KB |
18,508.8 ns |
102.73 ns |
91.07 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-256 · Managed |
128KB |
189,312.2 ns |
608.44 ns |
539.36 ns |
- |
| TryComputeHash · Keccak-256 · AVX2 |
128KB |
259,226.8 ns |
538.46 ns |
503.67 ns |
- |
| TryComputeHash · Keccak-256 · AVX512F |
128KB |
266,411.8 ns |
1,337.70 ns |
1,117.04 ns |
- |
| TryComputeHash · Keccak-256 · BouncyCastle |
128KB |
291,838.0 ns |
1,090.34 ns |
966.55 ns |
- |
Keccak-384
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Keccak-384 · Managed |
128B |
437.3 ns |
2.76 ns |
2.58 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
128B |
586.9 ns |
1.48 ns |
1.39 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
128B |
607.4 ns |
1.44 ns |
1.20 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
128B |
623.6 ns |
4.38 ns |
4.10 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-384 · Managed |
137B |
435.5 ns |
1.82 ns |
1.70 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
137B |
584.1 ns |
1.46 ns |
1.29 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
137B |
603.1 ns |
1.45 ns |
1.35 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
137B |
624.4 ns |
4.46 ns |
4.18 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-384 · Managed |
1KB |
1,973.0 ns |
11.79 ns |
10.46 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
1KB |
2,704.9 ns |
5.92 ns |
5.54 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
1KB |
2,781.8 ns |
5.02 ns |
4.19 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
1KB |
3,041.5 ns |
9.73 ns |
8.63 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-384 · Managed |
1025B |
1,971.5 ns |
17.73 ns |
16.59 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
1025B |
2,695.8 ns |
4.47 ns |
3.97 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
1025B |
2,790.1 ns |
11.88 ns |
10.53 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
1025B |
3,042.1 ns |
17.61 ns |
16.48 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-384 · Managed |
8KB |
15,399.7 ns |
66.96 ns |
59.36 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
8KB |
21,194.1 ns |
36.02 ns |
33.70 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
8KB |
21,797.6 ns |
44.02 ns |
39.03 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
8KB |
23,814.0 ns |
63.91 ns |
56.65 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-384 · Managed |
128KB |
245,553.5 ns |
1,417.93 ns |
1,256.96 ns |
- |
| TryComputeHash · Keccak-384 · AVX2 |
128KB |
336,844.7 ns |
1,001.68 ns |
887.96 ns |
- |
| TryComputeHash · Keccak-384 · AVX512F |
128KB |
347,933.4 ns |
944.25 ns |
837.06 ns |
- |
| TryComputeHash · Keccak-384 · BouncyCastle |
128KB |
381,363.7 ns |
2,875.67 ns |
2,401.32 ns |
- |
Keccak-512
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Keccak-512 · Managed |
128B |
407.2 ns |
2.00 ns |
1.87 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
128B |
557.8 ns |
1.28 ns |
1.07 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
128B |
578.5 ns |
1.17 ns |
1.09 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
128B |
623.1 ns |
3.62 ns |
3.38 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-512 · Managed |
137B |
400.4 ns |
1.51 ns |
1.34 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
137B |
547.9 ns |
2.74 ns |
2.29 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
137B |
560.5 ns |
1.21 ns |
1.13 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
137B |
623.0 ns |
2.13 ns |
1.78 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-512 · Managed |
1KB |
2,937.7 ns |
10.70 ns |
10.01 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
1KB |
4,023.0 ns |
8.55 ns |
8.00 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
1KB |
4,152.0 ns |
7.25 ns |
5.66 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
1KB |
4,498.2 ns |
17.91 ns |
15.88 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-512 · Managed |
1025B |
2,939.5 ns |
10.52 ns |
9.33 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
1025B |
4,033.4 ns |
10.35 ns |
9.68 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
1025B |
4,153.4 ns |
7.77 ns |
7.27 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
1025B |
4,494.8 ns |
13.88 ns |
11.59 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-512 · Managed |
8KB |
22,062.7 ns |
75.81 ns |
67.20 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
8KB |
30,350.5 ns |
66.48 ns |
55.51 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
8KB |
31,273.0 ns |
51.39 ns |
48.07 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
8KB |
34,214.6 ns |
120.30 ns |
112.53 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Keccak-512 · Managed |
128KB |
352,953.2 ns |
1,994.76 ns |
1,865.90 ns |
- |
| TryComputeHash · Keccak-512 · AVX2 |
128KB |
484,018.5 ns |
1,079.69 ns |
1,009.94 ns |
- |
| TryComputeHash · Keccak-512 · AVX512F |
128KB |
499,250.8 ns |
1,355.89 ns |
1,268.30 ns |
- |
| TryComputeHash · Keccak-512 · BouncyCastle |
128KB |
545,445.9 ns |
2,698.10 ns |
2,523.81 ns |
- |
SHAKE Family
SHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHAKE128 · Managed |
128B |
244.1 ns |
1.31 ns |
1.10 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
128B |
315.8 ns |
0.92 ns |
0.86 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
128B |
324.6 ns |
0.87 ns |
0.82 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
128B |
334.0 ns |
1.54 ns |
1.44 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
128B |
358.6 ns |
1.62 ns |
1.52 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE128 · Managed |
137B |
241.7 ns |
1.52 ns |
1.35 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
137B |
312.8 ns |
0.63 ns |
0.55 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
137B |
320.6 ns |
1.04 ns |
0.98 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
137B |
333.0 ns |
1.64 ns |
1.53 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
137B |
358.8 ns |
2.54 ns |
2.37 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE128 · Managed |
1KB |
1,485.8 ns |
4.89 ns |
4.33 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
1KB |
1,777.4 ns |
4.11 ns |
3.43 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
1KB |
1,996.8 ns |
7.95 ns |
7.44 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
1KB |
2,042.9 ns |
5.80 ns |
5.14 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
1KB |
2,170.9 ns |
7.58 ns |
6.72 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE128 · Managed |
1025B |
1,485.0 ns |
10.08 ns |
9.43 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
1025B |
1,773.7 ns |
6.55 ns |
6.12 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
1025B |
1,992.2 ns |
5.76 ns |
5.39 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
1025B |
2,043.4 ns |
3.80 ns |
3.55 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
1025B |
2,161.2 ns |
9.79 ns |
8.68 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE128 · Managed |
8KB |
9,773.8 ns |
52.26 ns |
48.89 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
8KB |
11,695.0 ns |
39.91 ns |
35.38 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
8KB |
13,288.0 ns |
17.78 ns |
15.76 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
8KB |
13,611.2 ns |
22.10 ns |
19.59 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
8KB |
14,992.4 ns |
50.70 ns |
47.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE128 · Managed |
128KB |
155,257.5 ns |
1,757.42 ns |
1,643.89 ns |
- |
| TryComputeHash · SHAKE128 · OS Native |
128KB |
184,993.6 ns |
1,302.82 ns |
1,218.66 ns |
- |
| TryComputeHash · SHAKE128 · AVX2 |
128KB |
211,627.5 ns |
490.62 ns |
458.93 ns |
- |
| TryComputeHash · SHAKE128 · AVX512F |
128KB |
215,844.5 ns |
401.85 ns |
375.89 ns |
- |
| TryComputeHash · SHAKE128 · BouncyCastle |
128KB |
239,279.5 ns |
951.13 ns |
889.69 ns |
- |
SHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHAKE256 · Managed |
128B |
250.4 ns |
1.40 ns |
1.24 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
128B |
326.6 ns |
0.81 ns |
0.68 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
128B |
331.3 ns |
2.13 ns |
1.89 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
128B |
332.5 ns |
1.76 ns |
1.47 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
128B |
355.5 ns |
2.69 ns |
2.52 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE256 · Managed |
137B |
504.5 ns |
5.16 ns |
4.83 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
137B |
590.2 ns |
2.69 ns |
2.51 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
137B |
628.1 ns |
2.39 ns |
2.23 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
137B |
653.0 ns |
2.00 ns |
1.87 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
137B |
678.2 ns |
1.19 ns |
1.00 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE256 · Managed |
1KB |
1,655.1 ns |
10.38 ns |
9.71 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
1KB |
1,992.3 ns |
8.17 ns |
7.24 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
1KB |
2,243.3 ns |
5.24 ns |
4.64 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
1KB |
2,301.7 ns |
7.64 ns |
6.78 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
1KB |
2,460.0 ns |
10.76 ns |
10.07 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE256 · Managed |
1025B |
1,658.6 ns |
13.45 ns |
11.92 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
1025B |
1,999.7 ns |
21.58 ns |
19.13 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
1025B |
2,245.7 ns |
11.51 ns |
10.20 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
1025B |
2,305.9 ns |
4.19 ns |
3.71 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
1025B |
2,522.9 ns |
11.34 ns |
10.61 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE256 · Managed |
8KB |
12,251.7 ns |
57.35 ns |
50.84 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
8KB |
14,402.5 ns |
72.91 ns |
68.20 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
8KB |
16,495.4 ns |
47.78 ns |
44.70 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
8KB |
16,925.4 ns |
44.77 ns |
39.69 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
8KB |
18,488.5 ns |
47.01 ns |
41.68 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHAKE256 · Managed |
128KB |
189,474.0 ns |
932.69 ns |
826.80 ns |
- |
| TryComputeHash · SHAKE256 · OS Native |
128KB |
226,085.8 ns |
1,248.89 ns |
1,168.21 ns |
- |
| TryComputeHash · SHAKE256 · AVX2 |
128KB |
259,193.5 ns |
452.91 ns |
401.49 ns |
- |
| TryComputeHash · SHAKE256 · AVX512F |
128KB |
265,761.5 ns |
727.08 ns |
680.11 ns |
- |
| TryComputeHash · SHAKE256 · BouncyCastle |
128KB |
293,178.7 ns |
671.83 ns |
524.52 ns |
- |
cSHAKE Family
cSHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · cSHAKE128 · Managed |
128B |
243.2 ns |
1.59 ns |
1.41 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
128B |
316.5 ns |
1.23 ns |
1.09 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
128B |
323.8 ns |
1.85 ns |
1.54 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
128B |
333.7 ns |
0.99 ns |
0.93 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE128 · Managed |
137B |
241.8 ns |
1.06 ns |
0.94 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
137B |
312.8 ns |
0.83 ns |
0.74 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
137B |
320.6 ns |
1.18 ns |
0.99 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
137B |
334.0 ns |
2.23 ns |
2.09 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE128 · Managed |
1KB |
1,488.3 ns |
14.73 ns |
13.06 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
1KB |
1,994.0 ns |
6.82 ns |
6.38 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
1KB |
2,047.9 ns |
5.14 ns |
4.56 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
1KB |
2,164.9 ns |
6.48 ns |
5.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE128 · Managed |
1025B |
1,485.1 ns |
7.98 ns |
7.47 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
1025B |
2,016.1 ns |
6.09 ns |
5.69 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
1025B |
2,041.5 ns |
5.81 ns |
5.44 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
1025B |
2,170.2 ns |
11.75 ns |
10.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE128 · Managed |
8KB |
9,742.4 ns |
46.32 ns |
38.68 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
8KB |
13,312.8 ns |
41.62 ns |
34.75 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
8KB |
13,600.8 ns |
23.09 ns |
21.60 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
8KB |
15,056.2 ns |
49.15 ns |
43.57 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE128 · Managed |
128KB |
154,680.8 ns |
661.00 ns |
618.30 ns |
- |
| TryComputeHash · cSHAKE128 · AVX2 |
128KB |
211,334.1 ns |
295.35 ns |
276.28 ns |
- |
| TryComputeHash · cSHAKE128 · AVX512F |
128KB |
215,808.6 ns |
543.06 ns |
481.41 ns |
- |
| TryComputeHash · cSHAKE128 · BouncyCastle |
128KB |
238,815.8 ns |
443.33 ns |
393.00 ns |
- |
cSHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · cSHAKE256 · Managed |
128B |
250.4 ns |
1.64 ns |
1.46 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
128B |
325.4 ns |
0.91 ns |
0.85 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
128B |
330.1 ns |
1.96 ns |
1.83 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
128B |
331.7 ns |
1.01 ns |
0.89 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE256 · Managed |
137B |
502.0 ns |
3.86 ns |
3.61 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
137B |
629.8 ns |
2.69 ns |
2.38 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
137B |
653.0 ns |
1.38 ns |
1.22 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
137B |
671.7 ns |
1.09 ns |
0.85 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE256 · Managed |
1KB |
1,649.1 ns |
7.90 ns |
7.39 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
1KB |
2,237.4 ns |
4.41 ns |
3.68 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
1KB |
2,297.2 ns |
7.20 ns |
6.73 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
1KB |
2,455.3 ns |
15.41 ns |
14.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE256 · Managed |
1025B |
1,654.9 ns |
6.05 ns |
5.36 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
1025B |
2,239.4 ns |
7.12 ns |
6.66 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
1025B |
2,300.2 ns |
7.05 ns |
5.89 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
1025B |
2,447.7 ns |
6.97 ns |
6.18 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE256 · Managed |
8KB |
12,115.2 ns |
38.90 ns |
36.39 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
8KB |
16,502.7 ns |
40.67 ns |
33.96 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
8KB |
16,949.2 ns |
76.67 ns |
71.72 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
8KB |
18,567.2 ns |
60.53 ns |
53.66 ns |
- |
|
|
|
|
|
|
| TryComputeHash · cSHAKE256 · Managed |
128KB |
189,923.9 ns |
1,437.78 ns |
1,344.90 ns |
- |
| TryComputeHash · cSHAKE256 · AVX2 |
128KB |
259,461.3 ns |
746.12 ns |
697.92 ns |
- |
| TryComputeHash · cSHAKE256 · AVX512F |
128KB |
265,726.3 ns |
732.81 ns |
649.61 ns |
- |
| TryComputeHash · cSHAKE256 · BouncyCastle |
128KB |
292,811.5 ns |
1,825.53 ns |
1,707.61 ns |
- |
KangarooTwelve Family
KT128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · KT128 · Managed |
128B |
154.7 ns |
1.00 ns |
0.94 ns |
- |
| TryComputeHash · KT128 · AVX2 |
128B |
181.8 ns |
0.52 ns |
0.43 ns |
- |
| TryComputeHash · KT128 · AVX512F |
128B |
186.6 ns |
0.32 ns |
0.28 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT128 · Managed |
137B |
152.1 ns |
1.04 ns |
0.92 ns |
- |
| TryComputeHash · KT128 · AVX2 |
137B |
179.6 ns |
0.83 ns |
0.73 ns |
- |
| TryComputeHash · KT128 · AVX512F |
137B |
183.1 ns |
0.62 ns |
0.58 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT128 · Managed |
1KB |
849.2 ns |
4.91 ns |
4.60 ns |
- |
| TryComputeHash · KT128 · AVX2 |
1KB |
1,086.9 ns |
4.55 ns |
3.56 ns |
- |
| TryComputeHash · KT128 · AVX512F |
1KB |
1,121.1 ns |
2.37 ns |
2.21 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT128 · Managed |
1025B |
845.5 ns |
3.88 ns |
3.63 ns |
- |
| TryComputeHash · KT128 · AVX2 |
1025B |
1,093.9 ns |
3.24 ns |
3.03 ns |
- |
| TryComputeHash · KT128 · AVX512F |
1025B |
1,138.5 ns |
2.98 ns |
2.65 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT128 · Managed |
8KB |
6,033.1 ns |
52.33 ns |
48.95 ns |
- |
| TryComputeHash · KT128 · AVX2 |
8KB |
7,705.1 ns |
24.37 ns |
22.80 ns |
- |
| TryComputeHash · KT128 · AVX512F |
8KB |
7,810.9 ns |
14.54 ns |
11.35 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT128 · Managed |
128KB |
88,617.5 ns |
511.75 ns |
453.66 ns |
- |
| TryComputeHash · KT128 · AVX2 |
128KB |
115,695.7 ns |
168.04 ns |
157.19 ns |
- |
| TryComputeHash · KT128 · AVX512F |
128KB |
118,452.4 ns |
186.81 ns |
165.61 ns |
- |
KT256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · KT256 · Managed |
128B |
164.0 ns |
0.76 ns |
0.67 ns |
- |
| TryComputeHash · KT256 · AVX2 |
128B |
190.2 ns |
0.66 ns |
0.62 ns |
- |
| TryComputeHash · KT256 · AVX512F |
128B |
198.1 ns |
0.41 ns |
0.34 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT256 · Managed |
137B |
315.0 ns |
2.45 ns |
2.29 ns |
- |
| TryComputeHash · KT256 · AVX2 |
137B |
371.3 ns |
0.87 ns |
0.77 ns |
- |
| TryComputeHash · KT256 · AVX512F |
137B |
381.1 ns |
0.46 ns |
0.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT256 · Managed |
1KB |
924.1 ns |
5.31 ns |
4.97 ns |
- |
| TryComputeHash · KT256 · AVX2 |
1KB |
1,204.1 ns |
4.60 ns |
4.07 ns |
- |
| TryComputeHash · KT256 · AVX512F |
1KB |
1,237.3 ns |
3.59 ns |
3.36 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT256 · Managed |
1025B |
923.8 ns |
5.25 ns |
4.91 ns |
- |
| TryComputeHash · KT256 · AVX2 |
1025B |
1,204.7 ns |
2.09 ns |
1.95 ns |
- |
| TryComputeHash · KT256 · AVX512F |
1025B |
1,241.4 ns |
3.96 ns |
3.70 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT256 · Managed |
8KB |
6,901.0 ns |
31.08 ns |
29.08 ns |
- |
| TryComputeHash · KT256 · AVX2 |
8KB |
9,219.4 ns |
16.63 ns |
15.56 ns |
- |
| TryComputeHash · KT256 · AVX512F |
8KB |
9,648.6 ns |
34.03 ns |
30.17 ns |
- |
|
|
|
|
|
|
| TryComputeHash · KT256 · Managed |
128KB |
108,866.3 ns |
782.88 ns |
732.30 ns |
- |
| TryComputeHash · KT256 · AVX2 |
128KB |
142,240.1 ns |
233.37 ns |
194.87 ns |
- |
| TryComputeHash · KT256 · AVX512F |
128KB |
146,595.3 ns |
372.78 ns |
330.46 ns |
- |
TurboSHAKE Family
TurboSHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · TurboSHAKE128-32 · Managed |
128B |
153.8 ns |
1.35 ns |
1.26 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
128B |
177.1 ns |
0.88 ns |
0.78 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
128B |
182.6 ns |
0.47 ns |
0.44 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-32 · Managed |
137B |
149.6 ns |
1.14 ns |
1.01 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
137B |
175.1 ns |
1.46 ns |
1.29 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
137B |
179.4 ns |
1.22 ns |
1.08 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-32 · Managed |
1KB |
844.5 ns |
2.38 ns |
2.22 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
1KB |
1,090.5 ns |
4.94 ns |
4.62 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
1KB |
1,128.0 ns |
7.23 ns |
6.41 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-32 · Managed |
1025B |
847.1 ns |
4.36 ns |
3.64 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
1025B |
1,089.0 ns |
3.26 ns |
2.89 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
1025B |
1,122.8 ns |
3.56 ns |
2.97 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-32 · Managed |
8KB |
5,316.5 ns |
33.30 ns |
31.15 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
8KB |
6,959.3 ns |
10.06 ns |
9.41 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
8KB |
7,174.9 ns |
16.49 ns |
15.42 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-32 · Managed |
128KB |
83,788.8 ns |
288.72 ns |
255.94 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX2 |
128KB |
110,369.2 ns |
219.84 ns |
183.57 ns |
- |
| TryComputeHash · TurboSHAKE128-32 · AVX512F |
128KB |
113,634.3 ns |
162.63 ns |
144.17 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
128B |
172.4 ns |
0.65 ns |
0.54 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
128B |
197.8 ns |
0.69 ns |
0.54 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
128B |
202.7 ns |
0.60 ns |
0.56 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
137B |
171.9 ns |
1.61 ns |
1.35 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
137B |
194.2 ns |
0.62 ns |
0.58 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
137B |
198.7 ns |
0.28 ns |
0.25 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
1KB |
864.2 ns |
3.93 ns |
3.68 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
1KB |
1,110.7 ns |
4.08 ns |
3.61 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
1KB |
1,147.3 ns |
4.06 ns |
3.60 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
1025B |
865.2 ns |
3.31 ns |
2.93 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
1025B |
1,111.6 ns |
5.86 ns |
5.48 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
1025B |
1,147.2 ns |
6.65 ns |
5.19 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
8KB |
5,314.3 ns |
18.66 ns |
15.58 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
8KB |
6,983.6 ns |
7.02 ns |
6.22 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
8KB |
7,187.0 ns |
7.60 ns |
6.35 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE128-64 · Managed |
128KB |
83,521.0 ns |
307.33 ns |
272.44 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX2 |
128KB |
110,149.1 ns |
120.24 ns |
93.88 ns |
- |
| TryComputeHash · TurboSHAKE128-64 · AVX512F |
128KB |
113,535.2 ns |
214.85 ns |
179.41 ns |
- |
TurboSHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · TurboSHAKE256 · Managed |
128B |
159.1 ns |
1.12 ns |
1.05 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
128B |
185.8 ns |
0.39 ns |
0.33 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
128B |
189.8 ns |
0.32 ns |
0.28 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE256 · Managed |
137B |
320.7 ns |
1.72 ns |
1.61 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
137B |
375.3 ns |
0.92 ns |
0.81 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
137B |
388.2 ns |
1.22 ns |
1.15 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE256 · Managed |
1KB |
927.5 ns |
6.68 ns |
6.25 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
1KB |
1,205.3 ns |
3.79 ns |
3.54 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
1KB |
1,244.8 ns |
3.23 ns |
3.03 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE256 · Managed |
1025B |
923.7 ns |
4.80 ns |
4.49 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
1025B |
1,202.0 ns |
4.87 ns |
4.56 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
1025B |
1,244.2 ns |
4.86 ns |
4.06 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE256 · Managed |
8KB |
6,543.2 ns |
38.09 ns |
35.63 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
8KB |
8,599.4 ns |
18.75 ns |
17.54 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
8KB |
8,911.2 ns |
19.66 ns |
17.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · TurboSHAKE256 · Managed |
128KB |
101,215.2 ns |
338.83 ns |
300.36 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX2 |
128KB |
134,094.9 ns |
360.29 ns |
319.39 ns |
- |
| TryComputeHash · TurboSHAKE256 · AVX512F |
128KB |
139,133.1 ns |
514.02 ns |
455.66 ns |
- |
BLAKE2 Family
BouncyCastle leads the BLAKE2 benchmarks due to highly optimized native code. The managed AVX2/SSSE3/SSE2 SIMD implementations are competitive (within ~15% of BouncyCastle or even), while the scalar fallback is significantly slower (~3.5× for BLAKE2b, ~4× for BLAKE2s).
Key observations:
- BouncyCastle: Highly optimized reference
- Managed AVX2: Competitive SIMD implementation
- Managed scalar: Fallback for non-SIMD platforms
BLAKE2b-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
128B |
98.77 ns |
0.182 ns |
0.161 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
128B |
107.30 ns |
0.247 ns |
0.231 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
128B |
364.75 ns |
1.445 ns |
1.352 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
128B |
486.42 ns |
2.493 ns |
2.332 ns |
1120 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
137B |
186.87 ns |
0.528 ns |
0.494 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
137B |
204.71 ns |
0.640 ns |
0.599 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
137B |
715.95 ns |
4.027 ns |
3.767 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
137B |
909.54 ns |
1.678 ns |
1.401 ns |
1136 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
1KB |
717.79 ns |
2.119 ns |
1.982 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
1KB |
819.39 ns |
2.971 ns |
2.779 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
1KB |
2,819.30 ns |
6.932 ns |
6.145 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
1KB |
2,993.45 ns |
4.124 ns |
3.655 ns |
2016 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
1025B |
801.14 ns |
2.909 ns |
2.721 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
1025B |
924.95 ns |
4.650 ns |
4.349 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
1025B |
3,172.66 ns |
10.301 ns |
9.635 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
1025B |
3,413.68 ns |
11.563 ns |
10.816 ns |
2024 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
8KB |
5,639.65 ns |
16.957 ns |
14.160 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
8KB |
6,524.74 ns |
18.712 ns |
16.588 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
8KB |
22,588.89 ns |
47.420 ns |
42.036 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
8KB |
23,084.37 ns |
74.722 ns |
69.895 ns |
9184 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-256 · BouncyCastle |
128KB |
88,882.87 ns |
191.387 ns |
159.816 ns |
- |
| TryComputeHash · BLAKE2b-256 · AVX2 |
128KB |
104,729.18 ns |
158.411 ns |
148.178 ns |
- |
| TryComputeHash · BLAKE2b-256 · Managed |
128KB |
360,613.04 ns |
767.925 ns |
641.252 ns |
- |
| TryComputeHash · BLAKE2b-256 · BLAKE2b-256 (Konscious) |
128KB |
394,263.23 ns |
1,333.598 ns |
1,247.448 ns |
132078 B |
BLAKE2b-512
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
128B |
102.9 ns |
0.26 ns |
0.25 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
128B |
108.4 ns |
0.32 ns |
0.29 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
128B |
365.6 ns |
1.23 ns |
1.15 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
128B |
502.7 ns |
3.95 ns |
3.69 ns |
1216 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
137B |
190.1 ns |
0.86 ns |
0.81 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
137B |
205.8 ns |
0.46 ns |
0.41 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
137B |
713.0 ns |
1.53 ns |
1.28 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
137B |
913.2 ns |
2.70 ns |
2.52 ns |
1232 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
1KB |
718.2 ns |
1.57 ns |
1.31 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
1KB |
823.2 ns |
3.79 ns |
3.55 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
1KB |
2,823.3 ns |
7.98 ns |
7.46 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
1KB |
3,030.5 ns |
7.91 ns |
7.40 ns |
2112 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
1025B |
805.0 ns |
1.76 ns |
1.65 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
1025B |
921.8 ns |
7.44 ns |
6.96 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
1025B |
3,179.3 ns |
11.48 ns |
10.74 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
1025B |
3,433.9 ns |
12.32 ns |
11.52 ns |
2120 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
8KB |
5,594.6 ns |
9.53 ns |
8.92 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
8KB |
6,538.1 ns |
17.74 ns |
16.59 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
8KB |
22,439.4 ns |
40.78 ns |
31.84 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
8KB |
23,134.7 ns |
47.25 ns |
39.46 ns |
9280 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE2b-512 · BouncyCastle |
128KB |
89,132.1 ns |
269.63 ns |
239.02 ns |
- |
| TryComputeHash · BLAKE2b-512 · AVX2 |
128KB |
104,527.7 ns |
174.19 ns |
154.42 ns |
- |
| TryComputeHash · BLAKE2b-512 · Managed |
128KB |
359,655.5 ns |
700.37 ns |
584.84 ns |
- |
| TryComputeHash · BLAKE2b-512 · BLAKE2b-512 (Konscious) |
128KB |
397,470.6 ns |
1,673.69 ns |
1,565.57 ns |
132174 B |
BLAKE2s-128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
128B |
156.6 ns |
0.24 ns |
0.20 ns |
- |
| TryComputeHash · BLAKE2s-128 · AVX2 |
128B |
156.9 ns |
0.70 ns |
0.65 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
128B |
160.0 ns |
0.16 ns |
0.13 ns |
- |
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
128B |
162.3 ns |
2.45 ns |
2.29 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
128B |
593.0 ns |
3.78 ns |
3.53 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-128 · AVX2 |
137B |
235.4 ns |
0.53 ns |
0.50 ns |
- |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
137B |
239.2 ns |
0.54 ns |
0.50 ns |
- |
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
137B |
243.1 ns |
1.59 ns |
1.24 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
137B |
244.0 ns |
0.18 ns |
0.16 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
137B |
883.9 ns |
3.99 ns |
3.73 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-128 · AVX2 |
1KB |
1,203.2 ns |
2.61 ns |
2.31 ns |
- |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
1KB |
1,215.2 ns |
1.00 ns |
0.94 ns |
- |
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
1KB |
1,225.0 ns |
3.62 ns |
3.39 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
1KB |
1,241.5 ns |
1.66 ns |
1.55 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
1KB |
4,644.0 ns |
23.02 ns |
21.53 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-128 · AVX2 |
1025B |
1,287.3 ns |
2.71 ns |
2.27 ns |
- |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
1025B |
1,296.1 ns |
0.91 ns |
0.76 ns |
- |
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
1025B |
1,299.3 ns |
2.93 ns |
2.74 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
1025B |
1,324.3 ns |
1.17 ns |
1.10 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
1025B |
4,925.0 ns |
22.87 ns |
20.27 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-128 · AVX2 |
8KB |
9,592.6 ns |
15.91 ns |
14.10 ns |
- |
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
8KB |
9,659.6 ns |
26.50 ns |
22.13 ns |
- |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
8KB |
9,680.3 ns |
10.52 ns |
9.84 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
8KB |
9,889.1 ns |
10.53 ns |
9.34 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
8KB |
37,084.5 ns |
162.22 ns |
151.74 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-128 · BouncyCastle |
128KB |
153,650.0 ns |
491.31 ns |
435.53 ns |
- |
| TryComputeHash · BLAKE2s-128 · AVX2 |
128KB |
153,760.9 ns |
565.84 ns |
529.29 ns |
- |
| TryComputeHash · BLAKE2s-128 · Ssse3 |
128KB |
154,896.7 ns |
220.16 ns |
205.94 ns |
- |
| TryComputeHash · BLAKE2s-128 · Sse2 |
128KB |
158,149.3 ns |
191.20 ns |
178.85 ns |
- |
| TryComputeHash · BLAKE2s-128 · Managed |
128KB |
591,773.3 ns |
1,006.67 ns |
941.64 ns |
- |
BLAKE2s-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
128B |
157.7 ns |
0.28 ns |
0.26 ns |
- |
| TryComputeHash · BLAKE2s-256 · AVX2 |
128B |
158.0 ns |
0.38 ns |
0.33 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
128B |
160.8 ns |
0.21 ns |
0.19 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
128B |
161.7 ns |
0.70 ns |
0.62 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
128B |
594.6 ns |
3.66 ns |
3.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-256 · AVX2 |
137B |
236.1 ns |
1.17 ns |
1.10 ns |
- |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
137B |
239.7 ns |
0.30 ns |
0.28 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
137B |
244.5 ns |
0.29 ns |
0.26 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
137B |
245.6 ns |
0.48 ns |
0.43 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
137B |
883.9 ns |
4.74 ns |
4.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-256 · AVX2 |
1KB |
1,206.2 ns |
2.89 ns |
2.56 ns |
- |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
1KB |
1,215.5 ns |
1.54 ns |
1.44 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
1KB |
1,230.9 ns |
3.97 ns |
3.52 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
1KB |
1,240.8 ns |
1.12 ns |
0.99 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
1KB |
4,631.9 ns |
15.03 ns |
13.32 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-256 · AVX2 |
1025B |
1,286.8 ns |
5.32 ns |
4.97 ns |
- |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
1025B |
1,297.5 ns |
1.10 ns |
1.03 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
1025B |
1,305.5 ns |
4.15 ns |
3.47 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
1025B |
1,325.0 ns |
0.99 ns |
0.92 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
1025B |
4,926.4 ns |
11.71 ns |
10.38 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-256 · AVX2 |
8KB |
9,621.8 ns |
42.54 ns |
39.79 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
8KB |
9,672.1 ns |
23.61 ns |
20.93 ns |
- |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
8KB |
9,679.6 ns |
11.17 ns |
10.44 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
8KB |
9,885.4 ns |
8.98 ns |
8.40 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
8KB |
36,998.4 ns |
113.31 ns |
100.45 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE2s-256 · AVX2 |
128KB |
153,491.8 ns |
438.60 ns |
366.25 ns |
- |
| TryComputeHash · BLAKE2s-256 · BouncyCastle |
128KB |
153,809.1 ns |
341.77 ns |
302.97 ns |
- |
| TryComputeHash · BLAKE2s-256 · Ssse3 |
128KB |
154,941.4 ns |
165.67 ns |
154.97 ns |
- |
| TryComputeHash · BLAKE2s-256 · Sse2 |
128KB |
158,103.2 ns |
176.54 ns |
165.14 ns |
- |
| TryComputeHash · BLAKE2s-256 · Managed |
128KB |
592,589.6 ns |
1,672.05 ns |
1,482.23 ns |
- |
BLAKE3
BLAKE3 is a modern hash function designed for extreme parallelism and speed. It can leverage tree hashing to process multiple chunks simultaneously, making it ideal for hashing large files. The Native (Rust) variant uses blake3-dotnet, which wraps the official Rust implementation via P/Invoke—this is the fastest option and recommended when native dependencies are acceptable.
The managed CryptoHives implementation uses SSSE3 SIMD instructions with optimized state management. At small inputs (128B-1kb), the SSSE3 path is ~1.4× slower than the native Rust implementation and ~9× faster than BouncyCastle. At large inputs (128KB), the gap widens to ~12× because the native implementation parallelizes chunk compression across SIMD lanes (AVX2/AVX-512 hash_many), while the managed version processes chunks sequentially.
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · BLAKE3 · Native |
128B |
101.4 ns |
1.43 ns |
1.33 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
128B |
143.9 ns |
1.93 ns |
1.81 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
128B |
542.1 ns |
0.99 ns |
0.78 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
128B |
1,268.0 ns |
4.94 ns |
4.62 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE3 · Native |
137B |
150.5 ns |
0.31 ns |
0.29 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
137B |
221.8 ns |
1.05 ns |
0.98 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
137B |
800.4 ns |
3.44 ns |
3.21 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
137B |
1,876.7 ns |
4.64 ns |
4.11 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE3 · Native |
1KB |
745.5 ns |
1.46 ns |
1.36 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
1KB |
1,073.6 ns |
3.03 ns |
2.84 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
1KB |
4,212.7 ns |
19.71 ns |
17.47 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
1KB |
9,458.4 ns |
32.20 ns |
30.12 ns |
- |
|
|
|
|
|
|
| TryComputeHash · BLAKE3 · Native |
1025B |
849.1 ns |
1.93 ns |
1.71 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
1025B |
1,225.7 ns |
2.72 ns |
2.27 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
1025B |
4,714.9 ns |
10.05 ns |
8.91 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
1025B |
10,585.0 ns |
32.92 ns |
30.79 ns |
56 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE3 · Native |
8KB |
1,166.5 ns |
2.57 ns |
2.28 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
8KB |
10,208.8 ns |
50.20 ns |
44.50 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
8KB |
35,299.8 ns |
150.17 ns |
133.12 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
8KB |
81,207.4 ns |
171.09 ns |
151.67 ns |
392 B |
|
|
|
|
|
|
| TryComputeHash · BLAKE3 · Native |
128KB |
14,276.1 ns |
29.44 ns |
22.99 ns |
- |
| TryComputeHash · BLAKE3 · Ssse3 |
128KB |
163,229.8 ns |
553.37 ns |
462.09 ns |
- |
| TryComputeHash · BLAKE3 · Managed |
128KB |
564,676.6 ns |
1,373.35 ns |
1,146.81 ns |
- |
| TryComputeHash · BLAKE3 · BouncyCastle |
128KB |
1,281,956.7 ns |
1,637.00 ns |
1,366.97 ns |
7112 B |
Ascon Family
Ascon is a lightweight authenticated encryption and hashing family, selected as the NIST Lightweight Cryptography standard in 2023. It is designed for constrained environments (IoT, embedded systems) where resources are limited but security is paramount.
The managed implementation is approximately 33% faster than BouncyCastle across all input sizes, with consistent zero-allocation behavior regardless of input size—ideal for memory-constrained environments.
Ascon-Hash256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Ascon-Hash256 · Managed |
128B |
565.4 ns |
3.23 ns |
2.86 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
128B |
761.2 ns |
2.59 ns |
2.43 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-Hash256 · Managed |
137B |
597.3 ns |
2.11 ns |
1.97 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
137B |
803.2 ns |
2.82 ns |
2.63 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-Hash256 · Managed |
1KB |
3,662.4 ns |
13.94 ns |
13.04 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
1KB |
4,957.2 ns |
21.35 ns |
19.97 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-Hash256 · Managed |
1025B |
3,661.7 ns |
16.07 ns |
15.03 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
1025B |
4,949.9 ns |
18.97 ns |
15.84 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-Hash256 · Managed |
8KB |
28,385.4 ns |
72.01 ns |
67.35 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
8KB |
38,337.8 ns |
76.00 ns |
63.46 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-Hash256 · Managed |
128KB |
452,199.2 ns |
1,165.82 ns |
973.51 ns |
- |
| TryComputeHash · Ascon-Hash256 · BouncyCastle |
128KB |
612,759.8 ns |
1,521.26 ns |
1,348.56 ns |
- |
Ascon-XOF128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Ascon-XOF128 · Managed |
128B |
566.8 ns |
2.44 ns |
2.28 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
128B |
769.2 ns |
2.82 ns |
2.64 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-XOF128 · Managed |
137B |
598.4 ns |
1.79 ns |
1.50 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
137B |
799.3 ns |
3.25 ns |
3.04 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-XOF128 · Managed |
1KB |
3,666.3 ns |
9.90 ns |
8.78 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
1KB |
4,896.0 ns |
10.00 ns |
8.35 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-XOF128 · Managed |
1025B |
3,670.9 ns |
11.41 ns |
10.67 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
1025B |
4,893.9 ns |
15.05 ns |
13.34 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-XOF128 · Managed |
8KB |
28,353.1 ns |
48.73 ns |
43.20 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
8KB |
38,066.7 ns |
157.73 ns |
139.83 ns |
- |
|
|
|
|
|
|
| TryComputeHash · Ascon-XOF128 · Managed |
128KB |
453,383.1 ns |
1,562.41 ns |
1,461.48 ns |
- |
| TryComputeHash · Ascon-XOF128 · BouncyCastle |
128KB |
606,453.8 ns |
2,086.59 ns |
1,849.71 ns |
- |
KMAC Family
KMAC (Keccak Message Authentication Code) is defined in NIST SP 800-185 and provides a Keccak-based keyed hash function. Like SHA-3, SHAKE, and cSHAKE, KMAC shares the same optimized Keccak permutation core, benefiting from the scalar optimizations described in the Keccak section above.
The managed CryptoHives implementation is the fastest at all input sizes, outperforming the OS-provided KMAC by ~30% and BouncyCastle by ~48%. This advantage comes from the highly optimized scalar Keccak core that benefits both the hash computation and the KMAC-specific cSHAKE encoding overhead.
KMAC128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · KMAC-128 · Managed |
128B |
663.0 ns |
4.79 ns |
4.48 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
128B |
1,002.6 ns |
4.56 ns |
4.05 ns |
184 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
128B |
1,968.0 ns |
11.58 ns |
10.27 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-128 · Managed |
137B |
658.5 ns |
3.18 ns |
2.97 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
137B |
1,021.5 ns |
9.15 ns |
8.11 ns |
200 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
137B |
1,964.5 ns |
7.34 ns |
6.51 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-128 · Managed |
1KB |
1,890.0 ns |
6.21 ns |
5.50 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
1KB |
2,480.8 ns |
9.25 ns |
8.66 ns |
1080 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
1KB |
3,778.8 ns |
22.56 ns |
21.10 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-128 · Managed |
1025B |
1,890.2 ns |
7.46 ns |
6.98 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
1025B |
2,491.5 ns |
14.28 ns |
13.36 ns |
1088 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
1025B |
3,799.9 ns |
21.49 ns |
20.10 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-128 · Managed |
8KB |
10,151.4 ns |
46.49 ns |
43.49 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
8KB |
12,855.6 ns |
41.59 ns |
34.73 ns |
8248 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
8KB |
16,693.3 ns |
84.67 ns |
75.06 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-128 · Managed |
128KB |
154,955.0 ns |
883.94 ns |
783.59 ns |
- |
| TryComputeHash · KMAC-128 · OS Native |
128KB |
223,594.4 ns |
1,454.16 ns |
1,360.22 ns |
131151 B |
| TryComputeHash · KMAC-128 · BouncyCastle |
128KB |
240,585.1 ns |
1,056.01 ns |
987.80 ns |
256 B |
KMAC256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · KMAC-256 · Managed |
128B |
666.6 ns |
3.65 ns |
3.05 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
128B |
998.1 ns |
4.72 ns |
3.94 ns |
184 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
128B |
1,946.6 ns |
10.75 ns |
9.53 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-256 · Managed |
137B |
911.5 ns |
3.40 ns |
3.19 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
137B |
1,258.0 ns |
11.30 ns |
10.57 ns |
200 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
137B |
2,238.9 ns |
15.88 ns |
14.86 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-256 · Managed |
1KB |
2,067.5 ns |
14.56 ns |
13.62 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
1KB |
2,702.5 ns |
6.43 ns |
5.70 ns |
1080 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
1KB |
4,070.0 ns |
28.05 ns |
26.23 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-256 · Managed |
1025B |
2,056.8 ns |
10.78 ns |
9.56 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
1025B |
2,696.0 ns |
17.38 ns |
16.26 ns |
1088 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
1025B |
4,067.2 ns |
24.84 ns |
22.02 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-256 · Managed |
8KB |
12,491.8 ns |
88.68 ns |
82.95 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
8KB |
15,646.1 ns |
139.58 ns |
130.57 ns |
8248 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
8KB |
20,164.1 ns |
110.33 ns |
103.21 ns |
256 B |
|
|
|
|
|
|
| TryComputeHash · KMAC-256 · Managed |
128KB |
189,838.3 ns |
1,320.60 ns |
1,235.29 ns |
- |
| TryComputeHash · KMAC-256 · OS Native |
128KB |
263,347.0 ns |
1,215.03 ns |
1,014.60 ns |
131151 B |
| TryComputeHash · KMAC-256 · BouncyCastle |
128KB |
293,350.7 ns |
1,650.91 ns |
1,463.49 ns |
256 B |
Legacy Algorithms
MD5 and SHA-1 are provided exclusively for backward compatibility with legacy protocols and file formats (e.g., verifying old checksums, interoperability with legacy systems). Both algorithms have known cryptographic weaknesses:
- MD5: Vulnerable to collision attacks since 2004; should not be used for security
- SHA-1: Collision attacks demonstrated in 2017 (SHAttered); deprecated by NIST
The OS implementations are fastest due to potential hardware acceleration. The managed implementations prioritize correctness and portability over optimization, as these algorithms should only be used for non-security purposes.
MD5
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · MD5 · OS Native |
128B |
268.5 ns |
0.41 ns |
0.36 ns |
- |
| TryComputeHash · MD5 · Managed |
128B |
306.6 ns |
1.40 ns |
1.24 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
128B |
369.2 ns |
0.55 ns |
0.46 ns |
- |
|
|
|
|
|
|
| TryComputeHash · MD5 · OS Native |
137B |
266.5 ns |
0.53 ns |
0.47 ns |
- |
| TryComputeHash · MD5 · Managed |
137B |
312.9 ns |
1.37 ns |
1.29 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
137B |
368.4 ns |
0.91 ns |
0.85 ns |
- |
|
|
|
|
|
|
| TryComputeHash · MD5 · OS Native |
1KB |
1,369.3 ns |
2.21 ns |
2.07 ns |
- |
| TryComputeHash · MD5 · Managed |
1KB |
1,700.0 ns |
9.62 ns |
9.00 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
1KB |
2,011.0 ns |
3.28 ns |
2.56 ns |
- |
|
|
|
|
|
|
| TryComputeHash · MD5 · OS Native |
1025B |
1,369.3 ns |
1.73 ns |
1.62 ns |
- |
| TryComputeHash · MD5 · Managed |
1025B |
1,707.1 ns |
5.34 ns |
5.00 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
1025B |
2,008.3 ns |
3.85 ns |
3.41 ns |
- |
|
|
|
|
|
|
| TryComputeHash · MD5 · OS Native |
8KB |
10,153.5 ns |
10.22 ns |
9.56 ns |
- |
| TryComputeHash · MD5 · Managed |
8KB |
12,810.9 ns |
75.89 ns |
67.27 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
8KB |
15,129.1 ns |
20.69 ns |
17.27 ns |
- |
|
|
|
|
|
|
| TryComputeHash · MD5 · OS Native |
128KB |
160,797.5 ns |
172.63 ns |
153.03 ns |
- |
| TryComputeHash · MD5 · Managed |
128KB |
202,861.9 ns |
884.49 ns |
827.35 ns |
- |
| TryComputeHash · MD5 · BouncyCastle |
128KB |
240,458.7 ns |
440.91 ns |
412.42 ns |
- |
SHA-1
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SHA-1 · OS Native |
128B |
228.4 ns |
0.75 ns |
0.70 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
128B |
441.7 ns |
1.51 ns |
1.41 ns |
- |
| TryComputeHash · SHA-1 · Managed |
128B |
455.4 ns |
2.53 ns |
2.37 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-1 · OS Native |
137B |
226.8 ns |
0.62 ns |
0.55 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
137B |
439.0 ns |
1.81 ns |
1.70 ns |
- |
| TryComputeHash · SHA-1 · Managed |
137B |
452.8 ns |
1.66 ns |
1.55 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-1 · OS Native |
1KB |
1,098.1 ns |
5.82 ns |
5.44 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
1KB |
2,426.2 ns |
9.21 ns |
8.62 ns |
- |
| TryComputeHash · SHA-1 · Managed |
1KB |
2,447.8 ns |
7.84 ns |
7.34 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-1 · OS Native |
1025B |
1,097.4 ns |
5.38 ns |
5.03 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
1025B |
2,419.9 ns |
8.67 ns |
6.77 ns |
- |
| TryComputeHash · SHA-1 · Managed |
1025B |
2,449.6 ns |
15.64 ns |
14.63 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-1 · OS Native |
8KB |
8,029.1 ns |
10.25 ns |
8.01 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
8KB |
18,214.6 ns |
50.03 ns |
41.78 ns |
- |
| TryComputeHash · SHA-1 · Managed |
8KB |
18,331.6 ns |
64.63 ns |
60.46 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SHA-1 · OS Native |
128KB |
127,393.9 ns |
355.35 ns |
332.39 ns |
- |
| TryComputeHash · SHA-1 · BouncyCastle |
128KB |
290,083.7 ns |
1,440.77 ns |
1,347.69 ns |
- |
| TryComputeHash · SHA-1 · Managed |
128KB |
291,925.0 ns |
902.88 ns |
800.38 ns |
- |
Regional Standards
These algorithms serve regulatory compliance requirements in specific jurisdictions. While not commonly used in Western applications, they are mandatory in their respective regions:
| Algorithm |
Region |
Use Case |
| SM3 |
China |
Required for Chinese government and financial systems (GB/T 32905-2016) |
| Streebog |
Russia |
Russian federal standard GOST R 34.11-2012, required for government communications |
| Kupyna |
Ukraine |
Ukrainian national standard DSTU 7564:2014, required for government systems |
| LSH |
South Korea |
Korean national standard KS X 3262, approved by KCMVP |
| Whirlpool |
ISO/NESSIE |
European cryptographic standard (ISO/IEC 10118-3) |
| RIPEMD-160 |
Europe/Crypto |
Used in Bitcoin address generation and some European standards |
The managed Streebog implementation is notably faster (1.4–1.8×) than reference implementations while using less memory—important for embedded systems in constrained environments. The managed Kupyna implementation uses T-table optimization (combining SubBytes, ShiftBytes, and MixColumns) to outperform BouncyCastle by 30–45%.
SM3
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · SM3 · Managed |
128B |
692.6 ns |
2.28 ns |
2.14 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
128B |
782.8 ns |
6.58 ns |
5.14 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SM3 · Managed |
137B |
698.3 ns |
3.23 ns |
3.02 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
137B |
782.5 ns |
3.93 ns |
3.49 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SM3 · Managed |
1KB |
3,876.5 ns |
21.10 ns |
19.74 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
1KB |
4,387.0 ns |
32.79 ns |
27.38 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SM3 · Managed |
1025B |
3,896.0 ns |
24.37 ns |
22.80 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
1025B |
4,372.0 ns |
28.28 ns |
26.45 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SM3 · Managed |
8KB |
29,382.2 ns |
136.44 ns |
113.93 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
8KB |
33,101.4 ns |
311.18 ns |
275.85 ns |
- |
|
|
|
|
|
|
| TryComputeHash · SM3 · Managed |
128KB |
465,447.6 ns |
3,096.12 ns |
2,744.63 ns |
- |
| TryComputeHash · SM3 · BouncyCastle |
128KB |
523,842.6 ns |
2,370.73 ns |
2,101.59 ns |
- |
Streebog-256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Streebog-256 · Managed |
128B |
2.384 μs |
0.0084 μs |
0.0078 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
128B |
3.437 μs |
0.0135 μs |
0.0126 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
128B |
4.267 μs |
0.0443 μs |
0.0414 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-256 · Managed |
137B |
2.406 μs |
0.0106 μs |
0.0099 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
137B |
3.448 μs |
0.0258 μs |
0.0228 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
137B |
4.279 μs |
0.0229 μs |
0.0203 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-256 · Managed |
1KB |
9.023 μs |
0.0397 μs |
0.0371 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
1KB |
12.749 μs |
0.1175 μs |
0.1099 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
1KB |
16.247 μs |
0.1146 μs |
0.1072 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-256 · Managed |
1025B |
9.069 μs |
0.0466 μs |
0.0436 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
1025B |
12.721 μs |
0.0680 μs |
0.0603 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
1025B |
16.323 μs |
0.1521 μs |
0.1423 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-256 · Managed |
8KB |
63.100 μs |
0.2803 μs |
0.2622 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
8KB |
87.146 μs |
0.7910 μs |
0.7399 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
8KB |
111.290 μs |
0.5364 μs |
0.4479 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-256 · Managed |
128KB |
975.244 μs |
3.2397 μs |
3.0304 μs |
- |
| TryComputeHash · Streebog-256 · OpenGost |
128KB |
1,369.374 μs |
14.4580 μs |
12.8166 μs |
408 B |
| TryComputeHash · Streebog-256 · BouncyCastle |
128KB |
1,750.307 μs |
9.4760 μs |
8.8638 μs |
- |
Streebog-512
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Streebog-512 · Managed |
128B |
2.392 μs |
0.0112 μs |
0.0105 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
128B |
3.364 μs |
0.0171 μs |
0.0152 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
128B |
4.244 μs |
0.0283 μs |
0.0251 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-512 · Managed |
137B |
2.383 μs |
0.0068 μs |
0.0057 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
137B |
3.375 μs |
0.0270 μs |
0.0253 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
137B |
4.250 μs |
0.0277 μs |
0.0259 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-512 · Managed |
1KB |
9.155 μs |
0.0258 μs |
0.0215 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
1KB |
12.638 μs |
0.0596 μs |
0.0528 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
1KB |
16.219 μs |
0.1396 μs |
0.1306 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-512 · Managed |
1025B |
9.118 μs |
0.0309 μs |
0.0289 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
1025B |
12.688 μs |
0.1122 μs |
0.1049 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
1025B |
16.243 μs |
0.1715 μs |
0.1604 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-512 · Managed |
8KB |
63.075 μs |
0.2877 μs |
0.2691 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
8KB |
87.287 μs |
0.7096 μs |
0.6638 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
8KB |
112.265 μs |
0.8141 μs |
0.7615 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Streebog-512 · Managed |
128KB |
961.985 μs |
2.5844 μs |
2.4174 μs |
- |
| TryComputeHash · Streebog-512 · OpenGost |
128KB |
1,365.909 μs |
7.7554 μs |
6.4761 μs |
176 B |
| TryComputeHash · Streebog-512 · BouncyCastle |
128KB |
1,749.143 μs |
10.1758 μs |
9.5184 μs |
- |
Whirlpool
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Median |
Allocated |
| TryComputeHash · Whirlpool · Managed |
128B |
1.345 μs |
0.0265 μs |
0.0261 μs |
1.344 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
128B |
2.079 μs |
0.0399 μs |
0.0560 μs |
2.075 μs |
6336 B |
| TryComputeHash · Whirlpool · BouncyCastle |
128B |
5.107 μs |
0.0535 μs |
0.0501 μs |
5.094 μs |
56 B |
|
|
|
|
|
|
|
| TryComputeHash · Whirlpool · Managed |
137B |
1.328 μs |
0.0087 μs |
0.0082 μs |
1.326 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
137B |
2.066 μs |
0.0411 μs |
0.0403 μs |
2.053 μs |
6328 B |
| TryComputeHash · Whirlpool · BouncyCastle |
137B |
5.143 μs |
0.0814 μs |
0.0761 μs |
5.135 μs |
56 B |
|
|
|
|
|
|
|
| TryComputeHash · Whirlpool · Managed |
1KB |
7.624 μs |
0.1062 μs |
0.0941 μs |
7.621 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
1KB |
10.440 μs |
0.0591 μs |
0.0524 μs |
10.418 μs |
12032 B |
| TryComputeHash · Whirlpool · BouncyCastle |
1KB |
31.852 μs |
0.6259 μs |
0.6697 μs |
31.603 μs |
56 B |
|
|
|
|
|
|
|
| TryComputeHash · Whirlpool · Managed |
1025B |
9.148 μs |
0.1751 μs |
0.2338 μs |
9.064 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
1025B |
10.854 μs |
0.2152 μs |
0.3086 μs |
10.750 μs |
12040 B |
| TryComputeHash · Whirlpool · BouncyCastle |
1025B |
31.762 μs |
0.6230 μs |
0.5827 μs |
31.757 μs |
56 B |
|
|
|
|
|
|
|
| TryComputeHash · Whirlpool · Managed |
8KB |
58.836 μs |
1.1718 μs |
3.0038 μs |
57.556 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
8KB |
76.728 μs |
0.6145 μs |
0.5131 μs |
76.800 μs |
58624 B |
| TryComputeHash · Whirlpool · BouncyCastle |
8KB |
240.887 μs |
1.0425 μs |
0.9752 μs |
240.714 μs |
56 B |
|
|
|
|
|
|
|
| TryComputeHash · Whirlpool · Managed |
128KB |
913.005 μs |
6.1540 μs |
5.7564 μs |
913.813 μs |
- |
| TryComputeHash · Whirlpool · Hashify .NET |
128KB |
1,310.202 μs |
25.4117 μs |
33.0423 μs |
1,309.372 μs |
857372 B |
| TryComputeHash · Whirlpool · BouncyCastle |
128KB |
3,860.332 μs |
74.5913 μs |
73.2586 μs |
3,821.104 μs |
56 B |
RIPEMD-160
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · RIPEMD-160 · BouncyCastle |
128B |
641.7 ns |
1.48 ns |
1.31 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
128B |
703.3 ns |
4.18 ns |
3.91 ns |
- |
|
|
|
|
|
|
| TryComputeHash · RIPEMD-160 · BouncyCastle |
137B |
638.4 ns |
2.69 ns |
2.39 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
137B |
704.8 ns |
2.92 ns |
2.73 ns |
- |
|
|
|
|
|
|
| TryComputeHash · RIPEMD-160 · BouncyCastle |
1KB |
3,552.2 ns |
7.05 ns |
6.25 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
1KB |
3,932.4 ns |
28.19 ns |
26.37 ns |
- |
|
|
|
|
|
|
| TryComputeHash · RIPEMD-160 · BouncyCastle |
1025B |
3,559.0 ns |
9.88 ns |
9.24 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
1025B |
3,929.3 ns |
18.79 ns |
16.66 ns |
- |
|
|
|
|
|
|
| TryComputeHash · RIPEMD-160 · BouncyCastle |
8KB |
26,875.9 ns |
56.46 ns |
50.05 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
8KB |
29,747.4 ns |
181.94 ns |
151.93 ns |
- |
|
|
|
|
|
|
| TryComputeHash · RIPEMD-160 · BouncyCastle |
128KB |
426,248.4 ns |
1,480.62 ns |
1,384.98 ns |
- |
| TryComputeHash · RIPEMD-160 · Managed |
128KB |
471,273.7 ns |
2,642.99 ns |
2,472.25 ns |
- |
Kupyna-256 (DSTU 7564)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Kupyna-256 · Managed |
128B |
2.219 μs |
0.0095 μs |
0.0079 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
128B |
3.254 μs |
0.0117 μs |
0.0104 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-256 · Managed |
137B |
2.215 μs |
0.0149 μs |
0.0132 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
137B |
3.259 μs |
0.0130 μs |
0.0122 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-256 · Managed |
1KB |
11.039 μs |
0.0720 μs |
0.0673 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
1KB |
16.235 μs |
0.0594 μs |
0.0496 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-256 · Managed |
1025B |
11.032 μs |
0.1018 μs |
0.0953 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
1025B |
16.327 μs |
0.1228 μs |
0.1149 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-256 · Managed |
8KB |
81.341 μs |
0.4505 μs |
0.3994 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
8KB |
120.315 μs |
0.6395 μs |
0.5982 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-256 · Managed |
128KB |
1,290.112 μs |
11.5268 μs |
10.7822 μs |
- |
| TryComputeHash · Kupyna-256 · BouncyCastle |
128KB |
1,894.703 μs |
2.8173 μs |
2.1996 μs |
- |
Kupyna-384 (DSTU 7564)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Kupyna-384 · Managed |
128B |
4.326 μs |
0.0308 μs |
0.0273 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
128B |
6.628 μs |
0.0207 μs |
0.0193 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-384 · Managed |
137B |
4.318 μs |
0.0281 μs |
0.0262 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
137B |
6.629 μs |
0.0175 μs |
0.0155 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-384 · Managed |
1KB |
16.415 μs |
0.1117 μs |
0.1045 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
1KB |
25.293 μs |
0.1173 μs |
0.1098 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-384 · Managed |
1025B |
16.453 μs |
0.1207 μs |
0.1129 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
1025B |
25.293 μs |
0.0921 μs |
0.0862 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-384 · Managed |
8KB |
112.686 μs |
0.5792 μs |
0.5418 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
8KB |
174.548 μs |
0.7726 μs |
0.6849 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-384 · Managed |
128KB |
1,765.146 μs |
8.1956 μs |
7.2652 μs |
- |
| TryComputeHash · Kupyna-384 · BouncyCastle |
128KB |
2,733.068 μs |
13.6616 μs |
11.4081 μs |
- |
Kupyna-512 (DSTU 7564)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · Kupyna-512 · Managed |
128B |
4.319 μs |
0.0257 μs |
0.0227 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
128B |
6.620 μs |
0.0240 μs |
0.0201 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-512 · Managed |
137B |
4.325 μs |
0.0205 μs |
0.0182 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
137B |
6.630 μs |
0.0184 μs |
0.0163 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-512 · Managed |
1KB |
16.387 μs |
0.1101 μs |
0.1029 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
1KB |
25.276 μs |
0.1349 μs |
0.1262 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-512 · Managed |
1025B |
16.358 μs |
0.0767 μs |
0.0640 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
1025B |
25.428 μs |
0.1356 μs |
0.1202 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-512 · Managed |
8KB |
112.719 μs |
0.3260 μs |
0.2890 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
8KB |
174.818 μs |
0.7154 μs |
0.6342 μs |
- |
|
|
|
|
|
|
| TryComputeHash · Kupyna-512 · Managed |
128KB |
1,763.256 μs |
8.4060 μs |
7.8630 μs |
- |
| TryComputeHash · Kupyna-512 · BouncyCastle |
128KB |
2,731.852 μs |
12.8837 μs |
12.0514 μs |
- |
LSH-256-256 (KS X 3262)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · LSH-256-256 · Managed |
128B |
1.846 μs |
0.0074 μs |
0.0069 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-256-256 · Managed |
137B |
1.850 μs |
0.0068 μs |
0.0064 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-256-256 · Managed |
1KB |
8.122 μs |
0.0345 μs |
0.0306 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-256-256 · Managed |
1025B |
8.120 μs |
0.0368 μs |
0.0344 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-256-256 · Managed |
8KB |
58.127 μs |
0.1996 μs |
0.1867 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-256-256 · Managed |
128KB |
916.027 μs |
2.7993 μs |
2.6185 μs |
- |
LSH-512-256 (KS X 3262)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · LSH-512-256 · Managed |
128B |
1.038 μs |
0.0047 μs |
0.0042 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-256 · Managed |
137B |
1.034 μs |
0.0050 μs |
0.0046 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-256 · Managed |
1KB |
4.935 μs |
0.0275 μs |
0.0257 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-256 · Managed |
1025B |
4.946 μs |
0.0079 μs |
0.0070 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-256 · Managed |
8KB |
32.047 μs |
0.2102 μs |
0.1966 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-256 · Managed |
128KB |
495.859 μs |
2.3437 μs |
1.9571 μs |
- |
LSH-512-512 (KS X 3262)
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| TryComputeHash · LSH-512-512 · Managed |
128B |
1.037 μs |
0.0021 μs |
0.0019 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-512 · Managed |
137B |
1.035 μs |
0.0034 μs |
0.0030 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-512 · Managed |
1KB |
4.954 μs |
0.0181 μs |
0.0170 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-512 · Managed |
1025B |
4.952 μs |
0.0186 μs |
0.0165 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-512 · Managed |
8KB |
31.994 μs |
0.1344 μs |
0.1258 μs |
- |
|
|
|
|
|
|
| TryComputeHash · LSH-512-512 · Managed |
128KB |
496.102 μs |
2.4450 μs |
2.2871 μs |
- |
XOF Mode
XOF (Extendable Output Function) benchmarks measure the full absorb-then-squeeze cycle: the input is absorbed and an output of equal size is squeezed. The benchmark method is AbsorbSqueeze. All CryptoHives XOF implementations are zero-allocation regardless of output size. BouncyCastle's XOF implementations allocate an internal output buffer proportional to the squeezed length (e.g., ~150 KB for a 128 KiB squeeze), making them unsuitable for high-frequency streaming use.
Note
On Windows x64, the Managed Keccak scalar path outperforms BouncyCastle at small and medium sizes — the opposite of Apple M4, where BouncyCastle's Keccak is marginally faster due to pipelining characteristics of Apple Silicon. Windows CNG exposes a native SHAKE128, SHAKE256, KMAC128, and KMAC256 XOF interface; it does not expose cSHAKE as a standalone API.
SHAKE Family
SHAKE128 and SHAKE256 (FIPS 202) are variable-output-length extensions of the SHA-3 permutation with security strengths of 128 and 256 bits. SHAKE128 uses a 1344-bit rate (21 lanes) while SHAKE256 uses a 1088-bit rate — making SHAKE128 ~14% faster for the same output size.
On AMD Ryzen 5 7600X, CryptoHives Managed is the fastest at small inputs: ~47% faster than BouncyCastle at 128 B for SHAKE128, and ~49% faster for SHAKE256. At 8 KiB and beyond, OS Native (Windows CNG) takes the lead, presumably benefiting from a wider SIMD path in CNG's Keccak implementation. BouncyCastle is slowest across all sizes and allocates output-proportional buffers (~150 KB at 128 KiB squeeze).
Key observations:
- Managed: Fastest at ≤ 1 KiB (~47–49% faster than BC); zero-allocation
- OS Native: Fastest at ≥ 8 KiB; zero-allocation
- BouncyCastle: Slowest; allocates ~150 KB at 128 KiB squeeze; ~9% slower than Managed at 128 KiB
- SHAKE128 ~16% faster than SHAKE256 at 128 KiB due to wider rate
SHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · SHAKE128 · Managed |
128B |
2.720 μs |
0.0137 μs |
0.0128 μs |
- |
| AbsorbSqueeze · SHAKE128 · OS Native |
128B |
3.243 μs |
0.0200 μs |
0.0187 μs |
- |
| AbsorbSqueeze · SHAKE128 · BouncyCastle |
128B |
3.998 μs |
0.0187 μs |
0.0156 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE128 · Managed |
1KB |
4.426 μs |
0.0280 μs |
0.0248 μs |
- |
| AbsorbSqueeze · SHAKE128 · OS Native |
1KB |
4.677 μs |
0.0385 μs |
0.0360 μs |
- |
| AbsorbSqueeze · SHAKE128 · BouncyCastle |
1KB |
5.918 μs |
0.0386 μs |
0.0361 μs |
1152 B |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE128 · OS Native |
8KB |
14.587 μs |
0.0576 μs |
0.0511 μs |
- |
| AbsorbSqueeze · SHAKE128 · Managed |
8KB |
16.924 μs |
0.1154 μs |
0.1080 μs |
- |
| AbsorbSqueeze · SHAKE128 · BouncyCastle |
8KB |
19.362 μs |
0.1191 μs |
0.1114 μs |
9216 B |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE128 · OS Native |
128KB |
187.459 μs |
0.8724 μs |
0.7734 μs |
- |
| AbsorbSqueeze · SHAKE128 · Managed |
128KB |
232.700 μs |
1.6526 μs |
1.5458 μs |
- |
| AbsorbSqueeze · SHAKE128 · BouncyCastle |
128KB |
254.371 μs |
1.0497 μs |
0.9305 μs |
149760 B |
SHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · SHAKE256 · Managed |
128B |
3.280 μs |
0.0152 μs |
0.0142 μs |
- |
| AbsorbSqueeze · SHAKE256 · OS Native |
128B |
3.913 μs |
0.0268 μs |
0.0224 μs |
- |
| AbsorbSqueeze · SHAKE256 · BouncyCastle |
128B |
4.886 μs |
0.0312 μs |
0.0292 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE256 · Managed |
1KB |
5.176 μs |
0.0270 μs |
0.0239 μs |
- |
| AbsorbSqueeze · SHAKE256 · OS Native |
1KB |
5.570 μs |
0.0395 μs |
0.0370 μs |
- |
| AbsorbSqueeze · SHAKE256 · BouncyCastle |
1KB |
7.127 μs |
0.0228 μs |
0.0213 μs |
1120 B |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE256 · OS Native |
8KB |
17.977 μs |
0.0917 μs |
0.0813 μs |
- |
| AbsorbSqueeze · SHAKE256 · Managed |
8KB |
19.717 μs |
0.1401 μs |
0.1311 μs |
- |
| AbsorbSqueeze · SHAKE256 · BouncyCastle |
8KB |
24.041 μs |
0.1322 μs |
0.1236 μs |
9600 B |
|
|
|
|
|
|
| AbsorbSqueeze · SHAKE256 · OS Native |
128KB |
230.806 μs |
1.2026 μs |
1.1249 μs |
- |
| AbsorbSqueeze · SHAKE256 · Managed |
128KB |
267.690 μs |
1.6346 μs |
1.4490 μs |
- |
| AbsorbSqueeze · SHAKE256 · BouncyCastle |
128KB |
313.548 μs |
1.2497 μs |
1.1078 μs |
154080 B |
cSHAKE Family
cSHAKE128 and cSHAKE256 (NIST SP 800-185) add domain separation via function-name and customization strings on top of SHAKE. Windows CNG does not expose a cSHAKE XOF API, so only Managed and BouncyCastle are available here.
The CryptoHives Managed implementation leads at all sizes: ~47% faster than BouncyCastle at 128 B for cSHAKE128, and still ~9% faster at 128 KiB. The advantage at large sizes is distinct from the plain SHAKE results where OS Native overtook Managed — and shows the penalty of BouncyCastle's allocating XOF path. Both Managed and BouncyCastle are slightly slower than their plain SHAKE counterparts due to the encoding of customization strings during initialization.
Key observations:
- Managed: Fastest at all sizes; ~47% faster than BC at 128 B, ~9% at 128 KiB; zero-allocation
- BouncyCastle: Allocates ~150 KB at 128 KiB squeeze
- No OS Native available for cSHAKE on Windows
cSHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · cSHAKE128 · Managed |
128B |
2.722 μs |
0.0137 μs |
0.0122 μs |
- |
| AbsorbSqueeze · cSHAKE128 · BouncyCastle |
128B |
4.002 μs |
0.0272 μs |
0.0254 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE128 · Managed |
1KB |
4.421 μs |
0.0211 μs |
0.0187 μs |
- |
| AbsorbSqueeze · cSHAKE128 · BouncyCastle |
1KB |
5.903 μs |
0.0342 μs |
0.0320 μs |
1152 B |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE128 · Managed |
8KB |
16.946 μs |
0.0769 μs |
0.0682 μs |
- |
| AbsorbSqueeze · cSHAKE128 · BouncyCastle |
8KB |
22.867 μs |
0.3172 μs |
0.2967 μs |
9216 B |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE128 · Managed |
128KB |
232.613 μs |
1.3545 μs |
1.2007 μs |
- |
| AbsorbSqueeze · cSHAKE128 · BouncyCastle |
128KB |
253.865 μs |
1.3373 μs |
1.2509 μs |
149760 B |
cSHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · cSHAKE256 · Managed |
128B |
3.285 μs |
0.0201 μs |
0.0188 μs |
- |
| AbsorbSqueeze · cSHAKE256 · BouncyCastle |
128B |
4.881 μs |
0.0168 μs |
0.0157 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE256 · Managed |
1KB |
5.176 μs |
0.0203 μs |
0.0180 μs |
- |
| AbsorbSqueeze · cSHAKE256 · BouncyCastle |
1KB |
7.045 μs |
0.0211 μs |
0.0198 μs |
1120 B |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE256 · Managed |
8KB |
19.910 μs |
0.3334 μs |
0.2784 μs |
- |
| AbsorbSqueeze · cSHAKE256 · BouncyCastle |
8KB |
23.971 μs |
0.0777 μs |
0.0689 μs |
9600 B |
|
|
|
|
|
|
| AbsorbSqueeze · cSHAKE256 · Managed |
128KB |
268.838 μs |
1.0421 μs |
0.9238 μs |
- |
| AbsorbSqueeze · cSHAKE256 · BouncyCastle |
128KB |
313.654 μs |
1.8091 μs |
1.6922 μs |
154080 B |
KMAC Family (XOF)
KMAC128 XOF and KMAC256 XOF (NIST SP 800-185) are keyed variable-length PRFs based on cSHAKE. Windows CNG exposes KMAC XOF natively; it allocates a fixed 32 B per call for the output descriptor.
Managed leads at small sizes: ~59% faster than BouncyCastle at 128 B for KMAC128, ~58% for KMAC256. OS Native displaces Managed at ≥ 8 KiB (~12% faster than Managed at that crossover point). BouncyCastle is slowest throughout and allocates ~150 KB at 128 KiB.
Key observations:
- Managed: Fastest at ≤ 1 KiB; zero-allocation
- OS Native: Fastest at ≥ 8 KiB; allocates a fixed 32 B per call
- BouncyCastle: Slowest; allocates 128 B at small sizes, ~150 KB at 128 KiB
KMAC128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · KMAC-128 · Managed |
128B |
3.137 μs |
0.0127 μs |
0.0106 μs |
- |
| AbsorbSqueeze · KMAC-128 · OS Native |
128B |
3.862 μs |
0.0266 μs |
0.0236 μs |
32 B |
| AbsorbSqueeze · KMAC-128 · BouncyCastle |
128B |
4.986 μs |
0.0189 μs |
0.0177 μs |
128 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-128 · Managed |
1KB |
4.846 μs |
0.0319 μs |
0.0266 μs |
- |
| AbsorbSqueeze · KMAC-128 · OS Native |
1KB |
5.261 μs |
0.0352 μs |
0.0329 μs |
32 B |
| AbsorbSqueeze · KMAC-128 · BouncyCastle |
1KB |
6.893 μs |
0.0170 μs |
0.0151 μs |
1280 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-128 · OS Native |
8KB |
15.210 μs |
0.0496 μs |
0.0414 μs |
32 B |
| AbsorbSqueeze · KMAC-128 · Managed |
8KB |
17.349 μs |
0.1498 μs |
0.1401 μs |
- |
| AbsorbSqueeze · KMAC-128 · BouncyCastle |
8KB |
20.355 μs |
0.0940 μs |
0.0833 μs |
9344 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-128 · OS Native |
128KB |
188.629 μs |
1.2776 μs |
1.1326 μs |
32 B |
| AbsorbSqueeze · KMAC-128 · Managed |
128KB |
233.733 μs |
1.0369 μs |
0.9191 μs |
- |
| AbsorbSqueeze · KMAC-128 · BouncyCastle |
128KB |
255.404 μs |
1.9300 μs |
1.8054 μs |
149888 B |
KMAC256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · KMAC-256 · Managed |
128B |
3.702 μs |
0.0096 μs |
0.0080 μs |
- |
| AbsorbSqueeze · KMAC-256 · OS Native |
128B |
4.533 μs |
0.0285 μs |
0.0267 μs |
32 B |
| AbsorbSqueeze · KMAC-256 · BouncyCastle |
128B |
5.843 μs |
0.0241 μs |
0.0226 μs |
128 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-256 · Managed |
1KB |
5.599 μs |
0.0352 μs |
0.0312 μs |
- |
| AbsorbSqueeze · KMAC-256 · OS Native |
1KB |
6.158 μs |
0.0253 μs |
0.0212 μs |
32 B |
| AbsorbSqueeze · KMAC-256 · BouncyCastle |
1KB |
8.060 μs |
0.0279 μs |
0.0247 μs |
1248 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-256 · OS Native |
8KB |
18.680 μs |
0.1356 μs |
0.1269 μs |
32 B |
| AbsorbSqueeze · KMAC-256 · Managed |
8KB |
20.131 μs |
0.1130 μs |
0.1057 μs |
- |
| AbsorbSqueeze · KMAC-256 · BouncyCastle |
8KB |
24.888 μs |
0.0869 μs |
0.0813 μs |
9728 B |
|
|
|
|
|
|
| AbsorbSqueeze · KMAC-256 · OS Native |
128KB |
231.475 μs |
1.3978 μs |
1.3075 μs |
32 B |
| AbsorbSqueeze · KMAC-256 · Managed |
128KB |
268.190 μs |
1.9150 μs |
1.6976 μs |
- |
| AbsorbSqueeze · KMAC-256 · BouncyCastle |
128KB |
315.668 μs |
1.7314 μs |
1.6196 μs |
154208 B |
KangarooTwelve Family (XOF)
KangarooTwelve (KT128 / KT256) are tree-hashing XOFs based on the Keccak permutation with 12 rounds (vs 24 for full SHA-3). The reduced-round design yields ~2× throughput over SHAKE128 while maintaining 128-bit security. No external competitor implementations are available for comparison.
On AMD Ryzen 5 7600X, KT128 XOF is ~75% faster than SHAKE128 Managed at 128 B, and ~45% faster at 128 KiB. The larger throughput advantage at bulk sizes reflects the 12-round saving being more impactful when the permutation dominates. KT256 uses the narrower cSHAKE256 rate and is slightly slower.
Key observations:
- KT128: ~75% faster than SHAKE128 Managed at 128 B; ~45% faster at 128 KiB
- KT256: ~19% slower than KT128 at 128 KiB due to narrower rate (1088-bit vs 1344-bit)
- Zero-allocation; no BouncyCastle or OS comparison available
KT128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · KT128 · Managed |
128B |
1.556 μs |
0.0075 μs |
0.0070 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT128 · Managed |
1KB |
2.711 μs |
0.0175 μs |
0.0163 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT128 · Managed |
8KB |
11.353 μs |
0.0615 μs |
0.0545 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT128 · Managed |
128KB |
160.315 μs |
0.9537 μs |
0.8921 μs |
- |
KT256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · KT256 · Managed |
128B |
1.848 μs |
0.0109 μs |
0.0102 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT256 · Managed |
1KB |
3.141 μs |
0.0251 μs |
0.0235 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT256 · Managed |
8KB |
12.827 μs |
0.0654 μs |
0.0580 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · KT256 · Managed |
128KB |
179.080 μs |
0.9730 μs |
0.8625 μs |
- |
TurboSHAKE Family (XOF)
TurboSHAKE128 and TurboSHAKE256 (IETF RFC 9562) use 12 Keccak rounds with a simplified padding scheme and a plain XOF interface with no tree-hashing overhead. They are the simplest and fastest Keccak-family XOFs available.
On AMD Ryzen 5 7600X, TurboSHAKE128 XOF and KT128 XOF perform nearly identically across all payload sizes — essentially the same throughput with TurboSHAKE having a slightly simpler API. TurboSHAKE128 is the fastest Keccak-based XOF on this platform.
Key observations:
- TurboSHAKE128 and KT128 deliver effectively equal throughput on x64
- Fastest Keccak XOF on this platform at both small and large sizes
- Zero-allocation; no OS or BouncyCastle comparison available
TurboSHAKE128
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · TurboSHAKE128 · Managed |
128B |
1.539 μs |
0.0093 μs |
0.0087 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE128 · Managed |
1KB |
2.697 μs |
0.0099 μs |
0.0093 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE128 · Managed |
8KB |
11.373 μs |
0.0399 μs |
0.0333 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE128 · Managed |
128KB |
161.458 μs |
0.7666 μs |
0.7170 μs |
- |
TurboSHAKE256
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · TurboSHAKE256 · Managed |
128B |
1.828 μs |
0.0094 μs |
0.0083 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE256 · Managed |
1KB |
3.087 μs |
0.0160 μs |
0.0125 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE256 · Managed |
8KB |
12.990 μs |
0.1270 μs |
0.1126 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · TurboSHAKE256 · Managed |
128KB |
185.211 μs |
3.6781 μs |
4.2357 μs |
- |
BLAKE3 (XOF)
BLAKE3 XOF produces output of arbitrary length using the same ChaCha-based compression function but extending the tree hashing to output-reader mode. On x64, CryptoHives ships three implementation tiers: Native (Rust via blake3-dotnet, uses AVX2/AVX-512 hash-many parallelism), Ssse3 (SSSE3-based parallel chunk generation), and Managed (scalar).
The Native Rust implementation dominates at all sizes: ~12× faster than Managed at 128 KiB, and ~15.7× faster than BouncyCastle. BouncyCastle's BLAKE3 XOF is extremely slow — it generates extended output sequentially without any tree parallelism and allocates only a fixed 56 B per call. Ssse3 provides a middle tier: ~4.3× faster than Managed at 128 KiB.
Key observations:
- Native: ~12× faster than Managed at 128 KiB; ~15.7× faster than BC; zero-allocation
- Ssse3: ~4.3× faster than Managed at 128 KiB; zero-allocation
- Managed: ~2.4× faster than BC at 128 KiB; zero-allocation
- BouncyCastle: Slowest by a large margin; allocates only 56 B (BC does not buffer large output slabs)
- Native tree hash-many exploits AVX-512 on capable CPUs; falls back to AVX2 on Ryzen 5 7600X
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · BLAKE3 · Native |
128B |
1.573 μs |
0.0038 μs |
0.0035 μs |
- |
| AbsorbSqueeze · BLAKE3 · Ssse3 |
128B |
2.347 μs |
0.0060 μs |
0.0056 μs |
- |
| AbsorbSqueeze · BLAKE3 · Managed |
128B |
9.110 μs |
0.0258 μs |
0.0241 μs |
- |
| AbsorbSqueeze · BLAKE3 · BouncyCastle |
128B |
19.425 μs |
0.0801 μs |
0.0749 μs |
56 B |
|
|
|
|
|
|
| AbsorbSqueeze · BLAKE3 · Native |
1KB |
2.147 μs |
0.0049 μs |
0.0045 μs |
- |
| AbsorbSqueeze · BLAKE3 · Ssse3 |
1KB |
3.221 μs |
0.0048 μs |
0.0040 μs |
- |
| AbsorbSqueeze · BLAKE3 · Managed |
1KB |
12.832 μs |
0.0422 μs |
0.0395 μs |
- |
| AbsorbSqueeze · BLAKE3 · BouncyCastle |
1KB |
28.551 μs |
0.0594 μs |
0.0556 μs |
56 B |
|
|
|
|
|
|
| AbsorbSqueeze · BLAKE3 · Native |
8KB |
6.633 μs |
0.0225 μs |
0.0188 μs |
- |
| AbsorbSqueeze · BLAKE3 · Ssse3 |
8KB |
10.253 μs |
0.0378 μs |
0.0354 μs |
- |
| AbsorbSqueeze · BLAKE3 · Managed |
8KB |
42.312 μs |
0.0701 μs |
0.0547 μs |
- |
| AbsorbSqueeze · BLAKE3 · BouncyCastle |
8KB |
97.889 μs |
0.1732 μs |
0.1535 μs |
56 B |
|
|
|
|
|
|
| AbsorbSqueeze · BLAKE3 · Native |
128KB |
84.243 μs |
1.2971 μs |
1.1499 μs |
- |
| AbsorbSqueeze · BLAKE3 · Ssse3 |
128KB |
127.910 μs |
0.2692 μs |
0.2386 μs |
- |
| AbsorbSqueeze · BLAKE3 · Managed |
128KB |
549.115 μs |
1.2543 μs |
1.1119 μs |
- |
| AbsorbSqueeze · BLAKE3 · BouncyCastle |
128KB |
1,318.038 μs |
2.7657 μs |
2.4517 μs |
56 B |
Ascon-XOF128
Ascon-XOF128 (NIST Lightweight Cryptography standard 2023) is the XOF variant of the Ascon family using the same 320-bit permutation as Ascon-Hash256. It requires a 12-round permutation call per 16 bytes of rate, making it inherently slower than SHAKE/BLAKE XOFs for large outputs.
On AMD Ryzen 5 7600X, the CryptoHives Managed implementation is ~33% faster than BouncyCastle across all sizes. Zero allocation on both paths.
Key observations:
- Managed: ~33% faster than BouncyCastle at all sizes; zero-allocation
- Throughput ~3× slower than SHAKE128 Managed at 128 KiB due to the narrow 128-bit rate
- Designed for memory-constrained environments, not bulk throughput
| Description |
TestDataSize |
Mean |
Error |
StdDev |
Allocated |
| AbsorbSqueeze · Ascon-XOF128 · Managed |
128B |
7.560 μs |
0.0212 μs |
0.0198 μs |
- |
| AbsorbSqueeze · Ascon-XOF128 · BouncyCastle |
128B |
10.074 μs |
0.0416 μs |
0.0368 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · Ascon-XOF128 · Managed |
1KB |
10.713 μs |
0.0640 μs |
0.0599 μs |
- |
| AbsorbSqueeze · Ascon-XOF128 · BouncyCastle |
1KB |
14.248 μs |
0.0688 μs |
0.0644 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · Ascon-XOF128 · Managed |
8KB |
35.477 μs |
0.2039 μs |
0.1808 μs |
- |
| AbsorbSqueeze · Ascon-XOF128 · BouncyCastle |
8KB |
47.295 μs |
0.1227 μs |
0.1088 μs |
- |
|
|
|
|
|
|
| AbsorbSqueeze · Ascon-XOF128 · Managed |
128KB |
461.611 μs |
1.6842 μs |
1.4930 μs |
- |
| AbsorbSqueeze · Ascon-XOF128 · BouncyCastle |
128KB |
615.647 μs |
3.0849 μs |
2.7346 μs |
- |