projects
/
gnulib.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
dup, execute, fatal-signal, etc.: no 'static inline'
[gnulib.git]
/
lib
/
gc-libgcrypt.c
diff --git
a/lib/gc-libgcrypt.c
b/lib/gc-libgcrypt.c
index
a9e6279
..
da3c46f
100644
(file)
--- a/
lib/gc-libgcrypt.c
+++ b/
lib/gc-libgcrypt.c
@@
-1,5
+1,5
@@
/* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC.
/* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC.
- * Copyright (C) 2002
, 2003, 2004, 2005, 2006 Simon Josefsson
+ * Copyright (C) 2002
-2012 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
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
@@
-12,17
+12,13
@@
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this file; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- * 02110-1301, USA.
+ * along with this file; if not, see <http://www.gnu.org/licenses/>.
*
*/
/* Note: This file is only built if GC uses Libgcrypt. */
*
*/
/* Note: This file is only built if GC uses Libgcrypt. */
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
+#include <config.h>
/* Get prototype. */
#include "gc.h"
/* Get prototype. */
#include "gc.h"
@@
-32,12
+28,16
@@
/* Get libgcrypt API. */
#include <gcrypt.h>
/* Get libgcrypt API. */
#include <gcrypt.h>
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
# include "md2.h"
#endif
#include <assert.h>
# include "md2.h"
#endif
#include <assert.h>
+#ifndef MIN_GCRYPT_VERSION
+# define MIN_GCRYPT_VERSION "1.4.4"
+#endif
+
/* Initialization. */
Gc_rc
/* Initialization. */
Gc_rc
@@
-48,12
+48,15
@@
gc_init (void)
err = gcry_control (GCRYCTL_ANY_INITIALIZATION_P);
if (err == GPG_ERR_NO_ERROR)
{
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)
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;
}
return GC_OK;
@@
-65,7
+68,7
@@
gc_done (void)
return;
}
return;
}
-#ifdef G
C_USE
_RANDOM
+#ifdef G
NULIB_GC
_RANDOM
/* Randomness. */
/* Randomness. */
@@
-96,19
+99,19
@@
gc_random (char *data, size_t datalen)
void
gc_set_allocators (gc_malloc_t func_malloc,
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,
{
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,
}
/* 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;
{
int gcryalg, gcrymode;
gcry_error_t err;
@@
-144,6
+147,16
@@
gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
gcryalg = GCRY_CIPHER_RFC2268_40;
break;
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;
}
default:
return GC_INVALID_CIPHER;
}
@@
-167,7
+180,7
@@
gc_cipher_open (Gc_cipher alg, Gc_cipher_mode mode,
}
err = gcry_cipher_open ((gcry_cipher_hd_t *) outhandle,
}
err = gcry_cipher_open ((gcry_cipher_hd_t *) outhandle,
- gcryalg, gcrymode, 0);
+
gcryalg, gcrymode, 0);
if (gcry_err_code (err))
return GC_INVALID_CIPHER;
if (gcry_err_code (err))
return GC_INVALID_CIPHER;
@@
-202,7
+215,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,
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;
return GC_INVALID_CIPHER;
return GC_OK;
@@
-212,7
+225,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,
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;
return GC_INVALID_CIPHER;
return GC_OK;
@@
-232,7
+245,7
@@
typedef struct _gc_hash_ctx {
Gc_hash alg;
Gc_hash_mode mode;
gcry_md_hd_t gch;
Gc_hash alg;
Gc_hash_mode mode;
gcry_md_hd_t gch;
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
char hash[GC_MD2_DIGEST_SIZE];
struct md2_ctx md2Context;
#endif
char hash[GC_MD2_DIGEST_SIZE];
struct md2_ctx md2Context;
#endif
@@
-242,7
+255,7
@@
Gc_rc
gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle)
{
_gc_hash_ctx *ctx;
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;
gcry_error_t err;
Gc_rc rc = GC_OK;
@@
-271,6
+284,22
@@
gc_hash_open (Gc_hash hash, Gc_hash_mode mode, gc_hash_handle * outhandle)
gcryalg = GCRY_MD_SHA1;
break;
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;
case GC_RMD160:
gcryalg = GCRY_MD_RMD160;
break;
@@
-297,7
+326,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))
{
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)
}
if (rc == GC_OK)
@@
-358,6
+387,22
@@
gc_hash_digest_length (Gc_hash hash)
len = GC_SHA1_DIGEST_SIZE;
break;
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;
}
default:
return 0;
}
@@
-369,7
+414,7
@@
void
gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key)
{
_gc_hash_ctx *ctx = handle;
gc_hash_hmac_setkey (gc_hash_handle handle, size_t len, const char *key)
{
_gc_hash_ctx *ctx = handle;
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
if (ctx->alg != GC_MD2)
#endif
gcry_md_setkey (ctx->gch, key, len);
if (ctx->alg != GC_MD2)
#endif
gcry_md_setkey (ctx->gch, key, len);
@@
-380,7
+425,7
@@
gc_hash_write (gc_hash_handle handle, size_t len, const char *data)
{
_gc_hash_ctx *ctx = handle;
{
_gc_hash_ctx *ctx = handle;
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
if (ctx->alg == GC_MD2)
md2_process_bytes (data, len, &ctx->md2Context);
else
if (ctx->alg == GC_MD2)
md2_process_bytes (data, len, &ctx->md2Context);
else
@@
-394,7
+439,7
@@
gc_hash_read (gc_hash_handle handle)
_gc_hash_ctx *ctx = handle;
const char *digest;
_gc_hash_ctx *ctx = handle;
const char *digest;
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
if (ctx->alg == GC_MD2)
{
md2_finish_ctx (&ctx->md2Context, ctx->hash);
if (ctx->alg == GC_MD2)
{
md2_finish_ctx (&ctx->md2Context, ctx->hash);
@@
-415,7
+460,7
@@
gc_hash_close (gc_hash_handle handle)
{
_gc_hash_ctx *ctx = handle;
{
_gc_hash_ctx *ctx = handle;
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
if (ctx->alg != GC_MD2)
#endif
gcry_md_close (ctx->gch);
if (ctx->alg != GC_MD2)
#endif
gcry_md_close (ctx->gch);
@@
-430,32
+475,56
@@
gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
switch (hash)
{
switch (hash)
{
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
case GC_MD2:
md2_buffer (in, inlen, resbuf);
return GC_OK;
break;
#endif
case GC_MD2:
md2_buffer (in, inlen, resbuf);
return GC_OK;
break;
#endif
-#ifdef G
C_USE
_MD4
+#ifdef G
NULIB_GC
_MD4
case GC_MD4:
gcryalg = GCRY_MD_MD4;
break;
#endif
case GC_MD4:
gcryalg = GCRY_MD_MD4;
break;
#endif
-#ifdef G
C_USE
_MD5
+#ifdef G
NULIB_GC
_MD5
case GC_MD5:
gcryalg = GCRY_MD_MD5;
break;
#endif
case GC_MD5:
gcryalg = GCRY_MD_MD5;
break;
#endif
-#ifdef G
C_USE
_SHA1
+#ifdef G
NULIB_GC
_SHA1
case GC_SHA1:
gcryalg = GCRY_MD_SHA1;
break;
#endif
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;
case GC_RMD160:
gcryalg = GCRY_MD_RMD160;
break;
@@
-472,7
+541,7
@@
gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
/* One-call interface. */
/* One-call interface. */
-#ifdef G
C_USE
_MD2
+#ifdef G
NULIB_GC
_MD2
Gc_rc
gc_md2 (const void *in, size_t inlen, void *resbuf)
{
Gc_rc
gc_md2 (const void *in, size_t inlen, void *resbuf)
{
@@
-481,7
+550,7
@@
gc_md2 (const void *in, size_t inlen, void *resbuf)
}
#endif
}
#endif
-#ifdef G
C_USE
_MD4
+#ifdef G
NULIB_GC
_MD4
Gc_rc
gc_md4 (const void *in, size_t inlen, void *resbuf)
{
Gc_rc
gc_md4 (const void *in, size_t inlen, void *resbuf)
{
@@
-513,7
+582,7
@@
gc_md4 (const void *in, size_t inlen, void *resbuf)
}
#endif
}
#endif
-#ifdef G
C_USE
_MD5
+#ifdef G
NULIB_GC
_MD5
Gc_rc
gc_md5 (const void *in, size_t inlen, void *resbuf)
{
Gc_rc
gc_md5 (const void *in, size_t inlen, void *resbuf)
{
@@
-545,7
+614,7
@@
gc_md5 (const void *in, size_t inlen, void *resbuf)
}
#endif
}
#endif
-#ifdef G
C_USE
_SHA1
+#ifdef G
NULIB_GC
_SHA1
Gc_rc
gc_sha1 (const void *in, size_t inlen, void *resbuf)
{
Gc_rc
gc_sha1 (const void *in, size_t inlen, void *resbuf)
{
@@
-577,10
+646,10
@@
gc_sha1 (const void *in, size_t inlen, void *resbuf)
}
#endif
}
#endif
-#ifdef G
C_USE
_HMAC_MD5
+#ifdef G
NULIB_GC
_HMAC_MD5
Gc_rc
gc_hmac_md5 (const void *key, size_t keylen,
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;
{
size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_MD5);
gcry_md_hd_t mdh;
@@
-617,10
+686,10
@@
gc_hmac_md5 (const void *key, size_t keylen,
}
#endif
}
#endif
-#ifdef G
C_USE
_HMAC_SHA1
+#ifdef G
NULIB_GC
_HMAC_SHA1
Gc_rc
gc_hmac_sha1 (const void *key, size_t keylen,
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;
{
size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
gcry_md_hd_t mdh;