X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fssl.h;h=3c59f440b109611174571e07e6f178781bd92b8d;hb=2ce951c559f61bdae2a424e378e40bfd6fc815ec;hp=3d402830142b3dcacf313910e571724527b38527;hpb=7da15053baaaed7f9287c1c796e04d31457cfcca;p=umurmur.git diff --git a/src/ssl.h b/src/ssl.h index 3d40283..3c59f44 100644 --- a/src/ssl.h +++ b/src/ssl.h @@ -36,7 +36,6 @@ #include "types.h" #include -#include #include #if defined(USE_POLARSSL) @@ -89,20 +88,17 @@ int urandom_bytes(void *ctx, unsigned char *dest, size_t len); typedef ssl_context SSL_handle_t; #elif defined(USE_MBEDTLS) -#include -#if (MBEDTLS_VERSION_MINOR > 3) -#include -#else -#include -#endif #include -#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 +#if (MBEDTLS_VERSION_MINOR > 3) +#include #else -#error mbedTLS version 2.0.0 or greater is required! +#include #endif #if defined(USE_MBEDTLS_HAVEGE) @@ -166,22 +162,40 @@ void SSLi_free(SSL_handle_t *ssl); 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