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:
parent
15d643f44c
commit
7a6adb8924
6 changed files with 84 additions and 5 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
45
ext/digest/sha1/sha1ossl.c
Normal file
45
ext/digest/sha1/sha1ossl.c
Normal 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;
|
||||
}
|
16
ext/digest/sha1/sha1ossl.h
Normal file
16
ext/digest/sha1/sha1ossl.h
Normal 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
|
Loading…
Reference in a new issue