diff options
author | Simon Josefsson <simon@josefsson.org> | 2005-10-12 01:42:54 +0000 |
---|---|---|
committer | Simon Josefsson <simon@josefsson.org> | 2005-10-12 01:42:54 +0000 |
commit | ea3ee2b5133fd11042c0cdf0e71100e94a03acf0 (patch) | |
tree | 2ffd9f808ef06e515fdd78a103054e69e4a239fb /lib/gc-libgcrypt.c | |
parent | 9a2b952ab7a836a546997e60497d471c326bc6b7 (diff) | |
download | gnulib-ea3ee2b5133fd11042c0cdf0e71100e94a03acf0.tar.gz |
Add gc-sha1 module.
Diffstat (limited to 'lib/gc-libgcrypt.c')
-rw-r--r-- | lib/gc-libgcrypt.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c index 0c7e2c34fd..4f4ae10e41 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, |