gwenhywfar 5.14.1
mdigestgc.c
Go to the documentation of this file.
1/***************************************************************************
2 begin : Wed Mar 16 2005
3 copyright : (C) 2005 by Martin Preuss
4 email : martin@libchipcard.de
5
6 ***************************************************************************
7 * Please see toplevel file COPYING for license details *
8 ***************************************************************************/
9
10#ifdef HAVE_CONFIG_H
11# include <config.h>
12#endif
13
14
15#define DISABLE_DEBUGLOG
16
17
18#include "mdigestgc_p.h"
19#include <gwenhywfar/misc.h>
20#include <gwenhywfar/debug.h>
21
22
23
24GWEN_INHERIT(GWEN_MDIGEST, GWEN_MDIGEST_GC)
25
26
27
28
30{
31 GWEN_MDIGEST_GC *xmd;
32 int err;
33
34 assert(md);
35 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
36 assert(xmd);
37
38 err=gcry_md_open(&xmd->handle, xmd->algo, xmd->flags);
39 if (err) {
40 DBG_INFO(GWEN_LOGDOMAIN, "gcry_md_open(): %d", err);
41 return GWEN_ERROR_GENERIC;
42 }
43
44 xmd->isOpen=1;
45
46 return 0;
47}
48
49
50
52{
53 GWEN_MDIGEST_GC *xmd;
54 uint8_t *p;
55 unsigned int len;
56
57 assert(md);
58 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
59 assert(xmd);
60
61 gcry_md_final(xmd->handle);
62
63 len=gcry_md_get_algo_dlen(xmd->algo);
64 if (len<1) {
65 DBG_INFO(GWEN_LOGDOMAIN, "gcry_md_get_algo_dlen(): %d", len);
66 gcry_md_close(xmd->handle);
67 xmd->isOpen=0;
68 return GWEN_ERROR_GENERIC;
69 }
70
71 p=(uint8_t *)malloc(len);
72 assert(p);
73 memmove(p, gcry_md_read(xmd->handle, xmd->algo), len);
74
76
77 gcry_md_close(xmd->handle);
78 xmd->isOpen=0;
79 return 0;
80}
81
82
83
84int GWEN_MDigest_Gc_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
85{
86 GWEN_MDIGEST_GC *xmd;
87
88 assert(md);
89 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
90 assert(xmd);
91
92 if (xmd->isOpen==0) {
93 DBG_INFO(GWEN_LOGDOMAIN, "MDigest not open");
95 }
96 gcry_md_write(xmd->handle, buf, l);
97
98 return 0;
99}
100
101
102
105{
106 GWEN_MDIGEST_GC *xmd;
107
108 xmd=(GWEN_MDIGEST_GC *) p;
109 if (xmd->isOpen) {
110 gcry_md_close(xmd->handle);
111 xmd->isOpen=0;
112 }
113 GWEN_FREE_OBJECT(xmd);
114}
115
116
117
119{
120 GWEN_MDIGEST *md;
121 GWEN_MDIGEST_GC *xmd;
122
123 GWEN_NEW_OBJECT(GWEN_MDIGEST_GC, xmd)
124 md=GWEN_MDigest_new(a);
125 assert(md);
127
131
132 return md;
133}
134
135
136
137
138
139
141{
142 GWEN_MDIGEST *md;
143 GWEN_MDIGEST_GC *xmd;
144
145 md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Md5);
146 assert(md);
147 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
148 assert(xmd);
149
150 xmd->algo=GCRY_MD_MD5;
151 GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo));
152
153 return md;
154}
155
156
157
159{
160 GWEN_MDIGEST *md;
161 GWEN_MDIGEST_GC *xmd;
162
163 md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Rmd160);
164 assert(md);
165 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
166 assert(xmd);
167
168 xmd->algo=GCRY_MD_RMD160;
169 GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo));
170
171 return md;
172}
173
174
175
177{
178 GWEN_MDIGEST *md;
179 GWEN_MDIGEST_GC *xmd;
180
181 md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Sha1);
182 assert(md);
183 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
184 assert(xmd);
185
186 xmd->algo=GCRY_MD_SHA1;
187 GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo));
188
189 return md;
190}
191
192
193
195{
196 GWEN_MDIGEST *md;
197 GWEN_MDIGEST_GC *xmd;
198
199 md=GWEN_MDigest_Gc_new(GWEN_Crypt_HashAlgoId_Sha256);
200 assert(md);
201 xmd=GWEN_INHERIT_GETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md);
202 assert(xmd);
203
204 xmd->algo=GCRY_MD_SHA256;
205 xmd->flags=GCRY_MD_FLAG_SECURE;
206 GWEN_MDigest_SetDigestLen(md, gcry_md_get_algo_dlen(xmd->algo));
207
208 return md;
209}
210
211
212
213
214
215
#define DBG_INFO(dbg_logger, format,...)
Definition debug.h:181
#define GWEN_ERROR_NOT_OPEN
Definition error.h:70
#define GWEN_ERROR_GENERIC
Definition error.h:62
#define GWEN_UNUSED
#define GWENHYWFAR_CB
GWEN_CRYPT_HASHALGOID
Definition hashalgo.h:48
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition inherit.h:300
#define GWEN_INHERIT(bt, t)
Definition inherit.h:264
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition inherit.h:279
#define GWEN_LOGDOMAIN
Definition logger.h:32
void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l)
Definition mdigest.c:99
void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l)
Definition mdigest.c:116
GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f)
Definition mdigest.c:213
GWEN_MDIGEST * GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a)
Definition mdigest.c:39
GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f)
Definition mdigest.c:241
GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f)
Definition mdigest.c:227
struct GWEN_MDIGEST GWEN_MDIGEST
Definition mdigest.h:25
int GWEN_MDigest_Gc_Begin(GWEN_MDIGEST *md)
Definition mdigestgc.c:29
GWENHYWFAR_CB void GWEN_Digest_Gc_freeData(GWEN_UNUSED void *bp, void *p)
Definition mdigestgc.c:104
int GWEN_MDigest_Gc_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
Definition mdigestgc.c:84
int GWEN_MDigest_Gc_End(GWEN_MDIGEST *md)
Definition mdigestgc.c:51
GWEN_MDIGEST * GWEN_MDigest_Sha256_new(void)
Definition mdigestgc.c:194
GWEN_MDIGEST * GWEN_MDigest_Sha1_new(void)
Definition mdigestgc.c:176
GWEN_MDIGEST * GWEN_MDigest_Md5_new(void)
Definition mdigestgc.c:140
GWEN_MDIGEST * GWEN_MDigest_Gc_new(GWEN_CRYPT_HASHALGOID a)
Definition mdigestgc.c:118
GWEN_MDIGEST * GWEN_MDigest_Rmd160_new(void)
Definition mdigestgc.c:158
#define GWEN_FREE_OBJECT(varname)
Definition memory.h:61
#define GWEN_NEW_OBJECT(typ, varname)
Definition memory.h:55