зеркало из https://github.com/github/ruby.git
* 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:
Родитель
b00af5f83a
Коммит
965393cbb8
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
|
Загрузка…
Ссылка в новой задаче