* 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
This commit is contained in:
knu 2002-09-26 16:27:23 +00:00
Родитель b00af5f83a
Коммит 965393cbb8
6 изменённых файлов: 63 добавлений и 4 удалений

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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")

Просмотреть файл

@ -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,

28
ext/digest/md5/md5ossl.c Normal file
Просмотреть файл

@ -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;
}

11
ext/digest/md5/md5ossl.h Normal file
Просмотреть файл

@ -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