diff options
| author | 2021-03-05 06:51:58 +0000 | |
|---|---|---|
| committer | 2021-03-05 06:51:58 +0000 | |
| commit | be0cfca23695b7e412c4dbaa74ea726456e81d04 (patch) | |
| tree | 0e8749df48ccdd09c50efca3bee6d50cd8736ae4 /src/modules | |
| parent | Rename gecosban to realnameban. (diff) | |
| download | inspircd++-be0cfca23695b7e412c4dbaa74ea726456e81d04.tar.gz inspircd++-be0cfca23695b7e412c4dbaa74ea726456e81d04.tar.bz2 inspircd++-be0cfca23695b7e412c4dbaa74ea726456e81d04.zip | |
Implement support for other SHA2 hash types.
Diffstat (limited to 'src/modules')
| -rw-r--r-- | src/modules/m_sha2.cpp (renamed from src/modules/m_sha256.cpp) | 41 | ||||
| -rw-r--r-- | src/modules/m_spanningtree/hmac.cpp | 2 |
2 files changed, 22 insertions, 21 deletions
diff --git a/src/modules/m_sha256.cpp b/src/modules/m_sha2.cpp index d2d0688c4..3c3560d5c 100644 --- a/src/modules/m_sha256.cpp +++ b/src/modules/m_sha2.cpp @@ -25,46 +25,47 @@ /// $CompilerFlags: -Ivendor_directory("sha2") -#ifdef __GNUC__ -# pragma GCC diagnostic push -#endif #include "inspircd.h" #include "modules/hash.h" #include <sha2.c> -#ifdef __GNUC__ -# pragma GCC diagnostic pop -#endif - -class HashSHA256 : public HashProvider +template<void (*SHA)(const unsigned char*, unsigned int, unsigned char*)> +class HashSHA2 : public HashProvider { public: - std::string GenerateRaw(const std::string& data) override + HashSHA2(Module* parent, const std::string& Name, unsigned int osize, unsigned int bsize) + : HashProvider(parent, Name, osize, bsize) { - unsigned char bytes[SHA256_DIGEST_SIZE]; - sha256((unsigned char*)data.data(), data.length(), bytes); - return std::string((char*)bytes, SHA256_DIGEST_SIZE); } - HashSHA256(Module* parent) - : HashProvider(parent, "sha256", 32, 64) + std::string GenerateRaw(const std::string& data) override { + std::vector<char> bytes(out_size); + SHA((unsigned char*)data.data(), data.size(), (unsigned char*)&bytes[0]); + return std::string(&bytes[0], bytes.size()); } }; -class ModuleSHA256 : public Module + +class ModuleSHA2 : public Module { private: - HashSHA256 sha; + HashSHA2<sha224> sha224algo; + HashSHA2<sha256> sha256algo; + HashSHA2<sha384> sha384algo; + HashSHA2<sha512> sha512algo; public: - ModuleSHA256() - : Module(VF_VENDOR, "Allows other modules to generate SHA-256 hashes.") - , sha(this) + ModuleSHA2() + : Module(VF_VENDOR, "Allows other modules to generate SHA-2 hashes.") + , sha224algo(this, "sha224", SHA224_DIGEST_SIZE, SHA224_BLOCK_SIZE) + , sha256algo(this, "sha256", SHA256_DIGEST_SIZE, SHA256_BLOCK_SIZE) + , sha384algo(this, "sha384", SHA384_DIGEST_SIZE, SHA384_BLOCK_SIZE) + , sha512algo(this, "sha512", SHA512_DIGEST_SIZE, SHA512_BLOCK_SIZE) { } }; -MODULE_INIT(ModuleSHA256) +MODULE_INIT(ModuleSHA2) diff --git a/src/modules/m_spanningtree/hmac.cpp b/src/modules/m_spanningtree/hmac.cpp index f4f257e5c..ed42819d1 100644 --- a/src/modules/m_spanningtree/hmac.cpp +++ b/src/modules/m_spanningtree/hmac.cpp @@ -65,7 +65,7 @@ std::string TreeSocket::MakePass(const std::string &password, const std::string return "AUTH:" + BinToBase64(sha256->hmac(password, challenge)); if (!challenge.empty() && !sha256) - ServerInstance->Logs.Log(MODNAME, LOG_DEFAULT, "Not authenticating to server using SHA256/HMAC because we don't have an SHA256 provider (e.g. m_sha256) loaded!"); + ServerInstance->Logs.Log(MODNAME, LOG_DEFAULT, "Not authenticating to server using SHA256/HMAC because we don't have an SHA256 provider (e.g. the sha2 module) loaded!"); return password; } |
