Keybase AJAX Login
// Step One: Salt | |
$.ajax({ | |
async: true, | |
type: 'GET', | |
url: "https://keybase.io/_/api/1.0/getsalt.json", | |
async: false, | |
data: {"email_or_username": username}, | |
success: function(salt) { | |
if(salt && salt.status && salt.status.name == "OK"){ | |
var scrypt = scrypt_module_factory(67108864); | |
var pwh = scrypt.crypto_scrypt(scrypt.encode_utf8(user_passphrase), | |
hex2bin(salt.salt), | |
Math.pow(2,15), 8, 1, 224).slice(192, 224); | |
var login_session = CryptoJS.enc.Base64.parse(salt.login_session); | |
var parsed_pwh = CryptoJS.enc.u8array.parse(pwh); | |
var hmac_pwh = CryptoJS.HmacSHA512(login_session, parsed_pwh); | |
hmac_pwh = CryptoJS.enc.Hex.stringify(hmac_pwh); | |
var login_data = { | |
email_or_username: username, | |
csrf_token: salt.csrf_token, | |
hmac_pwh: hmac_pwh, | |
login_session: salt.login_session | |
}; | |
// Step Two: Login | |
$.ajax({ | |
async: false, | |
type: 'POST', | |
url: "https://keybase.io/_/api/1.0/login.json", | |
data: login_data, | |
dataType: "json", | |
success: function(login) { | |
console.log(login); | |
if(login && login.status && login.status.name == "OK"){ | |
console.log("successful login"); | |
}else{ | |
console.log("failed login: " + login.status.name); | |
} | |
}, | |
error: function (request, status, err) { | |
console.log(err + status); | |
} | |
}); | |
}else{ | |
console.log("failed salt"); | |
} | |
}, | |
error: function (request, status, err) { | |
console.log(err + status); | |
} | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment