gwenhywfar  4.8.0beta
hashalgo.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 #define DISABLE_DEBUGLOG
15 
16 
17 #include "hashalgo_p.h"
18 #include <gwenhywfar/misc.h>
19 #include <gwenhywfar/debug.h>
20 
21 
22 
23 GWEN_LIST2_FUNCTIONS(GWEN_CRYPT_HASHALGO, GWEN_Crypt_HashAlgo)
24 
25 
26 
28  assert(s);
29  if (strcasecmp(s, "none")==0)
30  return GWEN_Crypt_HashAlgoId_None;
31  else if (strcasecmp(s, "sha1")==0)
32  return GWEN_Crypt_HashAlgoId_Sha1;
33  else if (strcasecmp(s, "rmd160")==0)
34  return GWEN_Crypt_HashAlgoId_Rmd160;
35  else if (strcasecmp(s, "md5")==0)
36  return GWEN_Crypt_HashAlgoId_Md5;
37  else if (strcasecmp(s, "any")==0)
38  return GWEN_Crypt_HashAlgoId_Any;
39  else if (strcasecmp(s, "sha256")==0)
40  return GWEN_Crypt_HashAlgoId_Sha256;
41  return GWEN_Crypt_HashAlgoId_Unknown;
42 }
43 
44 
45 
47  switch(a) {
48  case GWEN_Crypt_HashAlgoId_None:
49  return "none";
50  case GWEN_Crypt_HashAlgoId_Sha1:
51  return "sha1";
52  case GWEN_Crypt_HashAlgoId_Rmd160:
53  return "rmd160";
54  case GWEN_Crypt_HashAlgoId_Md5:
55  return "md5";
56  case GWEN_Crypt_HashAlgoId_Sha256:
57  return "sha256";
58  case GWEN_Crypt_HashAlgoId_Any:
59  return "any";
60  default:
61  return "unknown";
62  }
63 }
64 
65 
66 
69 
71  a->refCount=1;
72 
73  a->id=id;
74 
75  return a;
76 }
77 
78 
79 
81  assert(a);
82  assert(a->refCount);
83  a->refCount++;
84 }
85 
86 
87 
89  const char *s;
90 
91  assert(db);
92  s=GWEN_DB_GetCharValue(db, "id", 0, NULL);
93  if (s) {
96  const void *p;
97  unsigned int len;
98 
100  if (id==GWEN_Crypt_HashAlgoId_Unknown) {
101  DBG_INFO(GWEN_LOGDOMAIN, "Unknown hashalgo id [%s]", s);
102  return NULL;
103  }
105  assert(a);
106  p=GWEN_DB_GetBinValue(db, "initVector", 0, NULL, 0, &len);
107  if (p && len)
109 
110  return a;
111  }
112  else {
113  DBG_INFO(GWEN_LOGDOMAIN, "Missing hashalgo id");
114  return NULL;
115  }
116 }
117 
118 
119 
121  assert(a);
122  assert(a->refCount);
123 
125  "id",
127  if (a->pInitVector && a->lInitVector)
129  "initVector",
130  a->pInitVector, a->lInitVector);
131 
132  return 0;
133 }
134 
135 
136 
139 
140  assert(na);
141  a=GWEN_Crypt_HashAlgo_new(na->id);
142  if (na->pInitVector && na->lInitVector) {
143  a->pInitVector=(uint8_t*) malloc(na->lInitVector);
144  if (a->pInitVector==NULL) {
146  return NULL;
147  }
148  else
149  memmove(a->pInitVector, na->pInitVector, na->lInitVector);
150  a->lInitVector=na->lInitVector;
151  }
152 
153  return a;
154 }
155 
156 
157 
159  if (a) {
160  assert(a->refCount);
161  if (a->refCount==1) {
162  if (a->pInitVector) {
163  free(a->pInitVector);
164  a->pInitVector=NULL;
165  }
166  a->refCount--;
167  GWEN_FREE_OBJECT(a);
168  }
169  else {
170  a->refCount--;
171  }
172  }
173 }
174 
175 
176 
178  assert(a);
179  assert(a->refCount);
180  return a->id;
181 }
182 
183 
184 
186  assert(a);
187  assert(a->refCount);
188  return a->pInitVector;
189 }
190 
191 
192 
194  assert(a);
195  assert(a->refCount);
196  return a->lInitVector;
197 }
198 
199 
200 
202  const uint8_t *pv,
203  uint32_t lv) {
204  uint8_t *nv=NULL;
205 
206  assert(a);
207  assert(a->refCount);
208 
209  if (pv && lv) {
210  nv=(uint8_t*) malloc(lv);
211  if (nv==NULL)
212  return GWEN_ERROR_MEMORY_FULL;
213  memmove(nv, pv, lv);
214  }
215 
216  if (a->pInitVector && a->lInitVector)
217  free(a->pInitVector);
218 
219  a->pInitVector=nv;
220  a->lInitVector=(nv!=NULL)?lv:0;
221 
222  return 0;
223 }
224 
225 
226 
227