1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the

OpenSSL::Digest class in place of where either an instance of
  the class or the algorithm name was demanded.  For example,
  OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1, key, data) is now
  accepted as well as the usual
  OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, key, data) and
  OpenSSL::HMAC.digest("SHA1", key, data).




git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@26739 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2010-02-23 15:51:01 +00:00
parent 3cd6a6585f
commit eb845bea4c
2 changed files with 23 additions and 6 deletions

View file

@ -1,3 +1,13 @@
Wed Feb 24 00:50:09 2010 Akinori MUSHA <knu@iDaemons.org>
* ext/openssl/ossl_digest.c (GetDigestPtr): Allow to pass the
OpenSSL::Digest class in place of where either an instance of
the class or the algorithm name was demanded. For example,
OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1, key, data) is now
accepted as well as the usual
OpenSSL::HMAC.digest(OpenSSL::Digest::SHA1.new, key, data) and
OpenSSL::HMAC.digest("SHA1", key, data).
Wed Feb 24 00:39:17 2010 Yusuke Endoh <mame@tsg.ne.jp>
* string.c (str_new_empty): String#split, partition, rpartition

View file

@ -37,18 +37,25 @@ GetDigestPtr(VALUE obj)
{
const EVP_MD *md;
if (TYPE(obj) == T_STRING) {
const char *name = StringValueCStr(obj);
if (TYPE(obj) == T_CLASS) {
EVP_MD_CTX *ctx;
VALUE digest = rb_funcall(obj, rb_intern("new"), 0, 0);
md = EVP_get_digestbyname(name);
if (!md)
ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name);
} else {
SafeGetDigest(digest, ctx);
md = EVP_MD_CTX_md(ctx);
} else if (rb_obj_is_kind_of(obj, cDigest)) {
EVP_MD_CTX *ctx;
SafeGetDigest(obj, ctx);
md = EVP_MD_CTX_md(ctx);
} else {
const char *name = StringValueCStr(obj);
md = EVP_get_digestbyname(name);
if (!md)
ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name);
}
return md;