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…
	
	Add table
		Add a link
		
	
		Reference in a new issue