Mercurial > hg > octave-nkf > gnulib-hg
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 |
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 | 112 #ifdef GC_USE_SHA1 |
113 case GC_SHA1: | |
114 gcryalg = GCRY_MD_SHA1; | |
115 break; | |
116 #endif | |
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 | 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 | 163 gc_sha1 (const void *in, size_t inlen, void *resbuf) |
164 { | |
165 size_t outlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); | |
166 gcry_md_hd_t hd; | |
167 gpg_error_t err; | |
168 unsigned char *p; | |
169 | |
170 assert (outlen == GC_SHA1_DIGEST_SIZE); | |
171 | |
172 err = gcry_md_open (&hd, GCRY_MD_SHA1, 0); | |
173 if (err != GPG_ERR_NO_ERROR) | |
174 return GC_INVALID_HASH; | |
175 | |
176 gcry_md_write (hd, in, inlen); | |
177 | |
178 p = gcry_md_read (hd, GCRY_MD_SHA1); | |
179 if (p == NULL) | |
180 { | |
181 gcry_md_close (hd); | |
182 return GC_INVALID_HASH; | |
183 } | |
184 | |
185 memcpy (resbuf, p, outlen); | |
186 | |
187 gcry_md_close (hd); | |
188 | |
189 return GC_OK; | |
190 } | |
191 #endif | |
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 | 232 |
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 | 235 gc_hmac_sha1 (const void *key, size_t keylen, |
236 const void *in, size_t inlen, char *resbuf) | |
237 { | |
238 size_t hlen = gcry_md_get_algo_dlen (GCRY_MD_SHA1); | |
239 gcry_md_hd_t mdh; | |
240 unsigned char *hash; | |
241 gpg_error_t err; | |
242 | |
243 assert (hlen == 16); | |
244 | |
245 err = gcry_md_open (&mdh, GCRY_MD_SHA1, GCRY_MD_FLAG_HMAC); | |
246 if (err != GPG_ERR_NO_ERROR) | |
247 return GC_INVALID_HASH; | |
248 | |
249 err = gcry_md_setkey (mdh, key, keylen); | |
250 if (err != GPG_ERR_NO_ERROR) | |
251 { | |
252 gcry_md_close (mdh); | |
253 return GC_INVALID_HASH; | |
254 } | |
255 | |
256 gcry_md_write (mdh, in, inlen); | |
257 | |
258 hash = gcry_md_read (mdh, GCRY_MD_SHA1); | |
259 if (hash == NULL) | |
260 { | |
261 gcry_md_close (mdh); | |
262 return GC_INVALID_HASH; | |
263 } | |
264 | |
265 memcpy (resbuf, hash, hlen); | |
266 | |
267 gcry_md_close (mdh); | |
268 | |
269 return GC_OK; | |
270 } | |
271 #endif |