2 * Copyright (c) 2008-2012, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
29 unsigned char result[64];
41 solv_chksum_create(Id type)
44 chk = solv_calloc(1, sizeof(*chk));
48 case REPOKEY_TYPE_MD5:
49 solv_MD5_Init(&chk->c.md5);
51 case REPOKEY_TYPE_SHA1:
52 solv_SHA1_Init(&chk->c.sha1);
54 case REPOKEY_TYPE_SHA224:
55 solv_SHA224_Init(&chk->c.sha224);
57 case REPOKEY_TYPE_SHA256:
58 solv_SHA256_Init(&chk->c.sha256);
60 case REPOKEY_TYPE_SHA384:
61 solv_SHA384_Init(&chk->c.sha384);
63 case REPOKEY_TYPE_SHA512:
64 solv_SHA512_Init(&chk->c.sha512);
74 solv_chksum_create_clone(Chksum *chk)
76 return solv_memdup(chk, sizeof(*chk));
80 solv_chksum_len(Id type)
84 case REPOKEY_TYPE_MD5:
86 case REPOKEY_TYPE_SHA1:
88 case REPOKEY_TYPE_SHA224:
90 case REPOKEY_TYPE_SHA256:
92 case REPOKEY_TYPE_SHA384:
94 case REPOKEY_TYPE_SHA512:
102 solv_chksum_create_from_bin(Id type, const unsigned char *buf)
105 int l = solv_chksum_len(type);
106 if (buf == 0 || l == 0)
108 chk = solv_calloc(1, sizeof(*chk));
111 memcpy(chk->result, buf, l);
116 solv_chksum_add(Chksum *chk, const void *data, int len)
122 case REPOKEY_TYPE_MD5:
123 solv_MD5_Update(&chk->c.md5, (void *)data, len);
125 case REPOKEY_TYPE_SHA1:
126 solv_SHA1_Update(&chk->c.sha1, data, len);
128 case REPOKEY_TYPE_SHA224:
129 solv_SHA224_Update(&chk->c.sha224, data, len);
131 case REPOKEY_TYPE_SHA256:
132 solv_SHA256_Update(&chk->c.sha256, data, len);
134 case REPOKEY_TYPE_SHA384:
135 solv_SHA384_Update(&chk->c.sha384, data, len);
137 case REPOKEY_TYPE_SHA512:
138 solv_SHA512_Update(&chk->c.sha512, data, len);
145 const unsigned char *
146 solv_chksum_get(Chksum *chk, int *lenp)
151 *lenp = solv_chksum_len(chk->type);
156 case REPOKEY_TYPE_MD5:
157 solv_MD5_Final(chk->result, &chk->c.md5);
162 case REPOKEY_TYPE_SHA1:
163 solv_SHA1_Final(&chk->c.sha1, chk->result);
168 case REPOKEY_TYPE_SHA224:
169 solv_SHA224_Final(chk->result, &chk->c.sha224);
174 case REPOKEY_TYPE_SHA256:
175 solv_SHA256_Final(chk->result, &chk->c.sha256);
180 case REPOKEY_TYPE_SHA384:
181 solv_SHA384_Final(chk->result, &chk->c.sha384);
186 case REPOKEY_TYPE_SHA512:
187 solv_SHA512_Final(chk->result, &chk->c.sha512);
200 solv_chksum_get_type(Chksum *chk)
206 solv_chksum_isfinished(Chksum *chk)
208 return chk->done != 0;
212 solv_chksum_type2str(Id type)
216 case REPOKEY_TYPE_MD5:
218 case REPOKEY_TYPE_SHA1:
220 case REPOKEY_TYPE_SHA224:
222 case REPOKEY_TYPE_SHA256:
224 case REPOKEY_TYPE_SHA384:
226 case REPOKEY_TYPE_SHA512:
234 solv_chksum_str2type(const char *str)
236 if (!strcasecmp(str, "md5"))
237 return REPOKEY_TYPE_MD5;
238 if (!strcasecmp(str, "sha") || !strcasecmp(str, "sha1"))
239 return REPOKEY_TYPE_SHA1;
240 if (!strcasecmp(str, "sha224"))
241 return REPOKEY_TYPE_SHA224;
242 if (!strcasecmp(str, "sha256"))
243 return REPOKEY_TYPE_SHA256;
244 if (!strcasecmp(str, "sha384"))
245 return REPOKEY_TYPE_SHA384;
246 if (!strcasecmp(str, "sha512"))
247 return REPOKEY_TYPE_SHA512;
252 solv_chksum_free(Chksum *chk, unsigned char *cp)
256 const unsigned char *res;
258 res = solv_chksum_get(chk, &l);
267 solv_chksum_cmp(Chksum *chk, Chksum *chk2)
270 const unsigned char *res1, *res2;
273 if (!chk || !chk2 || chk->type != chk2->type)
275 res1 = solv_chksum_get(chk, &len);
276 res2 = solv_chksum_get(chk2, 0);
277 return memcmp(res1, res2, len) == 0 ? 1 : 0;