Authenticated Chat
Jump to navigation
Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Here's a method of authenticating chat with shared secret.
//By: Gigs Taggart
//Modified by Strife Onizuka
//Released under BSD license
string gSetupNotecardName = "setup";
string gPassword;
integer gSeed;
key gSetupQueryId;
integer gSetupNotecardLine;
//to sign a message we hash message+gSecret+llGetKey()
string sign_message(string message)
{
string hash = llMD5String(message + gPassword + (string)llGetKey(), gSeed);
return message + hash;
}
//to verify a message we do all the same stuff except we get the sender's key
integer verify_message(string raw, key sender)
{
string hash = llMD5String(llDeleteSubString(message, -32, -1) + gPassword + (string)sender, gSeed);
return llGetSubString(message, -32, -1) == hash;
}
readSettingsNotecard()
{
gSetupNotecardLine = 0;
gSetupQueryId = llGetNotecardLine(gSetupNotecardName, gSetupNotecardLine);
}
default
{
state_entry()
{
readSettingsNotecard();
}
dataserver(key queryId, string data)
{
if(queryId == gSetupQueryId)
{
if(data != EOF)
{
integer split = llSubStringIndex(data, "=");
if(~split)
{
string setting = llDeleteSubString(data, split, -1);
string value = llDeleteSubString(data, 0, split);
if (setting == "password")
{
gPassword = value;
}
else if(setting == "seed")
{
gSeed = (integer)value;
}
}
gSetupQueryId = llGetNotecardLine(gSetupNotecardName, ++gSetupNotecardLine);
}
else
{
state running;
}
}
}
changed(integer change)
{
llResetScript();
}
}
state running
{
changed(integer change)
{
llResetScript();
}
}
Notecard
Name: "setup"
password=secret seed=0xdeadbeef