diff --git a/README.md b/README.md index 8228f8e..6d1faf0 100644 --- a/README.md +++ b/README.md @@ -30,24 +30,24 @@ Or install it yourself as: require 'digest' # Compute a complete digest -Digest::SHA256.digest 'message' #=> "\xABS\n\x13\xE4Y..." +Digest(:SHA256).digest 'message' #=> "\xABS\n\x13\xE4Y..." -sha256 = Digest::SHA256.new +sha256 = Digest(:SHA256).new sha256.digest 'message' #=> "\xABS\n\x13\xE4Y..." # Other encoding formats -Digest::SHA256.hexdigest 'message' #=> "ab530a13e459..." -Digest::SHA256.base64digest 'message' #=> "q1MKE+RZFJgr..." +Digest(:SHA256).hexdigest 'message' #=> "ab530a13e459..." +Digest(:SHA256).base64digest 'message' #=> "q1MKE+RZFJgr..." # Compute digest by chunks -md5 = Digest::MD5.new +md5 = Digest(:MD5).new md5.update 'message1' md5 << 'message2' # << is an alias for update md5.hexdigest #=> "94af09c09bb9..." # Compute digest for a file -sha256 = Digest::SHA256.file 'testfile' +sha256 = Digest(:SHA256).file 'testfile' sha256.hexdigest ``` diff --git a/ext/digest/digest.c b/ext/digest/digest.c index 68837a6..f316620 100644 --- a/ext/digest/digest.c +++ b/ext/digest/digest.c @@ -37,29 +37,36 @@ RUBY_EXTERN void Init_digest_base(void); * are also called one-way functions, it is easy to compute a digest from * a message, but it is infeasible to generate a message from a digest. * + * Prefer using the thread-safe Digest() method to dynamically look up + * an algorithm. + * + * If you are accessing an algorithm directly via its constant, ensure you + * explicitly require the algorithm under the digest/ path (ex. digest/sha2). + * Relying on the constant lookup via +const_missing+ is not thread-safe. + * * == Examples * * require 'digest' * * # Compute a complete digest - * Digest::SHA256.digest 'message' #=> "\xABS\n\x13\xE4Y..." + * Digest(:SHA256).digest 'message' #=> "\xABS\n\x13\xE4Y..." * - * sha256 = Digest::SHA256.new + * sha256 = Digest(:SHA256).new * sha256.digest 'message' #=> "\xABS\n\x13\xE4Y..." * * # Other encoding formats - * Digest::SHA256.hexdigest 'message' #=> "ab530a13e459..." - * Digest::SHA256.base64digest 'message' #=> "q1MKE+RZFJgr..." + * Digest(:SHA256).hexdigest 'message' #=> "ab530a13e459..." + * Digest(:SHA256).base64digest 'message' #=> "q1MKE+RZFJgr..." * * # Compute digest by chunks - * md5 = Digest::MD5.new + * md5 = Digest(:MD5).new * md5.update 'message1' * md5 << 'message2' # << is an alias for update * * md5.hexdigest #=> "94af09c09bb9..." * * # Compute digest for a file - * sha256 = Digest::SHA256.file 'testfile' + * sha256 = Digest(:SHA256).file 'testfile' * sha256.hexdigest * * Additionally digests can be encoded in "bubble babble" format as a sequence diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c index b81fd94..a986420 100644 --- a/ext/digest/md5/md5init.c +++ b/ext/digest/md5/md5init.c @@ -28,7 +28,7 @@ static const rb_digest_metadata_t md5 = { * MD5 calculates a digest of 128 bits (16 bytes). * * == Examples - * require 'digest' + * require 'digest/md5' * * # Compute a complete digest * Digest::MD5.hexdigest 'abc' #=> "90015098..." diff --git a/ext/digest/rmd160/rmd160init.c b/ext/digest/rmd160/rmd160init.c index e4b707e..89eb38c 100644 --- a/ext/digest/rmd160/rmd160init.c +++ b/ext/digest/rmd160/rmd160init.c @@ -24,7 +24,7 @@ static const rb_digest_metadata_t rmd160 = { * RMD160 calculates a digest of 160 bits (20 bytes). * * == Examples - * require 'digest' + * require 'digest/rmd160' * * # Compute a complete digest * Digest::RMD160.hexdigest 'abc' #=> "8eb208f7..." diff --git a/ext/digest/sha1/sha1init.c b/ext/digest/sha1/sha1init.c index c39959f..686209a 100644 --- a/ext/digest/sha1/sha1init.c +++ b/ext/digest/sha1/sha1init.c @@ -30,7 +30,7 @@ static const rb_digest_metadata_t sha1 = { * SHA-1 calculates a digest of 160 bits (20 bytes). * * == Examples - * require 'digest' + * require 'digest/sha1' * * # Compute a complete digest * Digest::SHA1.hexdigest 'abc' #=> "a9993e36..." diff --git a/lib/digest/sha2.rb b/lib/digest/sha2.rb index f17593a..4b0e8d6 100644 --- a/lib/digest/sha2.rb +++ b/lib/digest/sha2.rb @@ -27,7 +27,7 @@ module Digest # digest (SHA512). # # ==Examples - # require 'digest' + # require 'digest/sha2' # # # Compute a complete digest # Digest::SHA2.hexdigest 'abc' # => "ba7816bf8..."