X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules%2Fm_sha256.cpp;h=70727b301147ffe036e45e4e3b8dd5ca7d204a40;hb=52671661f8fdca0b61aec8009b4bc7de9bc00166;hp=ad7352060fbe7ba16e3f759432dffc389ad133d5;hpb=53afaa7cadcdf222dcf761441727305f79b4c557;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules/m_sha256.cpp b/src/modules/m_sha256.cpp index ad7352060..70727b301 100644 --- a/src/modules/m_sha256.cpp +++ b/src/modules/m_sha256.cpp @@ -2,7 +2,7 @@ * | Inspire Internet Relay Chat Daemon | * +------------------------------------+ * - * InspIRCd: (C) 2002-2007 InspIRCd Development Team + * InspIRCd: (C) 2002-2008 InspIRCd Development Team * See: http://www.inspircd.org/wiki/index.php/Credits * * This program is free but copyrighted software; see @@ -134,12 +134,12 @@ uint32_t sha256_k[64] = class ModuleSHA256 : public Module { - void SHA256Init(SHA256Context *ctx, const unsigned int* key) + void SHA256Init(SHA256Context *ctx, const unsigned int* ikey) { - if (key) + if (ikey) { for (int i = 0; i < 8; i++) - ctx->h[i] = key[i]; + ctx->h[i] = ikey[i]; } else { @@ -186,7 +186,26 @@ class ModuleSHA256 : public Module void SHA256Update(SHA256Context *ctx, unsigned char *message, unsigned int len) { - unsigned int rem_len = SHA256_BLOCK_SIZE - ctx->len; + /* + * XXX here be dragons! + * After many hours of pouring over this, I think I've found the problem. + * When Special created our module from the reference one, he used: + * + * unsigned int rem_len = SHA256_BLOCK_SIZE - ctx->len; + * + * instead of the reference's version of: + * + * unsigned int tmp_len = SHA256_BLOCK_SIZE - ctx->len; + * unsigned int rem_len = len < tmp_len ? len : tmp_len; + * + * I've changed back to the reference version of this code, and it seems to work with no errors. + * So I'm inclined to believe this was the problem.. + * -- w00t (January 06, 2008) + */ + 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) { @@ -217,12 +236,12 @@ class ModuleSHA256 : public Module UNPACK32(ctx->h[i], &digest[i << 2]); } - void SHA256(const char *src, char *dest, int len, const char* hxc, const unsigned int* key = NULL) + void SHA256(const char *src, char *dest, int len, const char* hxc, const unsigned int* ikey = NULL) { // Generate the hash unsigned char bytehash[SHA256_DIGEST_SIZE]; SHA256Context ctx; - SHA256Init(&ctx, key); + SHA256Init(&ctx, ikey); SHA256Update(&ctx, (unsigned char *)src, (unsigned int)len); SHA256Final(&ctx, bytehash); // Convert it to hex @@ -252,7 +271,7 @@ class ModuleSHA256 : public Module } - virtual char* OnRequest(Request* request) + virtual const char* OnRequest(Request* request) { HashRequest* SHA = (HashRequest*)request; if (strcmp("KEY", request->GetId()) == 0) @@ -283,7 +302,7 @@ class ModuleSHA256 : public Module virtual Version GetVersion() { - return Version(1, 1, 0, 1, VF_VENDOR|VF_SERVICEPROVIDER, API_VERSION); + return Version(1, 2, 0, 1, VF_VENDOR|VF_SERVICEPROVIDER, API_VERSION); } };