Handle digest lengths greater than 1 block.

This commit is contained in:
Simon Kelley
2014-01-08 21:21:20 +00:00
parent 0435d041ea
commit b6e9e7c32d
3 changed files with 12 additions and 5 deletions

View File

@@ -96,18 +96,24 @@ void blockdata_free(struct blockdata *blocks)
}
}
void blockdata_retrieve(struct blockdata *block, size_t len, void *data)
/* copy blocks into data[], return 1 if data[] unchanged by so doing */
int blockdata_retrieve(struct blockdata *block, size_t len, void *data)
{
size_t blen;
struct blockdata *b;
int match = 1;
for (b = block; len > 0 && b; b = b->next)
{
blen = len > KEYBLOCK_LEN ? KEYBLOCK_LEN : len;
if (memcmp(data, b->key, blen) != 0)
match = 0;
memcpy(data, b->key, blen);
data += blen;
len -= blen;
}
return match;
}
#endif