X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_sha256.cpp;h=1f967207b27fb49e2ef26d8fe2e11c02d28c279c;hb=95c1fb9bdd5f93cf4f8306a7b8ae9ca098aade1a;hp=aee1cb12a8ec43298489b81257d257bdfea75903;hpb=621de565e15f9301b1e735b4c758fb805da57d86;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_sha256.cpp b/src/modules/m_sha256.cpp index aee1cb12a..1f967207b 100644 --- a/src/modules/m_sha256.cpp +++ b/src/modules/m_sha256.cpp @@ -2,8 +2,8 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2008 InspIRCd Development Team - * See: http://www.inspircd.org/wiki/index.php/Credits + * InspIRCd: (C) 2002-2009 InspIRCd Development Team + * See: http://wiki.inspircd.org/Credits * * This program is free but copyrighted software; see * the file COPYING for details. @@ -159,7 +159,7 @@ class ModuleSHA256 : public Module { int j; sub_block = message + ((i - 1) << 6); - + for (j = 0; j < 16; j++) PACK32(&sub_block[j << 2], &w[j]); for (j = 16; j < 64; j++) @@ -183,7 +183,7 @@ class ModuleSHA256 : public Module ctx->h[j] += wv[j]; } } - + void SHA256Update(SHA256Context *ctx, unsigned char *message, unsigned int len) { /* @@ -205,7 +205,7 @@ class ModuleSHA256 : public Module unsigned int tmp_len = SHA256_BLOCK_SIZE - ctx->len; unsigned int rem_len = len < tmp_len ? len : tmp_len; - + memcpy(&ctx->block[ctx->len], message, rem_len); if (ctx->len + len < SHA256_BLOCK_SIZE) { @@ -222,7 +222,7 @@ class ModuleSHA256 : public Module ctx->len = rem_len; ctx->tot_len += (block_nb + 1) << 6; } - + void SHA256Final(SHA256Context *ctx, unsigned char *digest) { unsigned int block_nb = (1 + ((SHA256_BLOCK_SIZE - 9) < (ctx->len % SHA256_BLOCK_SIZE))); @@ -235,34 +235,19 @@ class ModuleSHA256 : public Module for (int i = 0 ; i < 8; i++) UNPACK32(ctx->h[i], &digest[i << 2]); } - - void SHA256(const char *src, char *dest, int len, const char* hxc, const unsigned int* ikey = NULL) + + void SHA256(const char *src, unsigned char *dest, unsigned int len) { - // Generate the hash - unsigned char bytehash[SHA256_DIGEST_SIZE]; SHA256Context ctx; - SHA256Init(&ctx, ikey); - SHA256Update(&ctx, (unsigned char *)src, (unsigned int)len); - SHA256Final(&ctx, bytehash); - // Convert it to hex - for (int i = 0, j = 0; i < SHA256_DIGEST_SIZE; i++) - { - dest[j++] = hxc[bytehash[i] / 16]; - dest[j++] = hxc[bytehash[i] % 16]; - dest[j] = '\0'; - } + SHA256Init(&ctx, NULL); + SHA256Update(&ctx, (unsigned char *)src, len); + SHA256Final(&ctx, dest); } - unsigned int* key; - char* chars; - public: - - ModuleSHA256(InspIRCd* Me) : Module(Me), key(NULL), chars(NULL) + ModuleSHA256() { ServerInstance->Modules->PublishInterface("HashRequest", this); - Implementation eventlist[] = { I_OnRequest }; - ServerInstance->Modules->Attach(eventlist, this, 1); } virtual ~ModuleSHA256() @@ -271,38 +256,24 @@ class ModuleSHA256 : public Module } - virtual const char* OnRequest(Request* request) + void OnRequest(Request& request) { - HashRequest* SHA = (HashRequest*)request; - if (strcmp("KEY", request->GetId()) == 0) - { - this->key = (unsigned int*)SHA->GetKeyData(); - } - else if (strcmp("HEX", request->GetId()) == 0) - { - this->chars = (char*)SHA->GetOutputs(); - } - else if (strcmp("SUM", request->GetId()) == 0) - { - static char data[MAXBUF]; - SHA256((const char*)SHA->GetHashData().data(), data, SHA->GetHashData().length(), chars ? chars : "0123456789abcdef", key); - return data; - } - else if (strcmp("NAME", request->GetId()) == 0) + if (strcmp("HASH", request.id) == 0) { - return "sha256"; + unsigned char bytes[SHA256_DIGEST_SIZE]; + HashRequest& req = static_cast(request); + SHA256(req.data.data(), bytes, req.data.length()); + req.binresult.assign((char*)bytes, SHA256_DIGEST_SIZE); } - else if (strcmp("RESET", request->GetId()) == 0) + else if (strcmp("NAME", request.id) == 0) { - this->chars = NULL; - this->key = NULL; + static_cast(request).response = "sha256"; } - return NULL; } - virtual Version GetVersion() + Version GetVersion() { - return Version(1, 2, 0, 1, VF_VENDOR|VF_SERVICEPROVIDER, API_VERSION); + return Version("Allows for SHA-256 encrypted oper passwords", VF_VENDOR|VF_SERVICEPROVIDER); } };