- bool lowercase = Conf.ReadFlag("cloak", "lowercase", 0);
-
- /* These are *not* using the need_positive parameter of ReadInteger -
- * that will limit the valid values to only the positive values in a
- * signed int. Instead, accept any value that fits into an int and
- * cast it to an unsigned int. That will, a bit oddly, give us the full
- * spectrum of an unsigned integer. - Special
- *
- * We must limit the keys or else we get different results on
- * amd64/x86 boxes. - psychon */
- const unsigned int limit = 0x80000000;
- compatkey[0] = (unsigned int) Conf.ReadInteger("cloak","key1",0,false);
- compatkey[1] = (unsigned int) Conf.ReadInteger("cloak","key2",0,false);
- compatkey[2] = (unsigned int) Conf.ReadInteger("cloak","key3",0,false);
- compatkey[3] = (unsigned int) Conf.ReadInteger("cloak","key4",0,false);
-
- if (!lowercase)
- {
- xtab[0] = "F92E45D871BCA630";
- xtab[1] = "A1B9D80C72E653F4";
- xtab[2] = "1ABC078934DEF562";
- xtab[3] = "ABCDEF5678901234";
- }
- else
- {
- xtab[0] = "f92e45d871bca630";
- xtab[1] = "a1b9d80c72e653f4";
- xtab[2] = "1abc078934def562";
- xtab[3] = "abcdef5678901234";
- }
+ ConfigTag* tag = i->second;
+
+ // Ensure that we have the <cloak:key> parameter.
+ const std::string key = tag->getString("key");
+ if (key.empty())
+ throw ModuleException("You have not defined a cloaking key. Define <cloak:key> as a " + ConvToStr(minkeylen) + "+ character network-wide secret, at " + tag->getTagLocation());