var id; var passWordHash=new Array() function result(hash){ passWordHash.push(hash) //console.log(passWordHash); } $("#submitLogin").one("click", function(){ $(this).text('ログイン中...'); $(this).prop('disabled', true); var email = $("#inputEmail").val(); console.log(email); var request = $.ajax({ type: "POST", url: "/check", data: { email: email } }); request.done(function(salts){ passWordHash=new Array(); salts = JSON.parse(salts); if (typeof salts.login !== 'undefined') { window.location.href = "/"; return; }; var passWord = $("#inputPassword").val(); var min = 5 ; var max = 10 ; var random_rounds = Math.floor( Math.random() * (max + 1 - min) ) + min ; try{ var clientSalt = gensalt(random_rounds); }catch(err){ console.log(err); return; }; function hashPassword() { return new Promise(function (resolve, reject) { try{ hashpw( passWord, salts.nounce, result ); resolve(passWordHash[0]) }catch(err){ console.log(err); return; }; }); }; function passwordServerSalt(){ return new Promise(function (resolve, reject) { setTimeout(function () { var shaObj = new jsSHA("SHA-512", "TEXT"); shaObj.setHMACKey(salts.salt, "TEXT"); shaObj.update(passWordHash[0]); passWordHash.push(shaObj.getHMAC("HEX")); console.log(passWordHash); }, 3000); }); }; function passwordClientSalt(){ return new Promise(function (resolve, reject) { setTimeout(function () { var shaObj2 = new jsSHA("SHA-512", "TEXT"); shaObj2.setHMACKey(clientSalt, "TEXT"); shaObj2.update(passWordHash[1]); passWordHash.push(shaObj2.getHMAC("HEX")); console.log(passWordHash); }, 3000); }); }; hashPassword() .then(passwordServerSalt()) .then(passwordClientSalt()) .then(function (value) { setTimeout(function () { console.log(passWordHash[2]); console.log(clientSalt); $.ajax({ type: "POST", url: "/check", data: { password: passWordHash[2], salt: clientSalt } }).done(function(){ window.location.href = "/"; }); }, 3000); }); }); });