From 4b123f9ca22ee2622eb32233cb1d07af21e33826 Mon Sep 17 00:00:00 2001 From: Roman Shtylman Date: Thu, 1 Dec 2011 00:41:06 -0500 Subject: [PATCH] crypto: rewrite HexDecode without snprintf No need to use snprintf to create a hex string. It creates more overhead than is needed. This new version is much faster. --- src/node_crypto.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index d96b4d15fb..9f73df35ca 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -1699,9 +1699,20 @@ static void HexEncode(unsigned char *md_value, int* md_hex_len) { *md_hex_len = (2*(md_len)); *md_hexdigest = new char[*md_hex_len + 1]; - for (int i = 0; i < md_len; i++) { - snprintf((char *)(*md_hexdigest + (i*2)), 3, "%02x", md_value[i]); + + char* buff = *md_hexdigest; + const int len = *md_hex_len; + for (int i = 0; i < len; i += 2) { + // nibble nibble + const int index = i / 2; + const char msb = (md_value[index] >> 4) & 0x0f; + const char lsb = md_value[index] & 0x0f; + + buff[i] = (msb < 10) ? msb + '0' : (msb - 10) + 'a'; + buff[i + 1] = (lsb < 10) ? lsb + '0' : (lsb - 10) + 'a'; } + // null terminator + buff[*md_hex_len] = '\0'; } #define hex2i(c) ((c) <= '9' ? ((c) - '0') : (c) <= 'Z' ? ((c) - 'A' + 10) \