-/*
- * Decode a hexadecimal string into a sequence of bytes. If there are an
- * odd number of nibbles, treat the first character as the least significant
- * nibble of the first byte. The result is written to the buffer specified by
- * buf. At most n bytes are written to the buffer.
- *
- * Returns the number of bytes that would be written provided that n was large
- * enough, or (size_t)-1 if the input is not valid.
- */
-static size_t decode_hex(const char *hex, unsigned char *buf, size_t n)
-{
- size_t len, count = 0;
- char tmp[] = "00";
-
- for (len = 0; hex[len]; len++) {
- if (!isxdigit(hex[len]))
- return -1;
- }
-
- if (!len)
- return 0;
-
- switch (len % 2) {
- while (len > 0) {
- case 0: tmp[0] = *hex++; len--;
- case 1: tmp[1] = *hex++; len--;
-
- if (count < n)
- buf[count] = strtoul(tmp, NULL, 16);
- count++;
- }
- }
-
- return count;
-}
-