From: Simon Josefsson Date: Wed, 12 Oct 2005 01:42:54 +0000 (+0000) Subject: Add gc-sha1 module. X-Git-Tag: cvs-readonly~2821 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=ea3ee2b5133fd11042c0cdf0e71100e94a03acf0;p=gnulib.git Add gc-sha1 module. --- diff --git a/ChangeLog b/ChangeLog index d85cafa5d..6c4b51c4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2005-10-12 Simon Josefsson + * modules/gc-sha1: New file. + +2005-10-12 Simon Josefsson + * tests/test-hmac-sha1.c: New file. * modules/hmac-sha1-tests: New file. diff --git a/lib/ChangeLog b/lib/ChangeLog index b67eec2a8..9b74d153b 100644 --- a/lib/ChangeLog +++ b/lib/ChangeLog @@ -1,5 +1,9 @@ 2005-10-12 Simon Josefsson + * gc.h, gc-gnulib.c, gc-libgcrypt.c: Support SHA-1. + +2005-10-12 Simon Josefsson + * gc-gnulib.c: Condition MD5 and HMAC-MD5 use on GC_USE_MD5 and GC_USE_HMAC_MD5, respectively. diff --git a/lib/gc-gnulib.c b/lib/gc-gnulib.c index 00bab976d..dfe4edc2c 100644 --- a/lib/gc-gnulib.c +++ b/lib/gc-gnulib.c @@ -40,6 +40,9 @@ #ifdef GC_USE_MD5 # include "md5.h" #endif +#ifdef GC_USE_SHA1 +# include "sha1.h" +#endif #ifdef GC_USE_HMAC_MD5 # include "hmac.h" #endif @@ -152,6 +155,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) break; #endif +#ifdef GC_USE_SHA1 + case GC_SHA1: + sha1_buffer (in, inlen, resbuf); + break; +#endif + default: return GC_INVALID_HASH; } @@ -168,6 +177,15 @@ gc_md5 (const void *in, size_t inlen, void *resbuf) } #endif +#ifdef GC_USE_SHA1 +int +gc_sha1 (const void *in, size_t inlen, void *resbuf) +{ + sha1_buffer (in, inlen, resbuf); + return 0; +} +#endif + #ifdef GC_USE_HMAC_MD5 int gc_hmac_md5 (const void *key, size_t keylen, diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c index 0c7e2c34f..4f4ae10e4 100644 --- a/lib/gc-libgcrypt.c +++ b/lib/gc-libgcrypt.c @@ -109,6 +109,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) break; #endif +#ifdef GC_USE_SHA1 + case GC_SHA1: + gcryalg = GCRY_MD_SHA1; + break; +#endif + default: return GC_INVALID_HASH; } @@ -152,6 +158,38 @@ gc_md5 (const void *in, size_t inlen, void *resbuf) } #endif +#ifdef GC_USE_SHA1 +int +gc_sha1 (const void *in, size_t inlen, void *resbuf) +{ + size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); + gcry_md_hd_t hd; + gpg_error_t err; + unsigned char *p; + + assert (outlen == GC_SHA1_DIGEST_SIZE); + + err = gcry_md_open (&hd, GCRY_MD_SHA1, 0); + if (err != GPG_ERR_NO_ERROR) + return GC_INVALID_HASH; + + gcry_md_write (hd, in, inlen); + + p = gcry_md_read (hd, GCRY_MD_SHA1); + if (p == NULL) + { + gcry_md_close (hd); + return GC_INVALID_HASH; + } + + memcpy (resbuf, p, outlen); + + gcry_md_close (hd); + + return GC_OK; +} +#endif + #ifdef GC_USE_HMAC_MD5 int gc_hmac_md5 (const void *key, size_t keylen, diff --git a/lib/gc.h b/lib/gc.h index c966a99b2..c66d31a6b 100644 --- a/lib/gc.h +++ b/lib/gc.h @@ -41,11 +41,13 @@ typedef enum Gc_rc Gc_rc; /* Hash types. */ enum Gc_hash { - GC_MD5 + GC_MD5, + GC_SHA1 }; typedef enum Gc_hash Gc_hash; #define GC_MD5_DIGEST_SIZE 16 +#define GC_SHA1_DIGEST_SIZE 20 /* Call before respectively after any other functions. */ extern int gc_init (void); @@ -75,9 +77,13 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *out); /* One-call interface. */ extern int gc_md5 (const void *in, size_t inlen, void *resbuf); +extern int gc_sha1 (const void *in, size_t inlen, void *resbuf); extern int gc_hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf); +extern int gc_hmac_sha1 (const void *key, size_t keylen, + const void *in, size_t inlen, + char *resbuf); /* TODO: diff --git a/m4/ChangeLog b/m4/ChangeLog index 2b5f250bd..291878542 100644 --- a/m4/ChangeLog +++ b/m4/ChangeLog @@ -1,5 +1,7 @@ 2005-10-12 Simon Josefsson + * gc-sha1: New file. + * hmac-sha1.m4: New file. 2005-10-12 Simon Josefsson diff --git a/m4/gc-sha1 b/m4/gc-sha1 new file mode 100644 index 000000000..c305120d9 --- /dev/null +++ b/m4/gc-sha1 @@ -0,0 +1,15 @@ +# gc-sha1.m4 serial 1 +dnl Copyright (C) 2005 Free Software Foundation, Inc. +dnl This file is free software; the Free Software Foundation +dnl gives unlimited permission to copy and/or distribute it, +dnl with or without modifications, as long as this notice is preserved. + +AC_DEFUN([gl_GC_SHA1], +[ + AC_REQUIRE([gl_GC]) + AC_DEFINE(GC_USE_SHA1, 1, + [Define to if you want to support SHA-1 through GC.]) + if test "$ac_cv_libgcrypt" != yes; then + gl_SHA1 + fi +]) diff --git a/modules/gc-sha1 b/modules/gc-sha1 new file mode 100644 index 000000000..18ba02e6c --- /dev/null +++ b/modules/gc-sha1 @@ -0,0 +1,26 @@ +Description: +Generic crypto wrappers for SHA-1 functions. + +Files: +m4/gc-sha1.m4 +lib/sha1.h +lib/sha1.c +m4/sha1.m4 + +Depends-on: +stdint +gc + +configure.ac: +gl_GC_SHA1 + +Makefile.am: + +Include: +"gc.h" + +License: +LGPL + +Maintainer: +Simon Josefsson