#include "types.h"
#include <inttypes.h>
-#include <stdio.h>
#include <string.h>
#if defined(USE_POLARSSL)
typedef ssl_context SSL_handle_t;
#elif defined(USE_MBEDTLS)
-#include <mbedtls/ssl.h>
-#if (MBEDTLS_VERSION_MINOR > 3)
-#include <mbedtls/net_socket.h>
-#else
-#include <mbedtls/net.h>
-#endif
#include <mbedtls/version.h>
-#if defined(MBEDTLS_VERSION_MAJOR)
-#if (MBEDTLS_VERSION_MAJOR < 2)
+#if !defined(MBEDTLS_VERSION_MAJOR) || (MBEDTLS_VERSION_MAJOR < 2)
#error mbedTLS version 2.0.0 or greater is required!
#endif
+
+#include <mbedtls/ssl.h>
+#if (MBEDTLS_VERSION_MINOR > 3)
+#include <mbedtls/net_sockets.h>
#else
-#error mbedTLS version 2.0.0 or greater is required!
+#include <mbedtls/net.h>
#endif
#if defined(USE_MBEDTLS_HAVEGE)
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