#include "types.h"
#include <inttypes.h>
-#include <stdio.h>
#include <string.h>
#if defined(USE_POLARSSL)
static inline void SSLi_hash2hex(uint8_t *hash, char *out)
{
+ const char hexdigits[] = "0123456789abcdef";
int i, offset = 0;
- for (i = 0; i < 20; i++)
- offset += sprintf(out + offset, "%02x", hash[i]);
+ for (i = 0; i < 20; i++) {
+ out[offset++] = hexdigits[hash[i] >> 4];
+ out[offset++] = hexdigits[hash[i] & 0x0f];
+ }
+
+ out[offset] = '\0';
+}
+
+static inline uint8_t nibble(char c)
+{
+ if (c >= '0' && c <= '9')
+ return c - '0';
+
+ /* Force lower case so we don't need to check
+ * for upper case characters.
+ */
+ c |= 32;
+
+ return c - 'a' + 10;
}
static inline void SSLi_hex2hash(char *in, uint8_t *hash)
{
- int i;
- char byte[3];
- int scanned;
+ int i, offset = 0;
- byte[2] = '\0';
for (i = 0; i < 20; i++) {
- memcpy(byte, &in[i * 2], 2);
- sscanf(byte, "%02x", &scanned);
- hash[i] = scanned;
+ uint8_t upper, lower;
+
+ upper = nibble(in[offset++]);
+ lower = nibble(in[offset++]);
+
+ hash[i] = (upper << 4) | lower;
}
}
#endif