aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorKazuki Yamaguchi <k@rhe.jp>2020-05-18 16:15:07 +0900
committerKazuki Yamaguchi <k@rhe.jp>2020-06-30 14:28:31 +0900
commit0317e2fc028be40a7d64d0e4337d3e21539613ce (patch)
treeeeee51f297d57e237ebe321a90281c0694a34ce2 /lib
parent8253d7c9cea16c2aa009b59db4f5d93afb74c6eb (diff)
downloadruby-openssl-0317e2fc028be40a7d64d0e4337d3e21539613ce.tar.gz
hmac: migrate from the low-level HMAC API to the EVP APIky/hmac-evp
Use the EVP API instead of the low-level HMAC API. Use of the HMAC API has been discouraged and is being marked as deprecated starting from OpenSSL 3.0.0. The two singleton methods OpenSSL::HMAC, HMAC.digest and HMAC.hexdigest are now in lib/openssl/hmac.rb.
Diffstat (limited to 'lib')
-rw-r--r--lib/openssl/hmac.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/lib/openssl/hmac.rb b/lib/openssl/hmac.rb
index 3d442761..9bc8bc8d 100644
--- a/lib/openssl/hmac.rb
+++ b/lib/openssl/hmac.rb
@@ -9,5 +9,45 @@ module OpenSSL
OpenSSL.fixed_length_secure_compare(self.digest, other.digest)
end
+
+ class << self
+ # :call-seq:
+ # HMAC.digest(digest, key, data) -> aString
+ #
+ # Returns the authentication code as a binary string. The _digest_ parameter
+ # specifies the digest algorithm to use. This may be a String representing
+ # the algorithm name or an instance of OpenSSL::Digest.
+ #
+ # === Example
+ # key = 'key'
+ # data = 'The quick brown fox jumps over the lazy dog'
+ #
+ # hmac = OpenSSL::HMAC.digest('SHA1', key, data)
+ # #=> "\xDE|\x9B\x85\xB8\xB7\x8A\xA6\xBC\x8Az6\xF7\n\x90p\x1C\x9D\xB4\xD9"
+ def digest(digest, key, data)
+ hmac = new(key, digest)
+ hmac << data
+ hmac.digest
+ end
+
+ # :call-seq:
+ # HMAC.hexdigest(digest, key, data) -> aString
+ #
+ # Returns the authentication code as a hex-encoded string. The _digest_
+ # parameter specifies the digest algorithm to use. This may be a String
+ # representing the algorithm name or an instance of OpenSSL::Digest.
+ #
+ # === Example
+ # key = 'key'
+ # data = 'The quick brown fox jumps over the lazy dog'
+ #
+ # hmac = OpenSSL::HMAC.hexdigest('SHA1', key, data)
+ # #=> "de7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9"
+ def hexdigest(digest, key, data)
+ hmac = new(key, digest)
+ hmac << data
+ hmac.hexdigest
+ end
+ end
end
end