var output = [];
var table = qwebirc.util.b64Table;
+
+ /* grossly inefficient... so sue me */
+ while(data.length % 4 != 0)
+ data = data + "=";
+
for(var i=0;i<data.length;) {
var enc1 = table.indexOf(data.charAt(i++));
var enc2 = table.indexOf(data.charAt(i++));
initialize: function(ui, arg) {
var p = {};
- if($defined(arg) && arg != "") {
- var decoded = qwebirc.util.b64Decode(arg);
- if(decoded)
+ if($defined(arg) && arg != "" && arg.length > 2) {
+ var checksum = arg.substr(arg.length - 2, 2);
+ var decoded = qwebirc.util.b64Decode(arg.substr(0, arg.length - 2));
+
+ if(decoded && (new qwebirc.util.crypto.MD5().digest(decoded).slice(0, 2) == checksum))
p = qwebirc.util.parseURI("?" + decoded);
}
result.push(x.optionId + "=" + x.value);
}.bind(this));
- return qwebirc.util.b64Encode(result.join("&")).replaceAll("=", "");
+ var raw = result.join("&");
+ var checksum = new qwebirc.util.crypto.MD5().digest(raw).slice(0, 2);
+ return (qwebirc.util.b64Encode(raw)).replaceAll("=", "") + checksum;
}
});