From 41fa6056ba08e7a94d60e10825d271fbd1fa5596 Mon Sep 17 00:00:00 2001 From: technorama Date: Thu, 29 Mar 2007 17:29:03 +0000 Subject: * ext/openssl/ossl_{bn,cipher,digest,hmac,rand,pkey_{dh,dsa,rsa}}.c: Add Documentation for various methods. * ext/openssl/lib/openssl/cipher.rb: Ditto * ext/openssl/ossl_bn.c: add lshift! and rshift! methods. * ext/openssl/ossl_digest.c: GetDigestPtr() also accept a string. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@12128 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/openssl/ossl_digest.c | 59 ++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 3 deletions(-) (limited to 'ext/openssl/ossl_digest.c') diff --git a/ext/openssl/ossl_digest.c b/ext/openssl/ossl_digest.c index 867fc47095..9b280a3d4d 100644 --- a/ext/openssl/ossl_digest.c +++ b/ext/openssl/ossl_digest.c @@ -36,11 +36,23 @@ static VALUE ossl_digest_alloc(VALUE klass); const EVP_MD * GetDigestPtr(VALUE obj) { - EVP_MD_CTX *ctx; + const EVP_MD *md; + + if (TYPE(obj) == T_STRING) { + const char *name = STR2CSTR(obj); + + md = EVP_get_digestbyname(name); + if (!md) + ossl_raise(rb_eRuntimeError, "Unsupported digest algorithm (%s).", name); + } else { + EVP_MD_CTX *ctx; + + SafeGetDigest(obj, ctx); - SafeGetDigest(obj, ctx); + md = EVP_MD_CTX_md(ctx); /*== ctx->digest*/ + } - return EVP_MD_CTX_md(ctx); /*== ctx->digest*/ + return md; } VALUE @@ -77,6 +89,11 @@ ossl_digest_alloc(VALUE klass) VALUE ossl_digest_update(VALUE, VALUE); +/* + * call-seq: + * Digest.new(string) -> digest + * + */ static VALUE ossl_digest_initialize(int argc, VALUE *argv, VALUE self) { @@ -118,6 +135,11 @@ ossl_digest_copy(VALUE self, VALUE other) return self; } +/* + * call-seq: + * digest.reset -> self + * + */ static VALUE ossl_digest_reset(VALUE self) { @@ -129,6 +151,11 @@ ossl_digest_reset(VALUE self) return self; } +/* + * call-seq: + * digest.update(string) -> aString + * + */ VALUE ossl_digest_update(VALUE self, VALUE data) { @@ -157,6 +184,11 @@ digest_final(EVP_MD_CTX *ctx, char **buf, int *buf_len) EVP_MD_CTX_cleanup(&final); } +/* + * call-seq: + * digest.final -> aString + * + */ static VALUE ossl_digest_digest(VALUE self) { @@ -172,6 +204,11 @@ ossl_digest_digest(VALUE self) return digest; } +/* + * call-seq: + * digest.hexdigest -> aString + * + */ static VALUE ossl_digest_hexdigest(VALUE self) { @@ -212,6 +249,11 @@ ossl_digest_s_hexdigest(VALUE klass, VALUE str, VALUE data) return ossl_digest_hexdigest(obj); } +/* + * call-seq: + * digest1 == digest2 -> true | false + * + */ static VALUE ossl_digest_equal(VALUE self, VALUE other) { @@ -238,6 +280,11 @@ ossl_digest_equal(VALUE self, VALUE other) return Qfalse; } +/* + * call-seq: + * digest.name -> string + * + */ static VALUE ossl_digest_name(VALUE self) { @@ -248,6 +295,12 @@ ossl_digest_name(VALUE self) return rb_str_new2(EVP_MD_name(EVP_MD_CTX_md(ctx))); } +/* + * call-seq: + * digest.size -> integer + * + * Returns the output size of the digest. + */ static VALUE ossl_digest_size(VALUE self) { -- cgit v1.2.3