gwenhywfar  5.10.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 
24 GWEN_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 
75  GWEN_MDigest_SetDigestBuffer(md, p, len);
76 
77  gcry_md_close(xmd->handle);
78  xmd->isOpen=0;
79  return 0;
80 }
81 
82 
83 
84 int 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");
94  return GWEN_ERROR_NOT_OPEN;
95  }
96  gcry_md_write(xmd->handle, buf, l);
97 
98  return 0;
99 }
100 
101 
102 
104 void GWEN_Digest_Gc_freeData(GWEN_UNUSED void *bp, void *p)
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);
126  GWEN_INHERIT_SETDATA(GWEN_MDIGEST, GWEN_MDIGEST_GC, md, xmd, GWEN_Digest_Gc_freeData)
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 
GWEN_CRYPT_HASHALGOID
Definition: hashalgo.h:48
int GWEN_MDigest_Gc_Update(GWEN_MDIGEST *md, const uint8_t *buf, unsigned int l)
Definition: mdigestgc.c:84
GWEN_MDIGEST * GWEN_MDigest_Gc_new(GWEN_CRYPT_HASHALGOID a)
Definition: mdigestgc.c:118
GWEN_MDIGEST_END_FN GWEN_MDigest_SetEndFn(GWEN_MDIGEST *md, GWEN_MDIGEST_END_FN f)
Definition: mdigest.c:227
int GWEN_MDigest_Gc_Begin(GWEN_MDIGEST *md)
Definition: mdigestgc.c:29
void GWEN_MDigest_SetDigestLen(GWEN_MDIGEST *md, unsigned int l)
Definition: mdigest.c:116
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:61
GWEN_MDIGEST * GWEN_MDigest_new(GWEN_CRYPT_HASHALGOID a)
Definition: mdigest.c:39
GWEN_MDIGEST * GWEN_MDigest_Sha1_new(void)
Definition: mdigestgc.c:176
GWEN_MDIGEST_UPDATE_FN GWEN_MDigest_SetUpdateFn(GWEN_MDIGEST *md, GWEN_MDIGEST_UPDATE_FN f)
Definition: mdigest.c:241
#define GWEN_LOGDOMAIN
Definition: logger.h:35
GWEN_MDIGEST * GWEN_MDigest_Md5_new(void)
Definition: mdigestgc.c:140
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:55
GWEN_MDIGEST * GWEN_MDigest_Sha256_new(void)
Definition: mdigestgc.c:194
#define GWENHYWFAR_CB
Definition: gwenhywfarapi.h:89
#define GWEN_ERROR_GENERIC
Definition: error.h:62
struct GWEN_MDIGEST GWEN_MDIGEST
Definition: mdigest.h:25
#define GWEN_ERROR_NOT_OPEN
Definition: error.h:70
int GWEN_MDigest_Gc_End(GWEN_MDIGEST *md)
Definition: mdigestgc.c:51
GWEN_MDIGEST * GWEN_MDigest_Rmd160_new(void)
Definition: mdigestgc.c:158
GWEN_MDIGEST_BEGIN_FN GWEN_MDigest_SetBeginFn(GWEN_MDIGEST *md, GWEN_MDIGEST_BEGIN_FN f)
Definition: mdigest.c:213
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:181
#define GWEN_INHERIT(bt, t)
Definition: inherit.h:264
void GWEN_MDigest_SetDigestBuffer(GWEN_MDIGEST *md, uint8_t *buf, unsigned int l)
Definition: mdigest.c:99
#define GWEN_INHERIT_SETDATA(bt, t, element, data, fn)
Definition: inherit.h:292
GWENHYWFAR_CB void GWEN_Digest_Gc_freeData(GWEN_UNUSED void *bp, void *p)
Definition: mdigestgc.c:104
#define GWEN_UNUSED
#define GWEN_INHERIT_GETDATA(bt, t, element)
Definition: inherit.h:271