Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move to OpenSSL Digest classes #549

Merged
merged 3 commits into from
Jan 6, 2021
Merged

Move to OpenSSL Digest classes #549

merged 3 commits into from
Jan 6, 2021

Conversation

dbussink
Copy link
Contributor

@dbussink dbussink commented Jan 5, 2021

In older Ruby versions, Digest uses legacy OpenSSL APIs to implement the digest methods. These APIs break in some configurations such as FIPS mode enforcement. In the latest Ruby, this was removed (see ruby/ruby#3149), but that means Digest uses the non OpenSSL implementations. In those same environments that want FIPS enforcement, that is not desired as all crypto operations should be using OpenSSL there.

In ruby/openssl#377, it is discussed to replace the constants when OpenSSL is loaded. But what is a limiting factor here, is that OpenSSL doesn't have the equivalent of Digest::SHA2 (which really ends up computing a SHA256 digest).

So this removes the usage of Digest::SHA2 which is harder to wrap and also recommends to use the OpenSSL digest by default.

In older Ruby versions, Digest uses legacy OpenSSL APIs to implement the
digest methods. These APIs break in some configurations such as FIPS
mode enforcement. In the latest Ruby, this was removed (see
ruby/ruby#3149), but that means Digest uses the
non OpenSSL implementations. In those same environments that want FIPS
enforcement, that is not desired as all crypto operations should be
using OpenSSL there.

In ruby/openssl#377, it is discussed to replace
the constants when OpenSSL is loaded. But what is a limiting factor
here, is that OpenSSL doesn't have the equivalent of Digest::SHA2 (which
really ends up computing a SHA256 digest).

So this removes the usage of Digest::SHA2 which is harder to wrap and
also recommends to use the OpenSSL digest by default.
lib/i18n/backend/cache.rb Outdated Show resolved Hide resolved
@radar
Copy link
Collaborator

radar commented Jan 5, 2021

PR LGTM. Thank you @dbussink!

@dbussink
Copy link
Contributor Author

dbussink commented Jan 5, 2021

Is this still the link that should be here?

This question also led me to look a bit further and update the tests as well to show using an OpenSSL Digest instead.

@radar
Copy link
Collaborator

radar commented Jan 6, 2021

I looked at this PR again today and thought that the difference between Digest::SHA2 and OpenSSL::Digest::SHA256 might confuse future people.

Here's something that shows they're equivalent:

require 'digest/sha2'
require 'openssl'
Digest::SHA2.hexdigest("foo") === OpenSSL::Digest::SHA256.hexdigest("foo")

@radar radar merged commit ae0c6df into ruby-i18n:master Jan 6, 2021
@radar
Copy link
Collaborator

radar commented Jan 6, 2021

Thank you @dbussink!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants