gwenhywfar  4.99.8beta
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 
int GWEN_Crypt_HashAlgo_SetInitVector(GWEN_CRYPT_HASHALGO *a, const uint8_t *pv, uint32_t lv)
Definition: hashalgo.c:201
GWEN_CRYPT_HASHALGOID
Definition: hashalgo.h:48
#define GWEN_DB_FLAGS_OVERWRITE_VARS
Definition: db.h:121
struct GWEN_DB_NODE GWEN_DB_NODE
Definition: db.h:228
GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgo_GetId(const GWEN_CRYPT_HASHALGO *a)
Definition: hashalgo.c:177
#define GWEN_FREE_OBJECT(varname)
Definition: memory.h:92
const char * GWEN_Crypt_HashAlgoId_toString(GWEN_CRYPT_HASHALGOID a)
Definition: hashalgo.c:46
#define NULL
Definition: binreloc.c:290
#define GWEN_LOGDOMAIN
Definition: logger.h:35
int GWEN_Crypt_HashAlgo_toDb(const GWEN_CRYPT_HASHALGO *a, GWEN_DB_NODE *db)
Definition: hashalgo.c:120
GWEN_CRYPT_HASHALGO * GWEN_Crypt_HashAlgo_fromDb(GWEN_DB_NODE *db)
Definition: hashalgo.c:88
uint8_t * GWEN_Crypt_HashAlgo_GetInitVectorPtr(const GWEN_CRYPT_HASHALGO *a)
Definition: hashalgo.c:185
int GWEN_DB_SetBinValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const void *val, unsigned int valSize)
Definition: db.c:1151
#define GWEN_NEW_OBJECT(typ, varname)
Definition: memory.h:86
const void * GWEN_DB_GetBinValue(GWEN_DB_NODE *n, const char *path, int idx, const void *defVal, unsigned int defValSize, unsigned int *returnValueSize)
Definition: db.c:1120
void GWEN_Crypt_HashAlgo_free(GWEN_CRYPT_HASHALGO *a)
Definition: hashalgo.c:158
const char * GWEN_DB_GetCharValue(GWEN_DB_NODE *n, const char *path, int idx, const char *defVal)
Definition: db.c:897
uint32_t GWEN_Crypt_HashAlgo_GetInitVectorLen(const GWEN_CRYPT_HASHALGO *a)
Definition: hashalgo.c:193
GWEN_CRYPT_HASHALGO * GWEN_Crypt_HashAlgo_dup(const GWEN_CRYPT_HASHALGO *na)
Definition: hashalgo.c:137
GWEN_LIST2_FUNCTIONS(TYPEMAKER2_TYPE, Typemaker2_Type)
GWEN_CRYPT_HASHALGO * GWEN_Crypt_HashAlgo_new(GWEN_CRYPT_HASHALGOID id)
Definition: hashalgo.c:67
int GWEN_DB_SetCharValue(GWEN_DB_NODE *n, uint32_t flags, const char *path, const char *val)
Definition: db.c:922
#define DBG_INFO(dbg_logger, format, args...)
Definition: debug.h:164
void GWEN_Crypt_HashAlgo_Attach(GWEN_CRYPT_HASHALGO *a)
Definition: hashalgo.c:80
struct GWEN_CRYPT_HASHALGO GWEN_CRYPT_HASHALGO
Definition: hashalgo.h:21
#define GWEN_ERROR_MEMORY_FULL
Definition: error.h:77
GWEN_CRYPT_HASHALGOID GWEN_Crypt_HashAlgoId_fromString(const char *s)
Definition: hashalgo.c:27