]> git.netwichtig.de Git - user/henk/code/inspircd.git/blobdiff - include/modules/hash.h
Expand searching in m_httpd_stats, add global handling of GET parameters (#1566)
[user/henk/code/inspircd.git] / include / modules / hash.h
index da04c45ba9d2bfd8500c33bcb489e73ca30981f0..7d46ee74a738b8919272f34c25438ce8fced08df 100644 (file)
@@ -26,24 +26,33 @@ class HashProvider : public DataProvider
  public:
        const unsigned int out_size;
        const unsigned int block_size;
-       HashProvider(Module* mod, const std::string& Name, int osiz, int bsiz)
-               : DataProvider(mod, Name), out_size(osiz), block_size(bsiz) {}
-       virtual std::string sum(const std::string& data) = 0;
-       inline std::string hexsum(const std::string& data)
+       HashProvider(Module* mod, const std::string& Name, unsigned int osiz = 0, unsigned int bsiz = 0)
+               : DataProvider(mod, "hash/" + Name), out_size(osiz), block_size(bsiz)
        {
-               return BinToHex(sum(data));
        }
 
-       inline std::string b64sum(const std::string& data)
+       virtual std::string GenerateRaw(const std::string& data) = 0;
+
+       virtual std::string ToPrintable(const std::string& raw)
+       {
+               return BinToHex(raw);
+       }
+
+       virtual bool Compare(const std::string& input, const std::string& hash)
+       {
+               return InspIRCd::TimingSafeCompare(Generate(input), hash);
+       }
+
+       std::string Generate(const std::string& data)
        {
-               return BinToBase64(sum(data), NULL, 0);
+               return ToPrintable(GenerateRaw(data));
        }
 
        /** HMAC algorithm, RFC 2104 */
        std::string hmac(const std::string& key, const std::string& msg)
        {
                std::string hmac1, hmac2;
-               std::string kbuf = key.length() > block_size ? sum(key) : key;
+               std::string kbuf = key.length() > block_size ? GenerateRaw(key) : key;
                kbuf.resize(block_size);
 
                for (size_t n = 0; n < block_size; n++)
@@ -52,7 +61,12 @@ class HashProvider : public DataProvider
                        hmac2.push_back(static_cast<char>(kbuf[n] ^ 0x36));
                }
                hmac2.append(msg);
-               hmac1.append(sum(hmac2));
-               return sum(hmac1);
+               hmac1.append(GenerateRaw(hmac2));
+               return GenerateRaw(hmac1);
+       }
+
+       bool IsKDF() const
+       {
+               return (!block_size);
        }
 };