Skip to content

Instantly share code, notes, and snippets.

@lettergram
Last active December 13, 2015 03:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lettergram/a71d6f38a900ad50f46e to your computer and use it in GitHub Desktop.
Save lettergram/a71d6f38a900ad50f46e to your computer and use it in GitHub Desktop.
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