diff options
author | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-26 16:27:23 +0000 |
---|---|---|
committer | knu <knu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2002-09-26 16:27:23 +0000 |
commit | 965393cbb848ddb869543a5ca8f6e7fba1d0f130 (patch) | |
tree | eb89a8fb185a9d774708897e779143f51ca752f1 | |
parent | b00af5f83acfe4c8fd76f1e5c13c1b0cd469daad (diff) |
* ext/digest/md5: Use OpenSSL's MD5 engine if available. It is
much faster than what we have now (md5.[ch]). Add a knob
(--with-bundled-md5) to extconf.rb which makes it use the
bundled one anyway.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2893 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | ext/digest/md5/depend | 1 | ||||
-rw-r--r-- | ext/digest/md5/extconf.rb | 16 | ||||
-rw-r--r-- | ext/digest/md5/md5init.c | 4 | ||||
-rw-r--r-- | ext/digest/md5/md5ossl.c | 28 | ||||
-rw-r--r-- | ext/digest/md5/md5ossl.h | 11 |
6 files changed, 63 insertions, 4 deletions
@@ -1,3 +1,10 @@ +Fri Sep 27 01:23:39 2002 Akinori MUSHA <knu@iDaemons.org> + + * ext/digest/md5: Use OpenSSL's MD5 engine if available. It is + much faster than what we have now (md5.[ch]). Add a knob + (--with-bundled-md5) to extconf.rb which makes it use the + bundled one anyway. + Thu Sep 26 22:44:21 2002 Akinori MUSHA <knu@iDaemons.org> * ext/digest/digest.c (rb_digest_base_s_digest): Fix a double diff --git a/ext/digest/md5/depend b/ext/digest/md5/depend index 30ad482101..8eaec20b4b 100644 --- a/ext/digest/md5/depend +++ b/ext/digest/md5/depend @@ -3,3 +3,4 @@ md5.o: md5.c md5.h $(srcdir)/../defs.h $(hdrdir)/ruby.h $(topdir)/config.h \ md5init.o: md5init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \ $(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h md5.h \ $(srcdir)/../defs.h +md5ossl.o: md5ossl.h diff --git a/ext/digest/md5/extconf.rb b/ext/digest/md5/extconf.rb index 93a14025d0..0db0404dbe 100644 --- a/ext/digest/md5/extconf.rb +++ b/ext/digest/md5/extconf.rb @@ -5,10 +5,18 @@ require "mkmf" $CFLAGS << " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.." -$objs = [ - "md5.#{$OBJEXT}", - "md5init.#{$OBJEXT}", -] +$objs = [ "md5init.#{$OBJEXT}" ] + +dir_config("openssl") + +if !with_config("bundled-md5") && + have_library("crypto") && have_header("openssl/md5.h") + $objs << "md5ossl.#{$OBJEXT}" + + $libs << " -lcrypto" +else + $objs << "md5.#{$OBJEXT}" +end have_header("sys/cdefs.h") diff --git a/ext/digest/md5/md5init.c b/ext/digest/md5/md5init.c index 7f6a6e9794..2acca16a46 100644 --- a/ext/digest/md5/md5init.c +++ b/ext/digest/md5/md5init.c @@ -2,7 +2,11 @@ /* $Id$ */ #include "digest.h" +#if defined(HAVE_OPENSSL_MD5_H) +#include "md5ossl.h" +#else #include "md5.h" +#endif static algo_t md5 = { MD5_DIGEST_LENGTH, diff --git a/ext/digest/md5/md5ossl.c b/ext/digest/md5/md5ossl.c new file mode 100644 index 0000000000..3c9f4ba49f --- /dev/null +++ b/ext/digest/md5/md5ossl.c @@ -0,0 +1,28 @@ +/* $Id$ */ + +#include "md5ossl.h" +#include <sys/types.h> + +void +MD5_End(MD5_CTX *pctx, unsigned char *hexdigest) +{ + unsigned char digest[16]; + size_t i; + + MD5_Final(digest, pctx); + + for (i = 0; i < 16; i++) + sprintf(hexdigest + i * 2, "%02x", digest[i]); +} + +int +MD5_Equal(MD5_CTX* pctx1, MD5_CTX* pctx2) { + return pctx1->num == pctx2->num + && pctx1->A == pctx2->A + && pctx1->B == pctx2->B + && pctx1->C == pctx2->C + && pctx1->D == pctx2->D + && pctx1->Nl == pctx2->Nl + && pctx1->Nh == pctx2->Nh + && memcmp(pctx1->data, pctx2->data, sizeof(pctx1->data)) == 0; +} diff --git a/ext/digest/md5/md5ossl.h b/ext/digest/md5/md5ossl.h new file mode 100644 index 0000000000..dda7c743ed --- /dev/null +++ b/ext/digest/md5/md5ossl.h @@ -0,0 +1,11 @@ +/* $Id$ */ + +#ifndef MD5OSSL_H_INCLUDED +#define MD5OSSL_H_INCLUDED + +#include <openssl/md5.h> + +void MD5_End(MD5_CTX *pctx, unsigned char *hexdigest); +int MD5_Equal(MD5_CTX *pctx1, MD5_CTX *pctx2); + +#endif |