JavaScript Misdirection Contest #0

See http://misdirect.ion.land

by nderscore

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

/* 
 * JS Misdirection 2015 Entry 
 * http://misdirect.ion.land/
 * By: _nderscore
 * http://nderscore.com
 */

var generateKey = function generateKey(result){
    try {
        var output = document.querySelector('#result'),
            input = document.querySelector('#user-input').value;
            
        if(input.length < 16)
            result = 'Keep typing!';
        else
            result = secureKeygen(input);

        output.innerText = result;
    } catch (e) {
        handleError(e, generateKey);
        return result;
    }
};

/* randomization seed - chosen by fair 32-bit dice roll */
var seed = 0x13371337;

var scramble = function srcamble(input){
    /* string srcambler madness */
    try {
        var deccode = input.toString(10)
            hexcode = input.toString(16);

        for(var i = 0; i < deccode.length; i++ ){
        	var slide = +deccode[i];
        	hexcode = hexcode.slice(slide) + hexcode.slice(0, slide);
        }

        return parseInt(hexcode, 16);
    } catch (e){
        handleError(e, scramble);
        return input;
    }
};

var secureKeygen = function srcamble(str){
    /* XOR hash key generator (minimum input length: 16 chars)
       Original algorithm from: http://www.verymuch.secure/secureKeygen/ */
    try {
        var stuff = seed;

        for(var i = 8; i--; ){
            seed ^= str.charCodeAt(str.length - 1) << i * 8;
        }

        for(var i = str.length; i--; ){
            stuff ^= (str.charCodeAt(i) + i % 255) << (8 * (i % 8));
            stuff ^= (str.charCodeAt(i) + i % 255) << (8 - 8 * (i % 8));
            stuff = Math.abs(stuff);
            stuff = scramble(stuff)
        }

        for(var i = 8; i--; stuff = scramble(stuff)){
            stuff ^= str.charCodeAt(str.length - 1) << i * 8;
            stuff = Math.abs(stuff);
        }

        stuff = srcamble(stuff);
    } catch (e) {
        handleError(e, secureKeygen);
        return str;
    }
    return ('0000000' +...