]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - src/inspstring.cpp
Merge pull request #976 from SaberUK/master+fix-xline-db
[user/henk/code/inspircd.git] / src / inspstring.cpp
index 72d6c64c83f1b3acd33e4e22ec8a4bcdb405f0e2..b5949273806b61a537dfb94227f25a8404f077d3 100644 (file)
 
 static const char hextable[] = "0123456789abcdef";
 
-std::string BinToHex(const std::string& data)
+std::string BinToHex(const void* raw, size_t l)
 {
-       int l = data.length();
+       const char* data = static_cast<const char*>(raw);
        std::string rv;
        rv.reserve(l * 2);
-       for(int i=0; i < l; i++)
+       for (size_t i = 0; i < l; i++)
        {
                unsigned char c = data[i];
-               rv.append(1, hextable[c >> 4]);
-               rv.append(1, hextable[c & 0xF]);
+               rv.push_back(hextable[c >> 4]);
+               rv.push_back(hextable[c & 0xF]);
        }
        return rv;
 }
@@ -108,3 +108,19 @@ std::string Base64ToBin(const std::string& data_str, const char* table)
        }
        return rv;
 }
+
+bool InspIRCd::TimingSafeCompare(const std::string& one, const std::string& two)
+{
+       if (one.length() != two.length())
+               return false;
+
+       unsigned int diff = 0;
+       for (std::string::const_iterator i = one.begin(), j = two.begin(); i != one.end(); ++i, ++j)
+       {
+               unsigned char a = static_cast<unsigned char>(*i);
+               unsigned char b = static_cast<unsigned char>(*j);
+               diff |= a ^ b;
+       }
+
+       return (diff == 0);
+}