X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgc-libgcrypt.c;h=2affba09a3caea17617f3159f5ebd041c4d35fd6;hb=d952dbeaa9ceb3f9cef0684e7d9d3ecfa71a6294;hp=a9e6279a2a690b12f674ee3affa49ea806a17878;hpb=216c04af3d0ae20181e266391d1bdc09c120404c;p=gnulib.git diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c index a9e6279a2..2affba09a 100644 --- a/lib/gc-libgcrypt.c +++ b/lib/gc-libgcrypt.c @@ -1,5 +1,5 @@ /* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC. - * Copyright (C) 2002, 2003, 2004, 2005, 2006 Simon Josefsson + * Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007, 2008 Simon Josefsson * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -20,9 +20,7 @@ /* Note: This file is only built if GC uses Libgcrypt. */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include /* Get prototype. */ #include "gc.h" @@ -32,7 +30,7 @@ /* Get libgcrypt API. */ #include -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 # include "md2.h" #endif @@ -48,6 +46,9 @@ gc_init (void) err = gcry_control (GCRYCTL_ANY_INITIALIZATION_P); if (err == GPG_ERR_NO_ERROR) { + if (gcry_control (GCRYCTL_DISABLE_SECMEM, NULL, 0)) + return GC_INIT_ERROR; + if (gcry_check_version (GCRYPT_VERSION) == NULL) return GC_INIT_ERROR; @@ -65,7 +66,7 @@ gc_done (void) return; } -#ifdef GC_USE_RANDOM +#ifdef GNULIB_GC_RANDOM /* Randomness. */ @@ -144,6 +145,16 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode, gcryalg = GCRY_CIPHER_RFC2268_40; break; +#ifdef HAVE_CAMELLIA + case GC_CAMELLIA128: + gcryalg = GCRY_CIPHER_CAMELLIA128; + break; + + case GC_CAMELLIA256: + gcryalg = GCRY_CIPHER_CAMELLIA256; + break; +#endif + default: return GC_INVALID_CIPHER; } @@ -232,7 +243,7 @@ typedef struct _gc_hash_ctx { Gc_hash alg; Gc_hash_mode mode; gcry_md_hd_t gch; -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 char hash[GC_MD2_DIGEST_SIZE]; struct md2_ctx md2Context; #endif @@ -242,7 +253,7 @@ Gc_rc gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) { _gc_hash_ctx *ctx; - int gcryalg, gcrymode; + int gcryalg = 0, gcrymode = 0; gcry_error_t err; Gc_rc rc = GC_OK; @@ -271,6 +282,22 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) gcryalg = GCRY_MD_SHA1; break; + case GC_SHA256: + gcryalg = GCRY_MD_SHA256; + break; + + case GC_SHA384: + gcryalg = GCRY_MD_SHA384; + break; + + case GC_SHA512: + gcryalg = GCRY_MD_SHA512; + break; + + case GC_SHA224: + gcryalg = GCRY_MD_SHA224; + break; + case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; @@ -358,6 +385,22 @@ gc_hash_digest_length (Gc_hash hash) len = GC_SHA1_DIGEST_SIZE; break; + case GC_SHA256: + len = GC_SHA256_DIGEST_SIZE; + break; + + case GC_SHA384: + len = GC_SHA384_DIGEST_SIZE; + break; + + case GC_SHA512: + len = GC_SHA512_DIGEST_SIZE; + break; + + case GC_SHA224: + len = GC_SHA224_DIGEST_SIZE; + break; + default: return 0; } @@ -369,7 +412,7 @@ void gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key) { _gc_hash_ctx *ctx = handle; -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #endif gcry_md_setkey (ctx->gch, key, len); @@ -380,7 +423,7 @@ gc_hash_write (gc_hash_handle handle, size_t len, const char *data) { _gc_hash_ctx *ctx = handle; -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 if (ctx->alg == GC_MD2) md2_process_bytes (data, len, &ctx->md2Context); else @@ -394,7 +437,7 @@ gc_hash_read (gc_hash_handle handle) _gc_hash_ctx *ctx = handle; const char *digest; -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 if (ctx->alg == GC_MD2) { md2_finish_ctx (&ctx->md2Context, ctx->hash); @@ -415,7 +458,7 @@ gc_hash_close (gc_hash_handle handle) { _gc_hash_ctx *ctx = handle; -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 if (ctx->alg != GC_MD2) #endif gcry_md_close (ctx->gch); @@ -430,32 +473,56 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) switch (hash) { -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 case GC_MD2: md2_buffer (in, inlen, resbuf); return GC_OK; break; #endif -#ifdef GC_USE_MD4 +#ifdef GNULIB_GC_MD4 case GC_MD4: gcryalg = GCRY_MD_MD4; break; #endif -#ifdef GC_USE_MD5 +#ifdef GNULIB_GC_MD5 case GC_MD5: gcryalg = GCRY_MD_MD5; break; #endif -#ifdef GC_USE_SHA1 +#ifdef GNULIB_GC_SHA1 case GC_SHA1: gcryalg = GCRY_MD_SHA1; break; #endif -#ifdef GC_USE_RMD160 +#ifdef GNULIB_GC_SHA256 + case GC_SHA256: + gcryalg = GCRY_MD_SHA256; + break; +#endif + +#ifdef GNULIB_GC_SHA384 + case GC_SHA384: + gcryalg = GCRY_MD_SHA384; + break; +#endif + +#ifdef GNULIB_GC_SHA512 + case GC_SHA512: + gcryalg = GCRY_MD_SHA512; + break; +#endif + +#ifdef GNULIB_GC_SHA224 + case GC_SHA224: + gcryalg = GCRY_MD_SHA224; + break; +#endif + +#ifdef GNULIB_GC_RMD160 case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; @@ -472,7 +539,7 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) /* One-call interface. */ -#ifdef GC_USE_MD2 +#ifdef GNULIB_GC_MD2 Gc_rc gc_md2 (const void *in, size_t inlen, void *resbuf) { @@ -481,7 +548,7 @@ gc_md2 (const void *in, size_t inlen, void *resbuf) } #endif -#ifdef GC_USE_MD4 +#ifdef GNULIB_GC_MD4 Gc_rc gc_md4 (const void *in, size_t inlen, void *resbuf) { @@ -513,7 +580,7 @@ gc_md4 (const void *in, size_t inlen, void *resbuf) } #endif -#ifdef GC_USE_MD5 +#ifdef GNULIB_GC_MD5 Gc_rc gc_md5 (const void *in, size_t inlen, void *resbuf) { @@ -545,7 +612,7 @@ gc_md5 (const void *in, size_t inlen, void *resbuf) } #endif -#ifdef GC_USE_SHA1 +#ifdef GNULIB_GC_SHA1 Gc_rc gc_sha1 (const void *in, size_t inlen, void *resbuf) { @@ -577,7 +644,7 @@ gc_sha1 (const void *in, size_t inlen, void *resbuf) } #endif -#ifdef GC_USE_HMAC_MD5 +#ifdef GNULIB_GC_HMAC_MD5 Gc_rc gc_hmac_md5 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf) @@ -617,7 +684,7 @@ gc_hmac_md5 (const void *key, size_t keylen, } #endif -#ifdef GC_USE_HMAC_SHA1 +#ifdef GNULIB_GC_HMAC_SHA1 Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, const void *in, size_t inlen, char *resbuf)