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

* ext/digest/sha1: Use OpenSSL's SHA1 engine if available. It is

much faster than what we have now (sha1.[ch]).  Add a knob
  (--with-bundled-sha1) to extconf.rb which makes it use the
  bundled one anyway.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2895 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
knu 2002-09-26 17:44:33 +00:00
parent 15d643f44c
commit 7a6adb8924
6 changed files with 84 additions and 5 deletions

View file

@ -1,3 +1,10 @@
Fri Sep 27 02:41:53 2002 Akinori MUSHA <knu@iDaemons.org>
* ext/digest/sha1: Use OpenSSL's SHA1 engine if available. It is
much faster than what we have now (sha1.[ch]). Add a knob
(--with-bundled-sha1) to extconf.rb which makes it use the
bundled one anyway.
Fri Sep 27 02:25:14 2002 Akinori MUSHA <knu@iDaemons.org>
* ext/digest/rmd160: Use OpenSSL's RMD160 engine if available. It

View file

@ -5,3 +5,4 @@ sha1hl.o: sha1hl.c sha1.h $(srcdir)/../defs.h $(hdrdir)/ruby.h \
sha1init.o: sha1init.c $(srcdir)/../digest.h $(hdrdir)/ruby.h \
$(topdir)/config.h $(hdrdir)/defines.h $(hdrdir)/intern.h \
sha1.h $(srcdir)/../defs.h
sha1ossl.o: sha1ossl.h $(srcdir)/../defs.h

View file

@ -5,11 +5,17 @@ require "mkmf"
$CFLAGS << " -DHAVE_CONFIG_H -I#{File.dirname(__FILE__)}/.."
$objs = [
"sha1.#{$OBJEXT}",
"sha1hl.#{$OBJEXT}",
"sha1init.#{$OBJEXT}",
]
$objs = [ "sha1init.#{$OBJEXT}" ]
dir_config("openssl")
if !with_config("bundled-sha1") &&
have_library("crypto") && have_header("openssl/sha.h")
$objs << "sha1ossl.#{$OBJEXT}"
$libs << " -lcrypto"
else
$objs << "sha1.#{$OBJEXT}" << "sha1hl.#{$OBJEXT}"
end
have_header("sys/cdefs.h")

View file

@ -2,7 +2,11 @@
/* $Id$ */
#include "digest.h"
#if defined(HAVE_OPENSSL_SHA_H)
#include "sha1ossl.h"
#else
#include "sha1.h"
#endif
static algo_t sha1 = {
SHA1_DIGEST_LENGTH,

View file

@ -0,0 +1,45 @@
/* $Id$ */
#include "sha1ossl.h"
#include "defs.h"
#include <assert.h>
#include <stdlib.h>
#ifndef _DIAGASSERT
#define _DIAGASSERT(cond) assert(cond)
#endif
char *
SHA1_End(SHA1_CTX *ctx, char *buf)
{
int i;
char *p = buf;
uint8_t digest[20];
static const char hex[]="0123456789abcdef";
_DIAGASSERT(ctx != NULL);
/* buf may be NULL */
if (p == NULL && (p = malloc(41)) == NULL)
return 0;
SHA1_Final(digest,ctx);
for (i = 0; i < 20; i++) {
p[i + i] = hex[((uint32_t)digest[i]) >> 4];
p[i + i + 1] = hex[digest[i] & 0x0f];
}
p[i + i] = '\0';
return(p);
}
int SHA1_Equal(SHA1_CTX* pctx1, SHA1_CTX* pctx2) {
return pctx1->num == pctx2->num
&& pctx1->h0 == pctx2->h0
&& pctx1->h1 == pctx2->h1
&& pctx1->h2 == pctx2->h2
&& pctx1->h3 == pctx2->h3
&& pctx1->h4 == pctx2->h4
&& pctx1->Nl == pctx2->Nl
&& pctx1->Nh == pctx2->Nh
&& memcmp(pctx1->data, pctx2->data, sizeof(pctx1->data)) == 0;
}

View file

@ -0,0 +1,16 @@
/* $Id$ */
#ifndef SHA1OSSL_H_INCLUDED
#define SHA1OSSL_H_INCLUDED
#include <openssl/sha.h>
#define SHA1_CTX SHA_CTX
#define SHA1_BLOCK_LENGTH SHA_BLOCK_LENGTH
#define SHA1_DIGEST_LENGTH SHA_DIGEST_LENGTH
char *SHA1_End(SHA1_CTX *ctx, char *buf);
int SHA1_Equal(SHA1_CTX *pctx1, SHA1_CTX *pctx2);
#endif