annotate lib/gc-libgcrypt.c @ 6367:69cadd43d0f4

* gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types, suggested by Bruno Haible <bruno@clisp.org>.
author Simon Josefsson <simon@josefsson.org>
date Wed, 12 Oct 2005 11:57:13 +0000 (2005-10-12)
parents 22f41fec10ee
children 1cc68a6a8398
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
1 /* gc-libgcrypt.c --- Crypto wrappers around Libgcrypt for GC.
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
2 * Copyright (C) 2002, 2003, 2004, 2005 Simon Josefsson
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
3 *
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
4 * This file is free software; you can redistribute it and/or modify
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
6 * by the Free Software Foundation; either version 2, or (at your
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
7 * option) any later version.
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
8 *
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
9 * This file is distributed in the hope that it will be useful, but
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
10 * WITHOUT ANY WARRANTY; without even the implied warranty of
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
12 * General Public License for more details.
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
13 *
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
15 * along with this file; if not, write to the Free Software
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
17 * 02110-1301, USA.
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
18 *
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
19 */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
20
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
21 /* Note: This file is only built if GC uses Libgcrypt. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
22
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
23 #ifdef HAVE_CONFIG_H
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
24 # include <config.h>
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
25 #endif
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
26
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
27 /* Get prototype. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
28 #include "gc.h"
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
29
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
30 /* Get libgcrypt API. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
31 #include <gcrypt.h>
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
32
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
33 #include <assert.h>
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
34
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
35 /* Initialization. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
36
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
37 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
38 gc_init (void)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
39 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
40 gcry_error_t err;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
41
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
42 err = gcry_control (GCRYCTL_ANY_INITIALIZATION_P);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
43 if (err == GPG_ERR_NO_ERROR)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
44 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
45 if (gcry_check_version (GCRYPT_VERSION) == NULL)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
46 return GC_INIT_ERROR;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
47
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
48 err = gcry_control (GCRYCTL_INITIALIZATION_FINISHED, NULL, 0);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
49 if (err != GPG_ERR_NO_ERROR)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
50 return GC_INIT_ERROR;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
51 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
52
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
53 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
54 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
55
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
56 void
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
57 gc_done (void)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
58 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
59 return;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
60 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
61
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
62 /* Randomness. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
63
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
64 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
65 gc_nonce (char *data, size_t datalen)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
66 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
67 gcry_create_nonce ((unsigned char *) data, datalen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
68 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
69 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
70
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
71 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
72 gc_pseudo_random (char *data, size_t datalen)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
73 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
74 gcry_randomize ((unsigned char *) data, datalen, GCRY_STRONG_RANDOM);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
75 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
76 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
77
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
78 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
79 gc_random (char *data, size_t datalen)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
80 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
81 gcry_randomize ((unsigned char *) data, datalen, GCRY_VERY_STRONG_RANDOM);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
82 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
83 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
84
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
85 /* Memory allocation. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
86
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
87 void
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
88 gc_set_allocators (gc_malloc_t func_malloc,
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
89 gc_malloc_t secure_malloc,
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
90 gc_secure_check_t secure_check,
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
91 gc_realloc_t func_realloc, gc_free_t func_free)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
92 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
93 gcry_set_allocation_handler (func_malloc, secure_malloc, secure_check,
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
94 func_realloc, func_free);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
95 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
96
6349
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
97 /* Hashes. */
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
98
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
99 Gc_rc
6362
2bcfc491052b * gc-libgcrypt.c (gc_md5): Fix assert call.
Simon Josefsson <simon@josefsson.org>
parents: 6349
diff changeset
100 gc_hash_buffer (Gc_hash hash, const void *in, size_t inlen, char *resbuf)
6349
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
101 {
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
102 int gcryalg;
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
103
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
104 switch (hash)
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
105 {
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
106 #ifdef GC_USE_MD5
6349
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
107 case GC_MD5:
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
108 gcryalg = GCRY_MD_MD5;
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
109 break;
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
110 #endif
6349
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
111
6365
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
112 #ifdef GC_USE_SHA1
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
113 case GC_SHA1:
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
114 gcryalg = GCRY_MD_SHA1;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
115 break;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
116 #endif
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
117
6349
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
118 default:
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
119 return GC_INVALID_HASH;
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
120 }
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
121
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
122 gcry_md_hash_buffer (gcryalg, resbuf, in, inlen);
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
123
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
124 return GC_OK;
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
125 }
c195d0c75e25 2005-10-08 Simon Josefsson <jas@extundo.com>
Simon Josefsson <simon@josefsson.org>
parents: 6348
diff changeset
126
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
127 /* One-call interface. */
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
128
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
129 #ifdef GC_USE_MD5
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
130 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
131 gc_md5 (const void *in, size_t inlen, void *resbuf)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
132 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
133 size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_MD5);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
134 gcry_md_hd_t hd;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
135 gpg_error_t err;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
136 unsigned char *p;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
137
6362
2bcfc491052b * gc-libgcrypt.c (gc_md5): Fix assert call.
Simon Josefsson <simon@josefsson.org>
parents: 6349
diff changeset
138 assert (outlen == GC_MD5_DIGEST_SIZE);
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
139
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
140 err = gcry_md_open (&hd, GCRY_MD_MD5, 0);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
141 if (err != GPG_ERR_NO_ERROR)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
142 return GC_INVALID_HASH;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
143
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
144 gcry_md_write (hd, in, inlen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
145
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
146 p = gcry_md_read (hd, GCRY_MD_MD5);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
147 if (p == NULL)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
148 {
6362
2bcfc491052b * gc-libgcrypt.c (gc_md5): Fix assert call.
Simon Josefsson <simon@josefsson.org>
parents: 6349
diff changeset
149 gcry_md_close (hd);
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
150 return GC_INVALID_HASH;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
151 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
152
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
153 memcpy (resbuf, p, outlen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
154
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
155 gcry_md_close (hd);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
156
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
157 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
158 }
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
159 #endif
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
160
6365
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
161 #ifdef GC_USE_SHA1
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
162 Gc_rc
6365
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
163 gc_sha1 (const void *in, size_t inlen, void *resbuf)
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
164 {
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
165 size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
166 gcry_md_hd_t hd;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
167 gpg_error_t err;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
168 unsigned char *p;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
169
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
170 assert (outlen == GC_SHA1_DIGEST_SIZE);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
171
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
172 err = gcry_md_open (&hd, GCRY_MD_SHA1, 0);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
173 if (err != GPG_ERR_NO_ERROR)
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
174 return GC_INVALID_HASH;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
175
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
176 gcry_md_write (hd, in, inlen);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
177
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
178 p = gcry_md_read (hd, GCRY_MD_SHA1);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
179 if (p == NULL)
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
180 {
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
181 gcry_md_close (hd);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
182 return GC_INVALID_HASH;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
183 }
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
184
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
185 memcpy (resbuf, p, outlen);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
186
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
187 gcry_md_close (hd);
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
188
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
189 return GC_OK;
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
190 }
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
191 #endif
d3733bac8f2d Add gc-sha1 module.
Simon Josefsson <simon@josefsson.org>
parents: 6363
diff changeset
192
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
193 #ifdef GC_USE_HMAC_MD5
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
194 Gc_rc
6348
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
195 gc_hmac_md5 (const void *key, size_t keylen,
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
196 const void *in, size_t inlen, char *resbuf)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
197 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
198 size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_MD5);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
199 gcry_md_hd_t mdh;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
200 unsigned char *hash;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
201 gpg_error_t err;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
202
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
203 assert (hlen == 16);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
204
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
205 err = gcry_md_open (&mdh, GCRY_MD_MD5, GCRY_MD_FLAG_HMAC);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
206 if (err != GPG_ERR_NO_ERROR)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
207 return GC_INVALID_HASH;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
208
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
209 err = gcry_md_setkey (mdh, key, keylen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
210 if (err != GPG_ERR_NO_ERROR)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
211 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
212 gcry_md_close (mdh);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
213 return GC_INVALID_HASH;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
214 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
215
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
216 gcry_md_write (mdh, in, inlen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
217
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
218 hash = gcry_md_read (mdh, GCRY_MD_MD5);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
219 if (hash == NULL)
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
220 {
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
221 gcry_md_close (mdh);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
222 return GC_INVALID_HASH;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
223 }
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
224
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
225 memcpy (resbuf, hash, hlen);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
226
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
227 gcry_md_close (mdh);
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
228
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
229 return GC_OK;
55961a93440c Add generic crypto module.
Simon Josefsson <simon@josefsson.org>
parents:
diff changeset
230 }
6363
bae11f33bf3c Split parts of the gc module into gc-md5 and gc-hmac-md5 modules.
Simon Josefsson <simon@josefsson.org>
parents: 6362
diff changeset
231 #endif
6366
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
232
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
233 #ifdef GC_USE_HMAC_SHA1
6367
69cadd43d0f4 * gc.h, gc-gnulib.c, gc-libgcrypt.c: Use Gc_rc for return types,
Simon Josefsson <simon@josefsson.org>
parents: 6366
diff changeset
234 Gc_rc
6366
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
235 gc_hmac_sha1 (const void *key, size_t keylen,
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
236 const void *in, size_t inlen, char *resbuf)
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
237 {
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
238 size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
239 gcry_md_hd_t mdh;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
240 unsigned char *hash;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
241 gpg_error_t err;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
242
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
243 assert (hlen == 16);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
244
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
245 err = gcry_md_open (&mdh, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
246 if (err != GPG_ERR_NO_ERROR)
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
247 return GC_INVALID_HASH;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
248
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
249 err = gcry_md_setkey (mdh, key, keylen);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
250 if (err != GPG_ERR_NO_ERROR)
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
251 {
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
252 gcry_md_close (mdh);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
253 return GC_INVALID_HASH;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
254 }
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
255
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
256 gcry_md_write (mdh, in, inlen);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
257
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
258 hash = gcry_md_read (mdh, GCRY_MD_SHA1);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
259 if (hash == NULL)
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
260 {
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
261 gcry_md_close (mdh);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
262 return GC_INVALID_HASH;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
263 }
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
264
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
265 memcpy (resbuf, hash, hlen);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
266
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
267 gcry_md_close (mdh);
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
268
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
269 return GC_OK;
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
270 }
22f41fec10ee Add gc-hmac-sha1.
Simon Josefsson <simon@josefsson.org>
parents: 6365
diff changeset
271 #endif