Remove local password encryption in login.html
This commit is contained in:
parent
f0f32d31cc
commit
e068c4b24c
|
@ -1,142 +0,0 @@
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Base64 encode / decode
|
|
||||||
* http://www.webtoolkit.info/
|
|
||||||
*
|
|
||||||
**/
|
|
||||||
|
|
||||||
var Base64 = {
|
|
||||||
|
|
||||||
// private property
|
|
||||||
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
|
|
||||||
|
|
||||||
// public method for encoding
|
|
||||||
encode : function (input) {
|
|
||||||
var output = "";
|
|
||||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
input = Base64._utf8_encode(input);
|
|
||||||
|
|
||||||
while (i < input.length) {
|
|
||||||
|
|
||||||
chr1 = input.charCodeAt(i++);
|
|
||||||
chr2 = input.charCodeAt(i++);
|
|
||||||
chr3 = input.charCodeAt(i++);
|
|
||||||
|
|
||||||
enc1 = chr1 >> 2;
|
|
||||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
|
||||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
|
||||||
enc4 = chr3 & 63;
|
|
||||||
|
|
||||||
if (isNaN(chr2)) {
|
|
||||||
enc3 = enc4 = 64;
|
|
||||||
} else if (isNaN(chr3)) {
|
|
||||||
enc4 = 64;
|
|
||||||
}
|
|
||||||
|
|
||||||
output = output +
|
|
||||||
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
|
|
||||||
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return output;
|
|
||||||
},
|
|
||||||
|
|
||||||
// public method for decoding
|
|
||||||
decode : function (input) {
|
|
||||||
var output = "";
|
|
||||||
var chr1, chr2, chr3;
|
|
||||||
var enc1, enc2, enc3, enc4;
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
|
|
||||||
|
|
||||||
while (i < input.length) {
|
|
||||||
|
|
||||||
enc1 = this._keyStr.indexOf(input.charAt(i++));
|
|
||||||
enc2 = this._keyStr.indexOf(input.charAt(i++));
|
|
||||||
enc3 = this._keyStr.indexOf(input.charAt(i++));
|
|
||||||
enc4 = this._keyStr.indexOf(input.charAt(i++));
|
|
||||||
|
|
||||||
chr1 = (enc1 << 2) | (enc2 >> 4);
|
|
||||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
|
||||||
chr3 = ((enc3 & 3) << 6) | enc4;
|
|
||||||
|
|
||||||
output = output + String.fromCharCode(chr1);
|
|
||||||
|
|
||||||
if (enc3 != 64) {
|
|
||||||
output = output + String.fromCharCode(chr2);
|
|
||||||
}
|
|
||||||
if (enc4 != 64) {
|
|
||||||
output = output + String.fromCharCode(chr3);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
output = Base64._utf8_decode(output);
|
|
||||||
|
|
||||||
return output;
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
// private method for UTF-8 encoding
|
|
||||||
_utf8_encode : function (string) {
|
|
||||||
string = string.replace(/\r\n/g,"\n");
|
|
||||||
var utftext = "";
|
|
||||||
|
|
||||||
for (var n = 0; n < string.length; n++) {
|
|
||||||
|
|
||||||
var c = string.charCodeAt(n);
|
|
||||||
|
|
||||||
if (c < 128) {
|
|
||||||
utftext += String.fromCharCode(c);
|
|
||||||
}
|
|
||||||
else if((c > 127) && (c < 2048)) {
|
|
||||||
utftext += String.fromCharCode((c >> 6) | 192);
|
|
||||||
utftext += String.fromCharCode((c & 63) | 128);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
utftext += String.fromCharCode((c >> 12) | 224);
|
|
||||||
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
|
|
||||||
utftext += String.fromCharCode((c & 63) | 128);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return utftext;
|
|
||||||
},
|
|
||||||
|
|
||||||
// private method for UTF-8 decoding
|
|
||||||
_utf8_decode : function (utftext) {
|
|
||||||
var string = "";
|
|
||||||
var i = 0;
|
|
||||||
var c = c1 = c2 = 0;
|
|
||||||
|
|
||||||
while ( i < utftext.length ) {
|
|
||||||
|
|
||||||
c = utftext.charCodeAt(i);
|
|
||||||
|
|
||||||
if (c < 128) {
|
|
||||||
string += String.fromCharCode(c);
|
|
||||||
i++;
|
|
||||||
}
|
|
||||||
else if((c > 191) && (c < 224)) {
|
|
||||||
c2 = utftext.charCodeAt(i+1);
|
|
||||||
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
|
|
||||||
i += 2;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
c2 = utftext.charCodeAt(i+1);
|
|
||||||
c3 = utftext.charCodeAt(i+2);
|
|
||||||
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
|
|
||||||
i += 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return string;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,217 +0,0 @@
|
||||||
/*
|
|
||||||
* jsaes version 0.1 - Copyright 2006 B. Poettering
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License as
|
|
||||||
* published by the Free Software Foundation; either version 2 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
* General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program; if not, write to the Free Software
|
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
|
||||||
* 02111-1307 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* http://point-at-infinity.org/jsaes/
|
|
||||||
*
|
|
||||||
* This is a javascript implementation of the AES block cipher. Key lengths
|
|
||||||
* of 128, 192 and 256 bits are supported.
|
|
||||||
*
|
|
||||||
* The well-functioning of the encryption/decryption routines has been
|
|
||||||
* verified for different key lengths with the test vectors given in
|
|
||||||
* FIPS-197, Appendix C.
|
|
||||||
*
|
|
||||||
* The following code example enciphers the plaintext block '00 11 22 .. EE FF'
|
|
||||||
* with the 256 bit key '00 01 02 .. 1E 1F'.
|
|
||||||
*
|
|
||||||
* AES_Init();
|
|
||||||
*
|
|
||||||
* var block = new Array(16);
|
|
||||||
* for(var i = 0; i < 16; i++)
|
|
||||||
* block[i] = 0x11 * i;
|
|
||||||
*
|
|
||||||
* var key = new Array(32);
|
|
||||||
* for(var i = 0; i < 32; i++)
|
|
||||||
* key[i] = i;
|
|
||||||
*
|
|
||||||
* AES_ExpandKey(key);
|
|
||||||
* AES_Encrypt(block, key);
|
|
||||||
*
|
|
||||||
* AES_Done();
|
|
||||||
*
|
|
||||||
* Report bugs to: jsaes AT point-at-infinity.org
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
/*
|
|
||||||
AES_Init: initialize the tables needed at runtime. Call this function
|
|
||||||
before the (first) key expansion.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AES_Init() {
|
|
||||||
AES_Sbox_Inv = new Array(256);
|
|
||||||
for(var i = 0; i < 256; i++)
|
|
||||||
AES_Sbox_Inv[AES_Sbox[i]] = i;
|
|
||||||
|
|
||||||
AES_ShiftRowTab_Inv = new Array(16);
|
|
||||||
for(var i = 0; i < 16; i++)
|
|
||||||
AES_ShiftRowTab_Inv[AES_ShiftRowTab[i]] = i;
|
|
||||||
|
|
||||||
AES_xtime = new Array(256);
|
|
||||||
for(var i = 0; i < 128; i++) {
|
|
||||||
AES_xtime[i] = i << 1;
|
|
||||||
AES_xtime[128 + i] = (i << 1) ^ 0x1b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
AES_Done: release memory reserved by AES_Init. Call this function after
|
|
||||||
the last encryption/decryption operation.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AES_Done() {
|
|
||||||
delete AES_Sbox_Inv;
|
|
||||||
delete AES_ShiftRowTab_Inv;
|
|
||||||
delete AES_xtime;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
AES_ExpandKey: expand a cipher key. Depending on the desired encryption
|
|
||||||
strength of 128, 192 or 256 bits 'key' has to be a byte array of length
|
|
||||||
16, 24 or 32, respectively. The key expansion is done "in place", meaning
|
|
||||||
that the array 'key' is modified.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AES_ExpandKey(key) {
|
|
||||||
var kl = key.length, ks, Rcon = 1;
|
|
||||||
switch (kl) {
|
|
||||||
case 16: ks = 16 * (10 + 1); break;
|
|
||||||
case 24: ks = 16 * (12 + 1); break;
|
|
||||||
case 32: ks = 16 * (14 + 1); break;
|
|
||||||
default:
|
|
||||||
alert("AES_ExpandKey: Only key lengths of 16, 24 or 32 bytes allowed!");
|
|
||||||
}
|
|
||||||
for(var i = kl; i < ks; i += 4) {
|
|
||||||
var temp = key.slice(i - 4, i);
|
|
||||||
if (i % kl == 0) {
|
|
||||||
temp = new Array(AES_Sbox[temp[1]] ^ Rcon, AES_Sbox[temp[2]],
|
|
||||||
AES_Sbox[temp[3]], AES_Sbox[temp[0]]);
|
|
||||||
if ((Rcon <<= 1) >= 256)
|
|
||||||
Rcon ^= 0x11b;
|
|
||||||
}
|
|
||||||
else if ((kl > 24) && (i % kl == 16))
|
|
||||||
temp = new Array(AES_Sbox[temp[0]], AES_Sbox[temp[1]],
|
|
||||||
AES_Sbox[temp[2]], AES_Sbox[temp[3]]);
|
|
||||||
for(var j = 0; j < 4; j++)
|
|
||||||
key[i + j] = key[i + j - kl] ^ temp[j];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
AES_Encrypt: encrypt the 16 byte array 'block' with the previously
|
|
||||||
expanded key 'key'.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AES_Encrypt(block, key) {
|
|
||||||
var l = key.length;
|
|
||||||
AES_AddRoundKey(block, key.slice(0, 16));
|
|
||||||
for(var i = 16; i < l - 16; i += 16) {
|
|
||||||
AES_SubBytes(block, AES_Sbox);
|
|
||||||
AES_ShiftRows(block, AES_ShiftRowTab);
|
|
||||||
AES_MixColumns(block);
|
|
||||||
AES_AddRoundKey(block, key.slice(i, i + 16));
|
|
||||||
}
|
|
||||||
AES_SubBytes(block, AES_Sbox);
|
|
||||||
AES_ShiftRows(block, AES_ShiftRowTab);
|
|
||||||
AES_AddRoundKey(block, key.slice(i, l));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
AES_Decrypt: decrypt the 16 byte array 'block' with the previously
|
|
||||||
expanded key 'key'.
|
|
||||||
*/
|
|
||||||
|
|
||||||
function AES_Decrypt(block, key) {
|
|
||||||
var l = key.length;
|
|
||||||
AES_AddRoundKey(block, key.slice(l - 16, l));
|
|
||||||
AES_ShiftRows(block, AES_ShiftRowTab_Inv);
|
|
||||||
AES_SubBytes(block, AES_Sbox_Inv);
|
|
||||||
for(var i = l - 32; i >= 16; i -= 16) {
|
|
||||||
AES_AddRoundKey(block, key.slice(i, i + 16));
|
|
||||||
AES_MixColumns_Inv(block);
|
|
||||||
AES_ShiftRows(block, AES_ShiftRowTab_Inv);
|
|
||||||
AES_SubBytes(block, AES_Sbox_Inv);
|
|
||||||
}
|
|
||||||
AES_AddRoundKey(block, key.slice(0, 16));
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
/* The following lookup tables and functions are for internal use only! */
|
|
||||||
|
|
||||||
AES_Sbox = new Array(99,124,119,123,242,107,111,197,48,1,103,43,254,215,171,
|
|
||||||
118,202,130,201,125,250,89,71,240,173,212,162,175,156,164,114,192,183,253,
|
|
||||||
147,38,54,63,247,204,52,165,229,241,113,216,49,21,4,199,35,195,24,150,5,154,
|
|
||||||
7,18,128,226,235,39,178,117,9,131,44,26,27,110,90,160,82,59,214,179,41,227,
|
|
||||||
47,132,83,209,0,237,32,252,177,91,106,203,190,57,74,76,88,207,208,239,170,
|
|
||||||
251,67,77,51,133,69,249,2,127,80,60,159,168,81,163,64,143,146,157,56,245,
|
|
||||||
188,182,218,33,16,255,243,210,205,12,19,236,95,151,68,23,196,167,126,61,
|
|
||||||
100,93,25,115,96,129,79,220,34,42,144,136,70,238,184,20,222,94,11,219,224,
|
|
||||||
50,58,10,73,6,36,92,194,211,172,98,145,149,228,121,231,200,55,109,141,213,
|
|
||||||
78,169,108,86,244,234,101,122,174,8,186,120,37,46,28,166,180,198,232,221,
|
|
||||||
116,31,75,189,139,138,112,62,181,102,72,3,246,14,97,53,87,185,134,193,29,
|
|
||||||
158,225,248,152,17,105,217,142,148,155,30,135,233,206,85,40,223,140,161,
|
|
||||||
137,13,191,230,66,104,65,153,45,15,176,84,187,22);
|
|
||||||
|
|
||||||
AES_ShiftRowTab = new Array(0,5,10,15,4,9,14,3,8,13,2,7,12,1,6,11);
|
|
||||||
|
|
||||||
function AES_SubBytes(state, sbox) {
|
|
||||||
for(var i = 0; i < 16; i++)
|
|
||||||
state[i] = sbox[state[i]];
|
|
||||||
}
|
|
||||||
|
|
||||||
function AES_AddRoundKey(state, rkey) {
|
|
||||||
for(var i = 0; i < 16; i++)
|
|
||||||
state[i] ^= rkey[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
function AES_ShiftRows(state, shifttab) {
|
|
||||||
var h = new Array().concat(state);
|
|
||||||
for(var i = 0; i < 16; i++)
|
|
||||||
state[i] = h[shifttab[i]];
|
|
||||||
}
|
|
||||||
|
|
||||||
function AES_MixColumns(state) {
|
|
||||||
for(var i = 0; i < 16; i += 4) {
|
|
||||||
var s0 = state[i + 0], s1 = state[i + 1];
|
|
||||||
var s2 = state[i + 2], s3 = state[i + 3];
|
|
||||||
var h = s0 ^ s1 ^ s2 ^ s3;
|
|
||||||
state[i + 0] ^= h ^ AES_xtime[s0 ^ s1];
|
|
||||||
state[i + 1] ^= h ^ AES_xtime[s1 ^ s2];
|
|
||||||
state[i + 2] ^= h ^ AES_xtime[s2 ^ s3];
|
|
||||||
state[i + 3] ^= h ^ AES_xtime[s3 ^ s0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function AES_MixColumns_Inv(state) {
|
|
||||||
for(var i = 0; i < 16; i += 4) {
|
|
||||||
var s0 = state[i + 0], s1 = state[i + 1];
|
|
||||||
var s2 = state[i + 2], s3 = state[i + 3];
|
|
||||||
var h = s0 ^ s1 ^ s2 ^ s3;
|
|
||||||
var xh = AES_xtime[h];
|
|
||||||
var h1 = AES_xtime[AES_xtime[xh ^ s0 ^ s2]] ^ h;
|
|
||||||
var h2 = AES_xtime[AES_xtime[xh ^ s1 ^ s3]] ^ h;
|
|
||||||
state[i + 0] ^= h1 ^ AES_xtime[s0 ^ s1];
|
|
||||||
state[i + 1] ^= h2 ^ AES_xtime[s1 ^ s2];
|
|
||||||
state[i + 2] ^= h1 ^ AES_xtime[s2 ^ s3];
|
|
||||||
state[i + 3] ^= h2 ^ AES_xtime[s3 ^ s0];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,174 +0,0 @@
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
/* SHA-256 implementation in JavaScript | (c) Chris Veness 2002-2010 | www.movable-type.co.uk */
|
|
||||||
/* - see http://csrc.nist.gov/groups/ST/toolkit/secure_hashing.html */
|
|
||||||
/* http://csrc.nist.gov/groups/ST/toolkit/examples.html */
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
var Sha256 = {}; // Sha256 namespace
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Generates SHA-256 hash of string
|
|
||||||
*
|
|
||||||
* @param {String} msg String to be hashed
|
|
||||||
* @param {Boolean} [utf8encode=true] Encode msg as UTF-8 before generating hash
|
|
||||||
* @returns {String} Hash of msg as hex character string
|
|
||||||
*/
|
|
||||||
Sha256.hash = function(msg, utf8encode) {
|
|
||||||
utf8encode = (typeof utf8encode == 'undefined') ? true : utf8encode;
|
|
||||||
|
|
||||||
// convert string to UTF-8, as SHA only deals with byte-streams
|
|
||||||
if (utf8encode) msg = Utf8.encode(msg);
|
|
||||||
|
|
||||||
// constants [§4.2.2]
|
|
||||||
var K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
|
||||||
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
|
||||||
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
||||||
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
|
||||||
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
|
||||||
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
||||||
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
|
||||||
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];
|
|
||||||
// initial hash value [§5.3.1]
|
|
||||||
var H = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];
|
|
||||||
|
|
||||||
// PREPROCESSING
|
|
||||||
|
|
||||||
msg += String.fromCharCode(0x80); // add trailing '1' bit (+ 0's padding) to string [§5.1.1]
|
|
||||||
|
|
||||||
// convert string msg into 512-bit/16-integer blocks arrays of ints [§5.2.1]
|
|
||||||
var l = msg.length/4 + 2; // length (in 32-bit integers) of msg + ‘1’ + appended length
|
|
||||||
var N = Math.ceil(l/16); // number of 16-integer-blocks required to hold 'l' ints
|
|
||||||
var M = new Array(N);
|
|
||||||
|
|
||||||
for (var i=0; i<N; i++) {
|
|
||||||
M[i] = new Array(16);
|
|
||||||
for (var j=0; j<16; j++) { // encode 4 chars per integer, big-endian encoding
|
|
||||||
M[i][j] = (msg.charCodeAt(i*64+j*4)<<24) | (msg.charCodeAt(i*64+j*4+1)<<16) |
|
|
||||||
(msg.charCodeAt(i*64+j*4+2)<<8) | (msg.charCodeAt(i*64+j*4+3));
|
|
||||||
} // note running off the end of msg is ok 'cos bitwise ops on NaN return 0
|
|
||||||
}
|
|
||||||
// add length (in bits) into final pair of 32-bit integers (big-endian) [§5.1.1]
|
|
||||||
// note: most significant word would be (len-1)*8 >>> 32, but since JS converts
|
|
||||||
// bitwise-op args to 32 bits, we need to simulate this by arithmetic operators
|
|
||||||
M[N-1][14] = ((msg.length-1)*8) / Math.pow(2, 32); M[N-1][14] = Math.floor(M[N-1][14])
|
|
||||||
M[N-1][15] = ((msg.length-1)*8) & 0xffffffff;
|
|
||||||
|
|
||||||
|
|
||||||
// HASH COMPUTATION [§6.1.2]
|
|
||||||
|
|
||||||
var W = new Array(64); var a, b, c, d, e, f, g, h;
|
|
||||||
for (var i=0; i<N; i++) {
|
|
||||||
|
|
||||||
// 1 - prepare message schedule 'W'
|
|
||||||
for (var t=0; t<16; t++) W[t] = M[i][t];
|
|
||||||
for (var t=16; t<64; t++) W[t] = (Sha256.sigma1(W[t-2]) + W[t-7] + Sha256.sigma0(W[t-15]) + W[t-16]) & 0xffffffff;
|
|
||||||
|
|
||||||
// 2 - initialise working variables a, b, c, d, e, f, g, h with previous hash value
|
|
||||||
a = H[0]; b = H[1]; c = H[2]; d = H[3]; e = H[4]; f = H[5]; g = H[6]; h = H[7];
|
|
||||||
|
|
||||||
// 3 - main loop (note 'addition modulo 2^32')
|
|
||||||
for (var t=0; t<64; t++) {
|
|
||||||
var T1 = h + Sha256.Sigma1(e) + Sha256.Ch(e, f, g) + K[t] + W[t];
|
|
||||||
var T2 = Sha256.Sigma0(a) + Sha256.Maj(a, b, c);
|
|
||||||
h = g;
|
|
||||||
g = f;
|
|
||||||
f = e;
|
|
||||||
e = (d + T1) & 0xffffffff;
|
|
||||||
d = c;
|
|
||||||
c = b;
|
|
||||||
b = a;
|
|
||||||
a = (T1 + T2) & 0xffffffff;
|
|
||||||
}
|
|
||||||
// 4 - compute the new intermediate hash value (note 'addition modulo 2^32')
|
|
||||||
H[0] = (H[0]+a) & 0xffffffff;
|
|
||||||
H[1] = (H[1]+b) & 0xffffffff;
|
|
||||||
H[2] = (H[2]+c) & 0xffffffff;
|
|
||||||
H[3] = (H[3]+d) & 0xffffffff;
|
|
||||||
H[4] = (H[4]+e) & 0xffffffff;
|
|
||||||
H[5] = (H[5]+f) & 0xffffffff;
|
|
||||||
H[6] = (H[6]+g) & 0xffffffff;
|
|
||||||
H[7] = (H[7]+h) & 0xffffffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Sha256.toHexStr(H[0]) + Sha256.toHexStr(H[1]) + Sha256.toHexStr(H[2]) + Sha256.toHexStr(H[3]) +
|
|
||||||
Sha256.toHexStr(H[4]) + Sha256.toHexStr(H[5]) + Sha256.toHexStr(H[6]) + Sha256.toHexStr(H[7]);
|
|
||||||
}
|
|
||||||
|
|
||||||
Sha256.ROTR = function(n, x) { return (x >>> n) | (x << (32-n)); }
|
|
||||||
Sha256.Sigma0 = function(x) { return Sha256.ROTR(2, x) ^ Sha256.ROTR(13, x) ^ Sha256.ROTR(22, x); }
|
|
||||||
Sha256.Sigma1 = function(x) { return Sha256.ROTR(6, x) ^ Sha256.ROTR(11, x) ^ Sha256.ROTR(25, x); }
|
|
||||||
Sha256.sigma0 = function(x) { return Sha256.ROTR(7, x) ^ Sha256.ROTR(18, x) ^ (x>>>3); }
|
|
||||||
Sha256.sigma1 = function(x) { return Sha256.ROTR(17, x) ^ Sha256.ROTR(19, x) ^ (x>>>10); }
|
|
||||||
Sha256.Ch = function(x, y, z) { return (x & y) ^ (~x & z); }
|
|
||||||
Sha256.Maj = function(x, y, z) { return (x & y) ^ (x & z) ^ (y & z); }
|
|
||||||
|
|
||||||
//
|
|
||||||
// hexadecimal representation of a number
|
|
||||||
// (note toString(16) is implementation-dependant, and
|
|
||||||
// in IE returns signed numbers when used on full words)
|
|
||||||
//
|
|
||||||
Sha256.toHexStr = function(n) {
|
|
||||||
var s="", v;
|
|
||||||
for (var i=7; i>=0; i--) { v = (n>>>(i*4)) & 0xf; s += v.toString(16); }
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
/* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */
|
|
||||||
/* single-byte character encoding (c) Chris Veness 2002-2010 */
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
||||||
|
|
||||||
var Utf8 = {}; // Utf8 namespace
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Encode multi-byte Unicode string into utf-8 multiple single-byte characters
|
|
||||||
* (BMP / basic multilingual plane only)
|
|
||||||
*
|
|
||||||
* Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars
|
|
||||||
*
|
|
||||||
* @param {String} strUni Unicode string to be encoded as UTF-8
|
|
||||||
* @returns {String} encoded string
|
|
||||||
*/
|
|
||||||
Utf8.encode = function(strUni) {
|
|
||||||
// use regular expressions & String.replace callback function for better efficiency
|
|
||||||
// than procedural approaches
|
|
||||||
var strUtf = strUni.replace(
|
|
||||||
/[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz
|
|
||||||
function(c) {
|
|
||||||
var cc = c.charCodeAt(0);
|
|
||||||
return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); }
|
|
||||||
);
|
|
||||||
strUtf = strUtf.replace(
|
|
||||||
/[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz
|
|
||||||
function(c) {
|
|
||||||
var cc = c.charCodeAt(0);
|
|
||||||
return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); }
|
|
||||||
);
|
|
||||||
return strUtf;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decode utf-8 encoded string back into multi-byte Unicode characters
|
|
||||||
*
|
|
||||||
* @param {String} strUtf UTF-8 string to be decoded back to Unicode
|
|
||||||
* @returns {String} decoded string
|
|
||||||
*/
|
|
||||||
Utf8.decode = function(strUtf) {
|
|
||||||
// note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char!
|
|
||||||
var strUni = strUtf.replace(
|
|
||||||
/[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars
|
|
||||||
function(c) { // (note parentheses for precence)
|
|
||||||
var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f);
|
|
||||||
return String.fromCharCode(cc); }
|
|
||||||
);
|
|
||||||
strUni = strUni.replace(
|
|
||||||
/[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars
|
|
||||||
function(c) { // (note parentheses for precence)
|
|
||||||
var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f;
|
|
||||||
return String.fromCharCode(cc); }
|
|
||||||
);
|
|
||||||
return strUni;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
|
|
|
@ -1,24 +1,6 @@
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>Dynastie</title>
|
<title>Dynastie</title>
|
||||||
<script type="text/javascript" src="{{ STATIC_URL }}js/jsaes.js"></script>
|
|
||||||
<script type="text/javascript" src="{{ STATIC_URL }}js/sha256.js"/></script>
|
|
||||||
<script type="text/javascript" src="{{ STATIC_URL }}js/base64.js"/></script>
|
|
||||||
<script type="text/javascript" language="javascript">
|
|
||||||
<!--
|
|
||||||
function encryptPassword()
|
|
||||||
{
|
|
||||||
var password = "{{ auth_key }};
|
|
||||||
var plaintext = Sha256.hash(document.getElementById("password").value, false);
|
|
||||||
//AES_Init();
|
|
||||||
//AES_ExpandKey(password);
|
|
||||||
//AES_Encrypt(plaintext, password);
|
|
||||||
document.getElementById("password").value = Base64.encode(plaintext);
|
|
||||||
//AES_Done();
|
|
||||||
document.forms[0].submit();
|
|
||||||
}
|
|
||||||
//-->
|
|
||||||
</script>
|
|
||||||
<style type="text/css">
|
<style type="text/css">
|
||||||
div.logo {
|
div.logo {
|
||||||
margin-top:2%;
|
margin-top:2%;
|
||||||
|
@ -43,7 +25,7 @@
|
||||||
<img src="{{ STATIC_URL }}images/logo.png"/>
|
<img src="{{ STATIC_URL }}images/logo.png"/>
|
||||||
</div>
|
</div>
|
||||||
<div class="form">
|
<div class="form">
|
||||||
<form method="post" action="/index" onSubmit="encryptPassword()">
|
<form method="post" action="/index">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% if login_failed %} <p id="login_failed">Login or password is invalid</p> {% endif %}
|
{% if login_failed %} <p id="login_failed">Login or password is invalid</p> {% endif %}
|
||||||
<table>
|
<table>
|
||||||
|
|
3
views.py
3
views.py
|
@ -95,8 +95,7 @@ def index(request):
|
||||||
else:
|
else:
|
||||||
return HttpResponseRedirect('/blog')
|
return HttpResponseRedirect('/blog')
|
||||||
|
|
||||||
c = {'auth_key': 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',\
|
c = {'login_failed' : login_failed}
|
||||||
'login_failed' : login_failed}
|
|
||||||
|
|
||||||
return render(request, 'templates/login.html', c)
|
return render(request, 'templates/login.html', c)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user