X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fgc-libgcrypt.c;h=3b3facd2fa1062c45cf91d6de058febe78c012f4;hb=721f56dcf49f8f004f609cc966f876922faad1a8;hp=ea0de060ac3ddbf25308d78f1f3e96e8f913f48c;hpb=823f08171884a0d50288d2e6e2d83c9fbbaf6773;p=gnulib.git diff --git a/lib/gc-libgcrypt.c b/lib/gc-libgcrypt.c index ea0de060a..3b3facd2f 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, 2007 Simon Josefsson + * Copyright (C) 2002-2011 Free Software Foundation, Inc. * * This file is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published @@ -36,6 +36,10 @@ #include +#ifndef MIN_GCRYPT_VERSION +# define MIN_GCRYPT_VERSION "1.4.4" +#endif + /* Initialization. */ Gc_rc @@ -46,12 +50,15 @@ gc_init (void) err = gcry_control (GCRYCTL_ANY_INITIALIZATION_P); if (err == GPG_ERR_NO_ERROR) { - if (gcry_check_version (GCRYPT_VERSION) == NULL) - return GC_INIT_ERROR; + if (gcry_control (GCRYCTL_DISABLE_SECMEM, NULL, 0)) + return GC_INIT_ERROR; + + if (gcry_check_version (MIN_GCRYPT_VERSION) == NULL) + return GC_INIT_ERROR; err = gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL, 0); if (err != GPG_ERR_NO_ERROR) - return GC_INIT_ERROR; + return GC_INIT_ERROR; } return GC_OK; @@ -94,19 +101,19 @@ gc_random (char *data, size_t datalen) void gc_set_allocators (gc_malloc_t func_malloc, - gc_malloc_t secure_malloc, - gc_secure_check_t secure_check, - gc_realloc_t func_realloc, gc_free_t func_free) + gc_malloc_t secure_malloc, + gc_secure_check_t secure_check, + gc_realloc_t func_realloc, gc_free_t func_free) { gcry_set_allocation_handler (func_malloc, secure_malloc, secure_check, - func_realloc, func_free); + func_realloc, func_free); } /* Ciphers. */ Gc_rc gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode, - gc_cipher_handle * outhandle) + gc_cipher_handle * outhandle) { int gcryalg, gcrymode; gcry_error_t err; @@ -142,6 +149,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; } @@ -165,7 +182,7 @@ gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode, } err = gcry_cipher_open ((gcry_cipher_hd_t *) outhandle, - gcryalg, gcrymode, 0); + gcryalg, gcrymode, 0); if (gcry_err_code (err)) return GC_INVALID_CIPHER; @@ -200,7 +217,7 @@ Gc_rc gc_cipher_encrypt_inline (gc_cipher_handle handle, size_t len, char *data) { if (gcry_cipher_encrypt ((gcry_cipher_hd_t) handle, - data, len, NULL, len) != 0) + data, len, NULL, len) != 0) return GC_INVALID_CIPHER; return GC_OK; @@ -210,7 +227,7 @@ Gc_rc gc_cipher_decrypt_inline (gc_cipher_handle handle, size_t len, char *data) { if (gcry_cipher_decrypt ((gcry_cipher_hd_t) handle, - data, len, NULL, len) != 0) + data, len, NULL, len) != 0) return GC_INVALID_CIPHER; return GC_OK; @@ -281,6 +298,10 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) gcryalg = GCRY_MD_SHA512; break; + case GC_SHA224: + gcryalg = GCRY_MD_SHA224; + break; + case GC_RMD160: gcryalg = GCRY_MD_RMD160; break; @@ -307,7 +328,7 @@ gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle) { err = gcry_md_open (&ctx->gch, gcryalg, gcrymode); if (gcry_err_code (err)) - rc = GC_INVALID_HASH; + rc = GC_INVALID_HASH; } if (rc == GC_OK) @@ -380,6 +401,10 @@ gc_hash_digest_length (Gc_hash hash) len = GC_SHA512_DIGEST_SIZE; break; + case GC_SHA224: + len = GC_SHA224_DIGEST_SIZE; + break; + default: return 0; } @@ -495,6 +520,12 @@ gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf) 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; @@ -620,7 +651,7 @@ gc_sha1 (const void *in, size_t inlen, void *resbuf) #ifdef GNULIB_GC_HMAC_MD5 Gc_rc gc_hmac_md5 (const void *key, size_t keylen, - const void *in, size_t inlen, char *resbuf) + const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_MD5); gcry_md_hd_t mdh; @@ -660,7 +691,7 @@ gc_hmac_md5 (const void *key, size_t keylen, #ifdef GNULIB_GC_HMAC_SHA1 Gc_rc gc_hmac_sha1 (const void *key, size_t keylen, - const void *in, size_t inlen, char *resbuf) + const void *in, size_t inlen, char *resbuf) { size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); gcry_md_hd_t mdh;