aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules
diff options
context:
space:
mode:
authorGravatar Sadie Powell2021-03-05 06:51:58 +0000
committerGravatar Sadie Powell2021-03-05 06:51:58 +0000
commitbe0cfca23695b7e412c4dbaa74ea726456e81d04 (patch)
tree0e8749df48ccdd09c50efca3bee6d50cd8736ae4 /src/modules
parentRename gecosban to realnameban. (diff)
downloadinspircd++-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.cpp2
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;
}