2 * Copyright (c) 2008-2012, Novell Inc.
4 * This program is licensed under the BSD license, read LICENSE.BSD
5 * for further information
25 unsigned char result[64];
34 solv_chksum_create(Id type)
37 chk = solv_calloc(1, sizeof(*chk));
41 case REPOKEY_TYPE_MD5:
42 solv_MD5_Init(&chk->c.md5);
44 case REPOKEY_TYPE_SHA1:
45 solv_SHA1_Init(&chk->c.sha1);
47 case REPOKEY_TYPE_SHA256:
48 solv_SHA256_Init(&chk->c.sha256);
58 solv_chksum_create_clone(Chksum *chk)
60 return solv_memdup(chk, sizeof(*chk));
64 solv_chksum_len(Id type)
68 case REPOKEY_TYPE_MD5:
70 case REPOKEY_TYPE_SHA1:
72 case REPOKEY_TYPE_SHA256:
80 solv_chksum_create_from_bin(Id type, const unsigned char *buf)
83 int l = solv_chksum_len(type);
84 if (buf == 0 || l == 0)
86 chk = solv_calloc(1, sizeof(*chk));
89 memcpy(chk->result, buf, l);
94 solv_chksum_add(Chksum *chk, const void *data, int len)
100 case REPOKEY_TYPE_MD5:
101 solv_MD5_Update(&chk->c.md5, (void *)data, len);
103 case REPOKEY_TYPE_SHA1:
104 solv_SHA1_Update(&chk->c.sha1, data, len);
106 case REPOKEY_TYPE_SHA256:
107 solv_SHA256_Update(&chk->c.sha256, data, len);
114 const unsigned char *
115 solv_chksum_get(Chksum *chk, int *lenp)
120 *lenp = solv_chksum_len(chk->type);
125 case REPOKEY_TYPE_MD5:
126 solv_MD5_Final(chk->result, &chk->c.md5);
131 case REPOKEY_TYPE_SHA1:
132 solv_SHA1_Final(&chk->c.sha1, chk->result);
137 case REPOKEY_TYPE_SHA256:
138 solv_SHA256_Final(chk->result, &chk->c.sha256);
151 solv_chksum_get_type(Chksum *chk)
157 solv_chksum_isfinished(Chksum *chk)
159 return chk->done != 0;
163 solv_chksum_type2str(Id type)
167 case REPOKEY_TYPE_MD5:
169 case REPOKEY_TYPE_SHA1:
171 case REPOKEY_TYPE_SHA256:
179 solv_chksum_str2type(const char *str)
181 if (!strcasecmp(str, "md5"))
182 return REPOKEY_TYPE_MD5;
183 if (!strcasecmp(str, "sha") || !strcasecmp(str, "sha1"))
184 return REPOKEY_TYPE_SHA1;
185 if (!strcasecmp(str, "sha256"))
186 return REPOKEY_TYPE_SHA256;
191 solv_chksum_free(Chksum *chk, unsigned char *cp)
195 const unsigned char *res;
197 res = solv_chksum_get(chk, &l);