/* See LICENSE file for copyright and license details. */ #include "common.h" /** * Convert a hexadecimal hashsum (both lower case, upper * case and mixed is supported) to binary representation * * @param output Output array, should have an allocation * size of at least `strlen(hashsum) / 2` * @param hashsum The hashsum to convert */ void libsha1_unhex(void *restrict output_, const char *restrict hashsum) { unsigned char *restrict output = output_; size_t n = strlen(hashsum) / 2; unsigned char a, b; while (n--) { a = ((const unsigned char *)hashsum)[2 * n + 0]; b = ((const unsigned char *)hashsum)[2 * n + 1]; a = (unsigned char)((a & 15) + (a > '9' ? 9 : 0)); b = (unsigned char)((b & 15) + (b > '9' ? 9 : 0)); output[n] = (unsigned char)((a << 4) | b); } }