Skip to content

Instantly share code, notes, and snippets.

@rickhull
Created March 6, 2024 15:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rickhull/e0df6d9ac714edfe592a2841ef5cc49a to your computer and use it in GitHub Desktop.
Save rickhull/e0df6d9ac714edfe592a2841ef5cc49a to your computer and use it in GitHub Desktop.
require 'zlib'
require 'digest'
require 'openssl'
require 'benchmark/ips'
DIGESTS = %w[MD5 SHA1 SHA256 SHA384 SHA512 RMD160].map { |name|
Digest(name).new
}
OPENSSL_DIGESTS = %w[SHA1
SHA224 SHA256 SHA384 SHA512
SHA512-224 SHA512-256
SHA3-224 SHA3-256 SHA3-384 SHA3-512
BLAKE2s256 BLAKE2b512].map { |name|
OpenSSL::Digest.new(name)
}
# so much faster, it throws off the comparison
INCLUDE_CRC32 = false
str = 'All work and no play makes Jack a very dull boy.'
Benchmark.ips do |b|
b.config(time: 1, warmup: 0.2)
if INCLUDE_CRC32
b.report("Zlib.crc32") {
Zlib.crc32(str)
}
end
DIGESTS.each { |algo|
b.report(algo.class.to_s) {
algo.digest(str)
}
}
OPENSSL_DIGESTS.each { |algo|
b.report("OpenSSL::Digest(#{algo.name})") {
algo.digest(str)
}
}
b.compare!
end
[rwh@nixos:~/git/compsci]$ ruby test/bench/digest.rb
ruby 3.2.2 (2023-03-30 revision e51014f9c0) +YJIT [x86_64-linux]
Warming up --------------------------------------
Digest::MD5 211.105k i/100ms
Digest::SHA1 181.716k i/100ms
Digest::SHA256 136.872k i/100ms
Digest::SHA384 112.944k i/100ms
Digest::SHA512 111.909k i/100ms
Digest::RMD160 161.748k i/100ms
OpenSSL::Digest(SHA1)
99.778k i/100ms
OpenSSL::Digest(SHA224)
89.134k i/100ms
OpenSSL::Digest(SHA256)
88.503k i/100ms
OpenSSL::Digest(SHA384)
81.529k i/100ms
OpenSSL::Digest(SHA512)
80.597k i/100ms
OpenSSL::Digest(SHA512-224)
77.132k i/100ms
OpenSSL::Digest(SHA512-256)
78.483k i/100ms
OpenSSL::Digest(SHA3-224)
68.163k i/100ms
OpenSSL::Digest(SHA3-256)
68.680k i/100ms
OpenSSL::Digest(SHA3-384)
68.310k i/100ms
OpenSSL::Digest(SHA3-512)
68.028k i/100ms
OpenSSL::Digest(BLAKE2s256)
84.671k i/100ms
OpenSSL::Digest(BLAKE2b512)
82.297k i/100ms
Calculating -------------------------------------
Digest::MD5 2.081M (± 1.4%) i/s - 2.111M in 1.014597s
Digest::SHA1 1.807M (± 0.3%) i/s - 1.817M in 1.005586s
Digest::SHA256 1.357M (± 0.4%) i/s - 1.369M in 1.008647s
Digest::SHA384 1.158M (± 0.7%) i/s - 1.242M in 1.072759s
Digest::SHA512 1.134M (± 0.4%) i/s - 1.231M in 1.085901s
Digest::RMD160 1.624M (± 0.3%) i/s - 1.779M in 1.095586s
OpenSSL::Digest(SHA1)
1.000M (± 0.4%) i/s - 1.098M in 1.097361s
OpenSSL::Digest(SHA224)
894.996k (± 0.2%) i/s - 980.474k in 1.095512s
OpenSSL::Digest(SHA256)
888.774k (± 0.4%) i/s - 973.533k in 1.095385s
OpenSSL::Digest(SHA384)
813.139k (± 0.6%) i/s - 815.290k in 1.002680s
OpenSSL::Digest(SHA512)
813.274k (± 0.3%) i/s - 886.567k in 1.090129s
OpenSSL::Digest(SHA512-224)
773.323k (± 0.3%) i/s - 848.452k in 1.097162s
OpenSSL::Digest(SHA512-256)
786.250k (± 0.4%) i/s - 863.313k in 1.098034s
OpenSSL::Digest(SHA3-224)
681.502k (± 0.2%) i/s - 681.630k in 1.000193s
OpenSSL::Digest(SHA3-256)
683.065k (± 0.3%) i/s - 686.800k in 1.005480s
OpenSSL::Digest(SHA3-384)
683.624k (± 0.4%) i/s - 751.410k in 1.099171s
OpenSSL::Digest(SHA3-512)
682.436k (± 0.3%) i/s - 748.308k in 1.096534s
OpenSSL::Digest(BLAKE2s256)
862.242k (± 0.3%) i/s - 931.381k in 1.080198s
OpenSSL::Digest(BLAKE2b512)
821.966k (± 0.7%) i/s - 822.970k in 1.001273s
Comparison:
Digest::MD5: 2081096.6 i/s
Digest::SHA1: 1807077.9 i/s - 1.15x slower
Digest::RMD160: 1624009.0 i/s - 1.28x slower
Digest::SHA256: 1357010.0 i/s - 1.53x slower
Digest::SHA384: 1158173.7 i/s - 1.80x slower
Digest::SHA512: 1133640.3 i/s - 1.84x slower
OpenSSL::Digest(SHA1): 1000191.7 i/s - 2.08x slower
OpenSSL::Digest(SHA224): 894996.4 i/s - 2.33x slower
OpenSSL::Digest(SHA256): 888774.5 i/s - 2.34x slower
OpenSSL::Digest(BLAKE2s256): 862241.9 i/s - 2.41x slower
OpenSSL::Digest(BLAKE2b512): 821966.2 i/s - 2.53x slower
OpenSSL::Digest(SHA512): 813274.2 i/s - 2.56x slower
OpenSSL::Digest(SHA384): 813139.2 i/s - 2.56x slower
OpenSSL::Digest(SHA512-256): 786250.2 i/s - 2.65x slower
OpenSSL::Digest(SHA512-224): 773323.3 i/s - 2.69x slower
OpenSSL::Digest(SHA3-384): 683624.2 i/s - 3.04x slower
OpenSSL::Digest(SHA3-256): 683065.0 i/s - 3.05x slower
OpenSSL::Digest(SHA3-512): 682436.4 i/s - 3.05x slower
OpenSSL::Digest(SHA3-224): 681501.7 i/s - 3.05x slower
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment