Came across this issue after upgrading Ruby to 3.1.0 in one of the apps I'm working on.
rbenv to manage Ruby versions, and it turns out they recently started building Ruby with OpenSSL 3.0 instead of OpenSSL 1.1.
OpenSSL 3.0, in turn, has retired a number of algorithms (including MD4 function, which was used in that app).
And hello! After the update, we call
OpenSSL::Digest::MD4.hexdigest() and get this:
OpenSSL::Digest::DigestError, message: Digest initialization failed: initialization error
So, if you're using
rbenv to update Ruby to 3.1.x and your code uses one of the retired algorithms, there's a chance you'll come across a similar issue.
A temporary workaround if you can't get rid of legacy code right away:
- install Ruby with OpenSSL 1.1 (note I'm using brew here):
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=$(brew --prefix firstname.lastname@example.org)" && rbenv install 3.1.0
- as an alternative, look into re-enabling MD4 in OpenSSL (this looks useful)
Another alternative would be to use an MD4 implementation in pure Ruby.